私はeclipse-jdt-astを使ってオーバーライドメソッドバインディングを取得しようとしています。 eclipseを使用しているときと同じように、Ctrlキーを押しながらメソッドをクリックすると、メソッドの実装にジャンプできます。jdt.astを使用して多型を解決する方法
これは、Javaの動的bingingだが、次は適切に機能しますが:
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;
}
}
uはここで読むことができると思いますそれは、少し長いけど簡単です。個人的には、
findDeclaringNodeメソッドがそれを行う可能性があります。しかし、バインディングを渡すとnullを返します。だからあなたはどんなアイデアを持っていますか? ありがとうたくさん
あなたの答えを感謝し、私は理解してい今すぐコード! – CXWorks
ああ、もう1つの質問、どうやってそれを見つけましたか?私は検索しようとしましたが、あまりにも多くのコードがあります – CXWorks
正直言って、私はすでにあなたがASTだけでなく検索エンジンを必要としていると感じていました。そのような一般的な直感を得るには、JDTに関するチュートリアルの1つ、たとえばhttp://www.eclipsecon.org/2012/sites/eclipsecon.org.2012/files/How%20Toを参照することをお勧めします%20Train%20the%20JDT%20Dragon%20combined.pdfもう一つの選択肢は、デバッガを使って実際にツールを見ていることです。 –