0

Java ソース コードの静的コード分析を行いたいと考えています。解析のために、Eclipse の外部で Eclipse JDT (3.6)ASTParserを次のコードで使用します。

private static final Map<String, String> COMPILER_OPTIONS;

static {
    COMPILER_OPTIONS = new HashMap<String, String>(JavaCore.getOptions());
    COMPILER_OPTIONS.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_6);
    COMPILER_OPTIONS.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_6);
    COMPILER_OPTIONS.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_6);
}

private CompilationUnit parseReadSourceFileIfPossible(String readSourceFile) {
    CompilationUnit result = null;
    if (isPossibleToParse(readSourceFile)) {
        final ASTParser parser = createAndConfigureParser();
        parser.setSource(readSourceFile.toCharArray());
        result = (CompilationUnit) parser.createAST(null);
    }
    return result;
}

private ASTParser createAndConfigureParser() {
    final ASTParser result = ASTParser.newParser(AST.JLS3);
    result.setKind(ASTParser.K_COMPILATION_UNIT);
    result.setCompilerOptions(COMPILER_OPTIONS); return result;
}

「通常の」Java クラスの場合、このアプローチは問題なく機能します。ただし、次のクラス ( ValidUnrestrictedComponent) を解析すると、パーサーで問題が発生します。

package valid;

import de.htwg_konstanz.joi.annotations.JoiComponten;

@JoiComponent
public final class ValidUnrestrictedComponent {

    private static final class Implementation implements TestInterface {

        @Override
        public int doSomething() {
            // TODO Auto-generated method stub
            return 0;
        }
    }

    private ValidUnrestrictedComponent() {
        throw new AssertionError();
    }

    public static Implementation getInstance() {
        return new Implementation();
    }

    private static void getNothing() {
      // Nothing to do here
    }

    private void doNothing() {
      // Nothing to do here
    }

}

type のオブジェクトを受け取りましたが、ネストされたメンバーとそのメソッドCompilationUnitのみが含まれています。Implementationクラスの残りの部分 – いいね getInstance、またはdoNothing欠落しています。

得られた には、次の 3 つの問題CompilationUnitがあるフィールドが含まれています。problems

  • DefaultProblem (id=141): Pb(240) 構文エラーです。「}」を挿入して ClassBody を完成させてください
  • DefaultProblem (id=143): Pb(240) 構文エラーです。「}」を挿入して ClassBody を完成させてください
  • DefaultProblem (id=164): Pb(240) 構文エラー、"}" を挿入して MethodBody を完成させてください

上記のクラスに構文エラーは見られません ValidUnrestrictedComponent

4

1 に答える 1

0

「readSourceFile」の内容を再確認できますか? 私の推測では、「\n」または改行文字は含まれていません。改行文字がないと、最初のコメントの後のすべての行がコメント自体の一部になります。

于 2012-06-13T08:33:03.900 に答える