5

私の現在の理解では、JDTは、Javaコードを表現および操作するための2つの異なるインターフェースとクラス階層を提供します。

  • Javaモデル:Javaプロジェクトを表現する方法を提供します。作成は高速ですが、ASTクラス階層ほど多くの情報は含まれていません。たとえば、ソースファイル内の各要素の正確な位置に関する情報はありません(利用可能なAST内)。

  • AST:ソースコードのより詳細な表現に加えて、それを操作するための手段を提供します。

あれは正しいですか?

現在、I * Binding(IBindingで始まる)という名前のインターフェースの階層もあります(:IMethodBinding)。たとえば、メソッドを処理するための3つの異なるタイプがあります。

ドキュメントからIMethodBindingはASTからのMethodInvocationに非常に似ているように見えますが、明確な区別がわかりません。いつ使用する必要がありますか。誰かがこれを明確にしてくれませんか?

4

1 に答える 1

8

生のASTノードには、変数の使用から宣言への参照、またはメソッド呼び出しからメソッド宣言への参照など、ノード間の参照は含まれていません。MethodInvocationオブジェクトでメソッド名を検査することはできますが、実際に呼び出されているクラスのメソッドをすぐに知ることはできません。そのためには、スコーピング分析が必要です。

この分析は、バインディング解決と呼ばれます。IBindingオブジェクトはASTノードにアタッチされており、それらを使用して、たとえば、を使用して特定のMethodInvocationASTノードのMethodDeclarationASTノードを見つけることができます。CompilationUnit.findDeclaringNode(methodInvocationNode.resolveMethodBidning().getKey())

またはCompilationUnit.findDeclaringNode(method.getKey())、特定のIMethodオブジェクトに対応する宣言が含まれているASTノードを見つけるために使用できます。

MethodInvocation.resolveBinding().getKey() ==
MethodDeclaration.resolveBinding().getKey() ==
IMethod.getKey()
于 2013-01-30T10:34:45.657 に答える