2015-03-05 4 views
1

У меня есть VariableDeclarationStatement, на котором я держась, посетив АСТ. Хотелось бы найти все ссылки на эту локальную переменную в области декларации. Это включает вложенные блоки в текущей области.Как найти ссылки локальных переменных в JDT?

Один из способов сделать это - посетить все узлы под ними и собрать инструкции, которые имеют этот SimpleName. Но это слишком громоздко. Есть ли API в JDT, чтобы «найти» и вернуть список таких операторов.

ответ

2

Вы можете использовать API JDT SearchEngine для получения ссылок на конкретный узел АСТ.

 IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] { yourProject }); 
     //IJavaSearchScope scope = SearchEngine.createWorkspaceScope(); // Use this if you dont have the IProject in hand 
     SearchPattern searchPattern = SearchPattern.createPattern(field, 
       IJavaSearchConstants.REFERENCES); 
     SearchRequestor requestor = new SearchRequestor() { 
      @Override 
      public void acceptSearchMatch(SearchMatch match) { 
       System.out.println(match.getElement()); 
      } 
     }; 
     SearchEngine searchEngine = new SearchEngine(); 
     searchEngine.search(searchParttern, 
       new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }, scope, 
       requestor, new NullProgressMonitor()); 

Я не проверял, но вы можете попытаться предоставить область действия как элемент IType java.

IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {iType}); 

Для получения более подробной информации используйте приведенную ниже ссылку и перейдите к разделу «Использование поисковой системы Java».

http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_int_core.htm


Edit: Если зависимости будут разрешены, вы можете использовать следующий код, чтобы получить Java элемент из VariableDeclarationNode:

IVariableBinding binding = variableDeclarationNode.resolveBinding() 
IJavaElement variableElement = binding.getJavaElement(); 
+0

Я не; т иметь IJavaElement и I Я запускаю это из затмения. – bhantol

+0

ответ обновляется с тем, как получить элемент java. –

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