Как использовать IJavaElement - PullRequest
1 голос
/ 29 января 2010

Я разрабатываю поисковый плагин, где я использую IPackageFragment, чтобы указать пакет, в котором будет выполняться поиск. Я не могу использовать IPackageFragment для создания IJavaSearchScope. Пожалуйста, помогите мне, предоставив объяснение с подходящим примером.

Спасибо

1 Ответ

2 голосов
/ 29 января 2010

У вас есть прекрасный пример в этой статье Поиск неиспользуемых методов :

IPackageFragment используется для получения любого необходимого элемента Java (например, методов)

public static List<MethodInformation>  calculate(IJavaProject project) {
  List<MethodInformation> list = new ArrayList<MethodInformation>();
  try {
    if (project.isOpen()) {
      IPackageFragment[] packages = project.getPackageFragments();
      // parse(JavaCore.create(project));
      for (IPackageFragment mypackage : packages) {
        if (mypackage.getKind() == IPackageFragmentRoot.K_SOURCE) {
          for (ICompilationUnit unit : mypackage.getCompilationUnits()) {
             IType[] types = unit.getTypes();
             for (int i = 0; i < types.length; i++) {
               IType type = types[i];
               IMethod[] methods = type.getMethods();

И IJavaSearchScope создается из SearchEngine и используется с элементами, найденными через элементы IPackageFragment.

    private static int  performIMethodSearch(IMethod method) throws CoreException {
      SearchPattern pattern = SearchPattern.createPattern(method, IJavaSearchConstants.REFERENCES);
      IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
      MySearchRequestor requestor = new MySearchRequestor();
      SearchEngine searchEngine = new SearchEngine();
      searchEngine.search( pattern, 
                           new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() }, 
                           scope, requestor, null);
      return requestor.getNumberOfCalls();
    }
...