我正在开发一个搜索插件,其中使用IPackageFragment指定要在其中进行搜索的软件包。我无法使用IPackageFragment创建IJavaSearchScope。请通过提供适当的例子的解释帮助我。

谢谢

最佳答案

您在以下article Find unused methods中有一个很好的例子:

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元素找到的元素一起使用。

    私人静态int performIMethodSearch(IMethod方法)抛出CoreException {
      SearchPattern模式= SearchPattern.createPattern(方法,IJavaSearchConstants.REFERENCES);
      IJavaSearchScope范围= SearchEngine.createWorkspaceScope();
      MySearchRequestor requestor = new MySearchRequestor();
      SearchEngine searchEngine = new SearchEngine();
      searchEngine.search(模式,
                           新的SearchParticipant [] {SearchEngine.getDefaultSearchParticipant()},
                           作用域,请求者,为null);
      返回requestor.getNumberOfCalls();
    }

10-06 08:58