2013-01-29 15 views
5

Mój obecny jest zrozumienie, że JDT zapewnia nam dwa różne interfejsy i klasy hierachies do reprezentowania i manipulowania kod Java:Jaka jest rola wiązania I * w Eclipse JDT?

  • Java Model: to sposób przedstawiania projektu Java. Szybko tworzyć, ale nie zawierać jak najwięcej informacji jak klasa AST hierarchię, na przykład nie są dostępne o dokładne położenie każdego elementu w pliku źródłowym informacje (AST, który jest dostępnych)

  • AST: bardziej szczegółowa reprezentacja kodu źródłowego plus zapewnia środki do manipulowania nim.

Czy to prawda?

Teraz istnieje również hierarchia interfejsów o nazwie I * Binding (począwszy od IBinding), na przykład IMethodBinding. Tak na przykład, mamy 3 różne rodzaje do czynienia z metodami:

Z dokumentu IMethodBinding wydaje mi się bardzo podobny do MethodInvocation od AST, ale nie widzę wyraźnego rozróżnienia i kiedy należy z nich korzystać. Czy ktoś mógłby to wyjaśnić?

+1

Czy możesz powiedzieć, jak uzyskać metodę Prowokacja z IMethod? – berezovskyi

Odpowiedz

8

Surowe węzły AST nie zawierają referencji między nimi, np. od zmiennej użyj z powrotem do deklaracji lub z wywołania metody z powrotem do deklaracji metody. Obiekt MethodInvocation może być sprawdzany pod kątem nazwy metody, ale nie można natychmiast nauczyć się, jakiej metody faktycznie wywoływana jest klasa. niezbędna jest analiza zakresu. Ta analiza jest nazywana . Obiekty IBinding są dołączone do węzłów AST i możesz ich użyć do znalezienia np. a Węzeł AST metody dla danej metody Wywołanie węzła AST przy użyciu CompilationUnit.findDeclaringNode(methodInvocationNode.resolveMethodBidning().getKey())

Można również użyć CompilationUnit.findDeclaringNode(method.getKey()), aby znaleźć węzeł AST zawierający deklarację odpowiadającą danemu obiektowi IMethod.

MethodInvocation.resolveBinding().getKey() == 
MethodDeclaration.resolveBinding().getKey() == 
IMethod.getKey() 
+0

Wow, dzięki mantrid! To duży przełom w zrozumieniu tego dla mnie! – Janek

Powiązane problemy