2

Eclipse JDTライブラリを使用してJavaソースコードを解析し、クラスで定義されているすべてのメソッドにアクセスします。コードの本体に「//xxxx」のようなコメントが含まれている場合、パーサーはコメントの前に停止し、メソッドmain(String [] args)は無視されます。

これは、解析のサンプルケースです。

public class HelloWorld {

    private String name;
    private int age; 

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
                //Set the age
        this.age = age;
        System.out.println();
    }

    public static void main(String[] args) {

        HelloWorld hw = new HelloWorld();
        if(true) {
            hw.setAge(10);
        }

    }
}

これは、上記のサンプルケースを解析するために私が書いたコードです。

public class Parser {

/**
 * Parse java program in given file path
 * @param filePath
 */
public void parseFile(String filePath) {
    System.out.println("Starting to parse " + filePath);
    char[] source = readCharFromFile(filePath);
    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setKind(ASTParser.K_COMPILATION_UNIT);
    parser.setSource(source);
    parser.setResolveBindings(true);
    CompilationUnit cu = (CompilationUnit) parser.createAST(null);

    cu.accept(new ASTVisitor() {

        @Override
        public boolean visit(MethodDeclaration node) {
            return true;
        }

        @Override
        public void endVisit(MethodDeclaration node) {
            System.out.println("Method " + node.getName().getFullyQualifiedName() + " is visited");
        }

    });
}
}

これを使用してコードを解析すると、メソッドgetName()、、、が無視され ている間にアクセスされたという結果しか得られません。setName()getAge()getAge()main()

あなたの答えを楽しみにしています。ありがとう。

4

2 に答える 2

1

ソースの読み取りに使用しているコードに問題があるようです。

以下のコードを試して、ファイルを読んでください。

File javaFile = new File(filePath);
BufferedReader in = new BufferedReader(new FileReader(javaFile));
final StringBuffer buffer = new StringBuffer();
String line = null;
while (null != (line = in.readLine())) {
     buffer.append(line).append("\n");
}

これを使用してパーサーソースを設定します。

parser.setSource(buffer.toString().toCharArray());

他のすべてはコードでうまくいくようです。

于 2012-06-15T06:24:55.793 に答える
1

問題は、readCharFromFile(filePath)メソッド\nがファイルから行末文字を削除することです。これは、コメントの後のすべての行が実際にはコメントの一部であることを意味します。

于 2012-06-13T08:25:04.263 に答える