2

このJavaソースコードがあるとしましょう。「extractedMethod(amount)」呼び出しのstartPositionと長さを取得するにはどうすればよいですか?

package smcho;

public class Extract {
String _name = "";

public int extractedMethod(int amount)
{
    ....
}

public int getValue(int amount) {
    if (amount > 10) {
    int z = extractedMethod(amount);
    return z;
    }
    ....
}

ここに画像の説明を入力してください

ヘキサビューアを使用して、開始位置が0x1FAで、長さがlen( "extracted(method)")== 17であることを確認できますが、JDTを使用してプログラムで実行したいと思います。

一度CompilationUnitを取得できましたが、そのCompilationUnitで呼び出し参照を取得する方法を知る必要があります。

IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject orig = root.getProject(this.projectName);
orig.open(pm);
javaProject = JavaCore.create(orig);
IType type = this.javaProject.findType(this.className);
ICompilationUnit unit = type.getCompilationUnit();
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource(unit);
parser.setResolveBindings(true);
CompilationUnit cunit = (CompilationUnit) parser.createAST(null);

ASTNode root = parser.createAST(null);

root.accept(new ASTVisitor() {
    public bool visit(...)
});
4

2 に答える 2

1

ASTNodeの開始行番号と長さは次のように取得できます

int startLineNumber = compilationUnit.getLineNumber(node.getStartPosition()) - 1;
int nodeLength = node.getLength();
int endLineNumber = compilationUnit.getLineNumber(node.getStartPosition() + nodeLength) - 1;

詳細については、以下の投稿を参照してください

于 2013-01-17T03:58:44.057 に答える
0

これは私のために働くコードです。-JDT / ASTVisitor()内に値を格納するにはどうすればよいですか?

public void setPositionFinder(String methodName) throws JavaModelException
{
    //findMethod(methodName);
    IType type = this.javaProject.findType(this.className);
    ICompilationUnit unit = type.getCompilationUnit();
    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(unit);
    parser.setResolveBindings(true);
    CompilationUnit cunit = (CompilationUnit) parser.createAST(null);
    //ASTNode root = parser.createAST(null);

    final String name = this.newMethodName;

    cunit.accept(new ASTVisitor() {
        public boolean visit(MethodInvocation methodInvocation)
        {
            String methodName = methodInvocation.getName().toString();
            System.out.println(methodName);
            if (methodName.equals(name))
            {
                startPosition = methodInvocation.getStartPosition();
                length = methodInvocation.getLength();
                System.out.printf("startPosition %d - Length %d", startPosition, length);       
            }
            return false;
        }
    });
}
于 2013-01-17T12:59:19.893 に答える