2017-12-18 4 views
0

사용자 정의 JVM 언어에 대한 정적 코드 분석 도구를 구현해야하며 Java Class<?> 클래스에서 액세스 할 수있는 대부분의 메소드 (예 : getDeclaredMethods(): Method[])를 갖고 싶습니다.사용자 정의 JVM 언어에 대한 정적 코드 분석 도구의 유형 정보를 구현하는 방법은 무엇입니까?

1) 모든 클래스를 컴파일하여 javap를 호출 할 수있는 클래스 파일을 만든 다음 javap의 결과를 java 소스 파일에 저장하고 Java 유형 정보를 사용합니다. .

2) antlr4를 사용하여 Java에서 액세스 할 수있는 것과 동일한 클래스 구조를 만듭니다. 어쩌면 다른 접근법이 있을까요?

나는 휠 2를 재발 명하고 있거나 유효한 접근 방법 인 것처럼 느낍니다. 옵션 번호 1이 더 좋을 것이라고 생각하지만이 날씨가 좋을지 확신 할 수 없습니다 ... 그리고 내 맞춤 언어의 모든 파일을 컴파일해야하기 때문에 정적 코드 분석이 아닙니다.

나를 도와 주시겠습니까, 아니면 적어도 올바른 방향으로 나를 가리 키시겠습니까?

+0

"사용자 정의 JVM 언어"라는 용어는 JVM에서 실행되는 것을 의미하므로 java.lang.Class를 통해 이미 액세스 및 검사 할 수있는 클래스로 나타내야합니다. 몇 가지 도구를 통해 두 가지 대체 우회 경로가 무엇인지 명확하지 않습니다. 각각의 도구는 처음에 이미 보유하고있는 것으로 끝납니다. 실제로 달성하고자하는 것에 대해 더 많이 설명해야합니다. – Holger

+0

이 언어가 예를 들어 스칼라라고 가정 해 봅시다. (결과적으로 JVM의 * .class 파일이 생성되는 언어가 다릅니다.) 언어의 구문은 자바와 약간 다릅니다. 내 사용자 지정 언어의 소스 코드 파일을 컴파일하지 않은 채 어떻게 든 그 파일 (파일)을 읽고 싶습니다. 그런 다음 최소한의 노력으로 Java.Class와 같은 API를 가지고 있습니다. 이게 더 분명해지기를 바랍니다. – BlueLettuce16

+0

아닙니다. "* 사용자 정의 언어의 소스 코드 파일을 컴파일하지 않았습니까?" 자신의 언어에 맞는 컴파일러가 없으면 "jvm-language"가 없습니다. 그리고 당신의 변종 1의 첫 번째 단계는 소스를 컴파일하는 것입니다. 그리고 Reflection이 사용하고있는 것을 이미 가지고 있습니다. "* javap를 호출 한 다음 javap의 결과를 java 소스 파일에 저장하는 *"아이디어는 컴파일 된'.class' 파일에 아직 없습니까? 그것은 "* Java 유형 정보를 사용합니까?"분명히 내장 Reflection이 아닌가? – Holger

답변

0

바이트 코드를 처리하기 위해 javassist과 [cglib]가 있습니다. Google의 errorprone은 프로세스/컴파일러를 대신 빌드합니다. 정적 코드 분석을 컴파일러의 일부로 만드는 것은 나쁜 생각이 아닙니다. 예를 들어, Java 컴파일러는 도달 할 수없는 코드를 검사합니다.

+0

정적 컴파일러 분석을 컴파일러의 일부로 만들고 싶지 않습니다. 사용자 정의 JVM 언어에 대한 정적 코드 분석 도구를 작성 중이며 현재 소스 파일에서 작동합니다. – BlueLettuce16