기존 클래스에서 (Java 바이트 코드 생성을 통해) 새 클래스를 생성해야합니다. 클래스의 메서드의 본문 (표현식)을 분석하겠습니다. 표현식은 내가 생성 할 코드를 결정할 것입니다.행 번호를 제어 할 때 어떤 바이트 코드 라이브러리가 필요합니까?
필자에게있어 새로운 클래스 (기본 Java 파일과 동일) 및 제어 라인 번호 (예외가 발생하면 stacktrace에 기본 Java 파일의 행 번호가 포함되어야 함)의 소스 파일을 설정하는 것이 importand입니다.
예 : 파일이 입니다. BaseClass.java입니다. 컴파일러는 BaseClass.class을 생성합니다. 이 클래스 파일을 분석하고 GeneratedClass.class에 대한 바이트 코드를 생성하고 싶습니다. c에 예외가 발생하면 stacktrace에 "BaseClass.java line 3"이 포함되어야합니다.
BaseClass.java
1: class BaseClass {
2: void method() {
3: call();
4: }
5:}
GeneratesClaas.class
a: class GeneratedClass {
b: void generatedMethod() {
c: generatedCall();
d: }
e:}
내 질문 :이 요구 사항을 지원하는 라이브러리가 있습니까? Javassist, ASM 또는 BCEL? 이 목적을 위해 무엇을 사용해야합니까? 이를 수행하는 방법이나 예제 코드가 도움이 될 것입니다.
편집 : 요점은 fullfiled 할 수 없기 때문에 사용하지 말아야 할 라이브러리를 알려주는 것입니다.
대부분의 디 컴파일러는 원본 코드 줄을 주석으로 (주석으로) 인쇄 할 수 있습니다. 이것을 파싱하고 코드를 재정렬 할 수 있습니다. 발견 할 수있는 문제는 디 컴파일 된 코드가 정확히 동일하지 않기 때문에 동일한 순서가 아닐 수 있다는 것입니다. –
디 컴파일러는 내가 뭘하고 있는지 알지 못한다. 새로운 바이트 코드를 생성하려면 런타임에이 정보가 필요합니다. – Arne