10

EclipseのJDTコンパイラーは、カスケードコンパイルを実行できるようにするINameEnvironmentメソッドを定義するインターフェースを提供します。findType(...)不思議なことに、標準のJDKコンパイラツールキットを使用してそれを行う方法があるかどうか知りたいですか?

注:このシナリオは、相互依存関係を持つテンプレートファイルで生成されたクラスのメモリコンパイルを行うテンプレートエンジンであり、テンプレートファイルに遭遇した順序を予測できないため、Foo親がBarコンパイルされる前に最初にコンパイルする必要がある場合があります。カスケードコンパイルを実行するメカニズムが必要です。つまり、コンパイル中にFoo別のソースを生成しBar、コンパイルを続行するために最初にコンパイルする必要がありFooます。次のようなコード:

private NameEnvironmentAnswer findType(final String name) {
    try {
        if (!name.contains(TemplateClass.CN_SUFFIX)) {
            return findStandType(name);
        }

        char[] fileName = name.toCharArray();
        TemplateClass templateClass = classCache.getByClassName(name);

        // TemplateClass exists
        if (templateClass != null) {

            if (templateClass.javaByteCode != null) {
                ClassFileReader classFileReader = new ClassFileReader(templateClass.javaByteCode, fileName, true);
                return new NameEnvironmentAnswer(classFileReader, null);
            }
            // Cascade compilation
            ICompilationUnit compilationUnit = new CompilationUnit(name);
            return new NameEnvironmentAnswer(compilationUnit, null);
        }

        // So it's a standard class
        return findStandType(name);
    } catch (ClassFormatException e) {
        // Something very very bad
        throw new RuntimeException(e);
    }
}
4

2 に答える 2

1

このHelloWorldの例を読んで、問題が解決するかどうかを確認してください。コードを投稿しないと、特定の問題が何であるかを言うのは困難です。

于 2012-01-17T00:51:53.120 に答える