사용자 정의 JVM 언어에 대한 정적 코드 분석 도구를 구현해야하며 Java Class<?>
클래스에서 액세스 할 수있는 대부분의 메소드 (예 : getDeclaredMethods(): Method[]
)를 갖고 싶습니다.사용자 정의 JVM 언어에 대한 정적 코드 분석 도구의 유형 정보를 구현하는 방법은 무엇입니까?
1) 모든 클래스를 컴파일하여 javap를 호출 할 수있는 클래스 파일을 만든 다음 javap의 결과를 java 소스 파일에 저장하고 Java 유형 정보를 사용합니다. .
2) antlr4를 사용하여 Java에서 액세스 할 수있는 것과 동일한 클래스 구조를 만듭니다. 어쩌면 다른 접근법이 있을까요?
나는 휠 2를 재발 명하고 있거나 유효한 접근 방법 인 것처럼 느낍니다. 옵션 번호 1이 더 좋을 것이라고 생각하지만이 날씨가 좋을지 확신 할 수 없습니다 ... 그리고 내 맞춤 언어의 모든 파일을 컴파일해야하기 때문에 정적 코드 분석이 아닙니다.
나를 도와 주시겠습니까, 아니면 적어도 올바른 방향으로 나를 가리 키시겠습니까?
"사용자 정의 JVM 언어"라는 용어는 JVM에서 실행되는 것을 의미하므로 java.lang.Class를 통해 이미 액세스 및 검사 할 수있는 클래스로 나타내야합니다. 몇 가지 도구를 통해 두 가지 대체 우회 경로가 무엇인지 명확하지 않습니다. 각각의 도구는 처음에 이미 보유하고있는 것으로 끝납니다. 실제로 달성하고자하는 것에 대해 더 많이 설명해야합니다. – Holger
이 언어가 예를 들어 스칼라라고 가정 해 봅시다. (결과적으로 JVM의 * .class 파일이 생성되는 언어가 다릅니다.) 언어의 구문은 자바와 약간 다릅니다. 내 사용자 지정 언어의 소스 코드 파일을 컴파일하지 않은 채 어떻게 든 그 파일 (파일)을 읽고 싶습니다. 그런 다음 최소한의 노력으로 Java.Class와 같은 API를 가지고 있습니다. 이게 더 분명해지기를 바랍니다. – BlueLettuce16
아닙니다. "* 사용자 정의 언어의 소스 코드 파일을 컴파일하지 않았습니까?" 자신의 언어에 맞는 컴파일러가 없으면 "jvm-language"가 없습니다. 그리고 당신의 변종 1의 첫 번째 단계는 소스를 컴파일하는 것입니다. 그리고 Reflection이 사용하고있는 것을 이미 가지고 있습니다. "* javap를 호출 한 다음 javap의 결과를 java 소스 파일에 저장하는 *"아이디어는 컴파일 된'.class' 파일에 아직 없습니까? 그것은 "* Java 유형 정보를 사용합니까?"분명히 내장 Reflection이 아닌가? – Holger