문제

그것은에 액세스합니(AST)부 javac.exe 프로그래밍 방식으로?을 제공할 수 있는 예?

도움이 되었습니까?

해결책

예, 가능하지만 Java 6 이후에 만 가능합니다. Peter von der Ahé 두 JSR에 대해 이야기합니다 이 인터뷰. JSR 199 :

JSR 199 컴파일러 API는 세 가지로 구성됩니다. 첫 번째는 기본적으로 API를 통해 컴파일러를 호출 할 수 있습니다. 둘째, API를 사용하면 컴파일러가 파일을 찾아서 쓰는 방식을 사용자 정의 할 수 있습니다. 컴파일러가 처리하는 파일이 반드시 파일 시스템에 있지 않기 때문에 추상적 인 의미의 파일을 의미합니다. JSR 199의 파일 추상화를 사용하면 데이터베이스에 파일이 있고 예를 들어 메모리에 직접 출력을 생성 할 수 있습니다. 마지막으로, JSR 199 API를 사용하면 컴파일러에서 진단을 구조화 된 방식으로 수집하여 IDE 편집기의 오류 메시지 (예 : 오류 메시지)를 쉽게 변환 할 수 있습니다.

JSR 269는 주석 처리 API입니다.

이 기사 액세스에 대한 훌륭한 개요를 제공합니다 컴파일러 트리 API. 그 영역 "초록 구문 트리 액세스 : 컴파일러 트리 API"특히 당신의 질문에 적합한 것 같습니다.

당신이하고있는 일에 따라, 당신은 또한 잭팟 규칙 언어, 컴파일러 트리에 플러그인하는 독립형 리팩토링 엔진입니다.

다른 팁

컴파일과 실행과이 -cp tools.jar (여기서 당신의 위치를 지정하신 tools.jar, 명).

import com.sun.source.util.Trees;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;

public class JCTreeTest {
    private static final JavaCompiler javac
            = ToolProvider.getSystemJavaCompiler();

    public static void main(String[] args) {
        final StandardJavaFileManager jfm
                = javac.getStandardFileManager(null, null, null);
        final JavaCompiler.CompilationTask task
                = javac.getTask(null, jfm, null, null, null,
                  jfm.getJavaFileObjects(args));
        final Trees trees = Trees.instance(task);
        // Do stuff with "trees"
    }
}

그것은 컴파일과 실행을 위해,나만을 재생하지 않은 나무와 물건 나 자신을,그래서 당신은 읽 javadoc 자신입니다.:-)행운을 빕니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top