我正在通過eclipse-jdt-ast獲取覆蓋方法綁定。 就像我們在使用eclipse時一樣,按下Ctrl並單擊該方法,我們可以跳轉到方法實現。如何使用jdt.ast解決多態性問題
雖然它是一個Java的動態暴食,但以下效果很好:
public class Father{
public void test(){}
}
和兒子:
public class Son extends Father{
@Override
public void test(){}
public static void main (String[] arg){
Father f=new Son();
f.test();
}
}
當我們點擊主測試中,我們可以正確地跳到兒子。 java 我想知道如何去做。我試圖查看源代碼,但沒有找到位置,因爲代碼太多。
而且我現在的代碼是:
public class Main {
static String filep="example/Son.java";
static String[] src={"example/"};
static String[] classfile={"example/"};
public static void main(String[] args) throws IOException,Exception{
ASTParser parser = ASTParser.newParser(AST.JLS8);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(Files.toString(new File(filep), Charsets.UTF_8).toCharArray());
// only setEnvironment can we get bindings from char[]
parser.setEnvironment(classfile, src, null, true);
parser.setUnitName(filep);
parser.setResolveBindings(true);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
CompilationUnit compilationUnit = (CompilationUnit) parser.createAST(null);
if (compilationUnit.getAST().hasResolvedBindings()) {
System.out.println("Binding activated.");
}
else {
System.out.println("Binding is not activated.");
}
ASTNode node=compilationUnit.findDeclaringNode("f");
compilationUnit.accept(new Myvisitor(compilationUnit));
}
}
而我的客人是:
public class Myvisitor extends ASTVisitor {
int i=0;
CompilationUnit compilationUnit;
Myvisitor(CompilationUnit compilationUnit){
this.compilationUnit=compilationUnit;
}
@Override
public boolean visit(MethodInvocation node) {
i++;
System.out.println(i);
IMethodBinding binding=node.resolveMethodBinding();
ASTNode astNode=compilationUnit.findDeclaringNode(binding);
System.out.println(astNode);
return true;
}
}
這是一個有點長,但簡單的,希望你能讀到這裏。就我個人而言,我猜想012De1,但是,當我通過綁定時它返回null。那麼你有什麼想法嗎? 非常感謝
感謝您的回答,我的理解現在的代碼! – CXWorks
哦,還有一個問題,你是怎麼找到它的?我試圖搜索,但代碼太多 – CXWorks
說實話,我已經有一種感覺,你需要搜索引擎,而不僅僅是AST :)。爲了獲得這種普遍的直覺,通過JDT上的其中一個教程可能會有所幫助,例如http://www.eclipsecon.org/2012/sites/eclipsecon.org.2012/files/How%20To %20Train%20the%20JDT%20Dragon%20combined.pdf另一個選項是使用調試器來觀察工具。 –