/**
   * This method passes through all the java packages and calls the filter callback passed on each
   * package found.
   *
   * <p>If true is returned on the callback, the children of each package (classes) will also be
   * visited, otherwise, they'll be skipped.
   */
  private void filterJavaPackages(IFilter filter) {
    IClasspathEntry[] rawClasspath;
    try {
      rawClasspath = this.javaProject.getRawClasspath();
      FastStringBuffer buffer = new FastStringBuffer();
      for (IClasspathEntry entry : rawClasspath) {
        int entryKind = entry.getEntryKind();
        IClasspathEntry resolvedClasspathEntry = JavaCore.getResolvedClasspathEntry(entry);
        if (entryKind != IClasspathEntry.CPE_CONTAINER) {
          // ignore if it's in the system classpath...
          IPackageFragmentRoot[] roots =
              javaProject.findPackageFragmentRoots(resolvedClasspathEntry);

          // get the package roots
          for (IPackageFragmentRoot root : roots) {
            IJavaElement[] children = root.getChildren();

            // get the actual packages
            for (IJavaElement child : children) {
              IPackageFragment childPackage = (IPackageFragment) child;
              String elementName = childPackage.getElementName();

              // and if the java package is 'accepted'
              if (filter.accept(elementName, root, childPackage)) {
                buffer.clear();
                buffer.append(elementName);
                int packageNameLen = buffer.length();
                if (packageNameLen > 0) {
                  buffer.append('.');
                  packageNameLen++;
                }

                // traverse its classes
                for (IJavaElement class_ : childPackage.getChildren()) {
                  buffer.append(FullRepIterable.getFirstPart(class_.getElementName()));
                  filter.accept(buffer.toString(), root, class_);
                  buffer.setCount(
                      packageNameLen); // leave only the package part for the next append
                }
              }
            }
          }
        }
      }
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
  @Override
  public boolean accept(T value) {

    for (IFilter<T> filter : innerFilters) {
      if (!filter.accept(value)) return false;
    }

    return true;
  }
  protected void setSelection(IResource[] input, IFilter filter) {
    Map selectionMap = new Hashtable();
    for (int i = 0; i < input.length; i++) {
      IResource resource = input[i];
      if ((resource.getType() & IResource.FILE) > 0) {
        if (filter.accept(resource)) {
          List files = null;
          IContainer parent = resource.getParent();
          if (selectionMap.containsKey(parent)) files = (List) selectionMap.get(parent);
          else files = new ArrayList();

          files.add(resource);
          selectionMap.put(parent, files);
        }
      } else setSelection(selectionMap, (IContainer) resource, filter);
    }
    fResourceGroup.updateSelections(selectionMap);
    updateSelectionCount();
  }
  private void setSelection(Map selectionMap, IContainer parent, IFilter filter) {
    try {

      IResource[] resources = parent.members();
      List selections = new ArrayList();

      for (int i = 0; i < resources.length; i++) {
        IResource resource = resources[i];
        if ((resource.getType() & IResource.FILE) > 0) {
          if (filter.accept(resource)) selections.add(resource);
        } else {
          setSelection(selectionMap, (IContainer) resource, filter);
        }
      }

      if (!selections.isEmpty()) selectionMap.put(parent, selections);

    } catch (CoreException x) {
      // Just return if we can't get any info
      return;
    }
  }
Пример #5
0
 private boolean resourceMatches(final IFilter filter, IResource member) {
   return filter == null || filter.accept(member);
 }