2013-01-29 4 views
5

Мое текущее понимание, что JDT предоставляет нам два различных интерфейса и класса hierachies для представления и управления Java-код:Какова роль I * Binding в Eclipse JDT?

  • Java Модель: обеспечивает способ представления проекта Java. Быстро создать, но не содержит столько информации, как класс АСТ иерархию, например, нет информации о точном положении каждого элемента в исходном файле (в AST, что это доступно)

  • АСТ: более подробное представление исходного кода плюс предоставляет средства для его управления.

Верно ли это?

Теперь существует иерархия интерфейсов с названием I * Binding (начиная с IBinding), например IMethodBinding. Так, например, у нас есть 3 различных типов для работы с методами:

От doc IMethodBinding кажется очень похоже на MethodInvocation из AST, но я не вижу четкого различия и когда должен использовать их. Может кто-то прояснить это?

+1

Не могли бы вы рассказать, как получить MethodInvocation из IMethod, пожалуйста? – berezovskyi

ответ

8

Узлы Raw AST не содержат ссылок между ними, например. от использования переменной до ее объявления, или от вызова метода обратно к объявлению метода. Объект MethodInvocation может быть проверен для имени метода, но вы не можете сразу узнать, какой метод вызывает класс. для этого требуется анализ области охвата.

Этот анализ называется обязательным разрешением. Объекты IBinding прикреплены к узлам AST, и вы можете использовать их для поиска, например. узел ASTD ASTM для данного узла MethodInvocation AST с использованием

Также вы можете использовать CompilationUnit.findDeclaringNode(method.getKey()), чтобы найти, какой узел AST содержит объявление, соответствующее данному объекту IMethod.

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

Вау, спасибо мантрид! Это серьезный прорыв в понимании этого для меня! – Janek

Смежные вопросы