Java 类com.intellij.psi.search.PsiNonJavaFileReferenceProcessor 实例源码

项目:intellij-ce-playground    文件:ExtensionPointLocator.java   
private static void findExtensionPointCandidates(PsiClass psiClass, final List<ExtensionPointCandidate> list) {
  String name = psiClass.getQualifiedName();
  if (name == null) {
    return;
  }

  final Project project = psiClass.getProject();
  final Collection<VirtualFile> candidates = DomService.getInstance().getDomFileCandidates(IdeaPlugin.class, project, GlobalSearchScope.allScope(project));
  GlobalSearchScope scope = GlobalSearchScope.filesScope(project, candidates);
  PsiSearchHelper.SERVICE.getInstance(project).processUsagesInNonJavaFiles(name, new PsiNonJavaFileReferenceProcessor() {
    @Override
    public boolean process(PsiFile file, int startOffset, int endOffset) {
      PsiElement element = file.findElementAt(startOffset);
      processExtensionPointCandidate(element, list);
      return true;
    }
  }, scope);
}
项目:tools-idea    文件:RegisterExtensionFixProvider.java   
private static void findExtensionPointCandidates(PsiClass aClass, final List<ExtensionPointCandidate> list) {
  String name = aClass.getQualifiedName();
  if (name == null) {
    return;
  }
  GlobalSearchScope scope = GlobalSearchScope.getScopeRestrictedByFileTypes(ProjectScope.getAllScope(aClass.getProject()), XmlFileType.INSTANCE);
  PsiSearchHelper.SERVICE.getInstance(aClass.getProject()).processUsagesInNonJavaFiles(name, new PsiNonJavaFileReferenceProcessor() {
    @Override
    public boolean process(PsiFile file, int startOffset, int endOffset) {
      PsiElement element = file.findElementAt(startOffset);
      processExtensionPointCandidate(element, list);
      return true;
    }
  }, scope);
}
项目:intellij-ce-playground    文件:TestNGRelatedFilesProvider.java   
@NotNull
@Override
public List<? extends GotoRelatedItem> getItems(@NotNull PsiElement context) {
  PsiClass psiClass = PsiTreeUtil.getParentOfType(context, PsiClass.class, false);
  if (psiClass != null) {
    final Project project = psiClass.getProject();
    while (psiClass != null && TestNGUtil.hasTest(psiClass) && PsiClassUtil.isRunnableClass(psiClass, true)) {
      final String qName = psiClass.getQualifiedName();
      if (qName != null) {
        final String packageQName = ((PsiJavaFile)psiClass.getContainingFile()).getPackageName();
        final String packageName = StringUtil.getShortName(packageQName);
        final String[] names;
        if (packageQName.length() > 0) {
          final String pName = packageName.length() > 0 ? packageName : packageQName;
          names = new String[]{qName, pName};
        }
        else {
          names = new String[]{qName};
        }
        final List<PsiElement> tags = new ArrayList<PsiElement>();
        for (final String name : names) {
          PsiSearchHelper.SERVICE.getInstance(project)
            .processUsagesInNonJavaFiles(name, new PsiNonJavaFileReferenceProcessor() {
              public boolean process(final PsiFile file, final int startOffset, final int endOffset) {
                final PsiReference referenceAt = file.findReferenceAt(startOffset);
                if (referenceAt != null) {
                  if (packageQName.endsWith(name)) { //special package tag required
                    final XmlTag tag = PsiTreeUtil.getParentOfType(file.findElementAt(startOffset), XmlTag.class);
                    if (tag == null || !tag.getName().equals("package")) {
                      return true;
                    }
                    final XmlAttribute attribute = tag.getAttribute("name");
                    if (attribute == null) return true;
                    final String value = attribute.getValue();
                    if (value == null) return true;
                    if (!(value.equals(StringUtil.getQualifiedName(packageQName, "*")) || value.equals(packageQName))) return true;
                  }
                  tags.add(referenceAt.getElement());
                }
                return true;
              }
            }, new TestNGSearchScope(project));
        }

        if (!tags.isEmpty()) {
          return GotoRelatedItem.createItems(tags, "TestNG");
        }
      }
      psiClass = PsiTreeUtil.getParentOfType(psiClass, PsiClass.class);
    }
  }
  return Collections.emptyList();
}
项目:intellij-ce-playground    文件:UndeclaredTestInspection.java   
@Nullable
public ProblemDescriptor[] checkClass(@NotNull final PsiClass aClass,
                                      @NotNull final InspectionManager manager,
                                      final boolean isOnTheFly) {
  if (TestNGUtil.hasTest(aClass) && PsiClassUtil.isRunnableClass(aClass, true)) {
    final Project project = aClass.getProject();
    final String qName = aClass.getQualifiedName();
    if (qName == null) return null;
    final String packageQName = StringUtil.getPackageName(qName);
    final List<String> names = new ArrayList<String>();
    for(int i = 0; i < qName.length(); i++) {
      if (qName.charAt(i) == '.') {
        names.add(qName.substring(0, i));
      }
    }
    names.add(qName);
    Collections.reverse(names);

    for (final String name : names) {
      final boolean isFullName = qName.equals(name);
      final boolean[] found = new boolean[]{false};
      PsiSearchHelper.SERVICE.getInstance(project)
        .processUsagesInNonJavaFiles(name, new PsiNonJavaFileReferenceProcessor() {
          public boolean process(final PsiFile file, final int startOffset, final int endOffset) {
            if (file.findReferenceAt(startOffset) != null) {
              if (!isFullName) { //special package tag required
                final XmlTag tag = PsiTreeUtil.getParentOfType(file.findElementAt(startOffset), XmlTag.class);
                if (tag == null || !tag.getName().equals("package")) {
                  return true;
                }
                final XmlAttribute attribute = tag.getAttribute("name");
                if (attribute == null) return true;
                final String value = attribute.getValue();
                if (value == null) return true;
                if (!value.endsWith(".*") && !value.equals(packageQName)) return true;
              }
              found[0] = true;
              return false;
            }
            return true;
          }
        }, new TestNGSearchScope(project));
      if (found[0]) return null;
    }
    final PsiIdentifier nameIdentifier = aClass.getNameIdentifier();
    LOG.assertTrue(nameIdentifier != null);
    return new ProblemDescriptor[]{manager.createProblemDescriptor(nameIdentifier, "Undeclared test \'" + aClass.getName() + "\'",
                                                                   isOnTheFly, new LocalQuickFix[]{new RegisterClassFix(aClass),
                                                                     new CreateTestngFix()},
                                                                   ProblemHighlightType.GENERIC_ERROR_OR_WARNING)};
  }
  return null;
}
项目:tools-idea    文件:TestNGRelatedFilesProvider.java   
@NotNull
@Override
public List<? extends GotoRelatedItem> getItems(@NotNull PsiElement context) {
  PsiClass psiClass = PsiTreeUtil.getParentOfType(context, PsiClass.class, false);
  if (psiClass != null) {
    final Project project = psiClass.getProject();
    while (psiClass != null && TestNGUtil.hasTest(psiClass) && PsiClassUtil.isRunnableClass(psiClass, true)) {
      final String qName = psiClass.getQualifiedName();
      if (qName != null) {
        final String packageQName = ((PsiJavaFile)psiClass.getContainingFile()).getPackageName();
        final String packageName = StringUtil.getShortName(packageQName);
        final String[] names;
        if (packageQName.length() > 0) {
          final String pName = packageName.length() > 0 ? packageName : packageQName;
          names = new String[]{qName, pName};
        }
        else {
          names = new String[]{qName};
        }
        final List<PsiElement> tags = new ArrayList<PsiElement>();
        for (final String name : names) {
          PsiSearchHelper.SERVICE.getInstance(project)
            .processUsagesInNonJavaFiles(name, new PsiNonJavaFileReferenceProcessor() {
              public boolean process(final PsiFile file, final int startOffset, final int endOffset) {
                final PsiReference referenceAt = file.findReferenceAt(startOffset);
                if (referenceAt != null) {
                  if (packageQName.endsWith(name)) { //special package tag required
                    final XmlTag tag = PsiTreeUtil.getParentOfType(file.findElementAt(startOffset), XmlTag.class);
                    if (tag == null || !tag.getName().equals("package")) {
                      return true;
                    }
                    final XmlAttribute attribute = tag.getAttribute("name");
                    if (attribute == null) return true;
                    final String value = attribute.getValue();
                    if (value == null) return true;
                    if (!(value.equals(StringUtil.getQualifiedName(packageQName, "*")) || value.equals(packageQName))) return true;
                  }
                  tags.add(referenceAt.getElement());
                }
                return true;
              }
            }, new TestNGSearchScope(project));
        }

        if (!tags.isEmpty()) {
          return GotoRelatedItem.createItems(tags, "TestNG");
        }
      }
      psiClass = PsiTreeUtil.getParentOfType(psiClass, PsiClass.class);
    }
  }
  return Collections.emptyList();
}
项目:tools-idea    文件:UndeclaredTestInspection.java   
@Nullable
public ProblemDescriptor[] checkClass(@NotNull final PsiClass aClass,
                                      @NotNull final InspectionManager manager,
                                      final boolean isOnTheFly) {
  if (TestNGUtil.hasTest(aClass) && PsiClassUtil.isRunnableClass(aClass, true)) {
    final Project project = aClass.getProject();
    final String qName = aClass.getQualifiedName();
    if (qName == null) return null;

    final List<String> names = new ArrayList<String>();
    for(int i = 0; i < qName.length(); i++) {
      if (qName.charAt(i) == '.') {
        names.add(qName.substring(0, i));
      }
    }
    names.add(qName);
    Collections.reverse(names);

    for (final String name : names) {
      final boolean isFullName = qName.equals(name);
      final boolean[] found = new boolean[]{false};
      PsiSearchHelper.SERVICE.getInstance(project)
        .processUsagesInNonJavaFiles(name, new PsiNonJavaFileReferenceProcessor() {
          public boolean process(final PsiFile file, final int startOffset, final int endOffset) {
            if (file.findReferenceAt(startOffset) != null) {
              if (!isFullName) { //special package tag required
                final XmlTag tag = PsiTreeUtil.getParentOfType(file.findElementAt(startOffset), XmlTag.class);
                if (tag == null || !tag.getName().equals("package")) {
                  return true;
                }
                final XmlAttribute attribute = tag.getAttribute("name");
                if (attribute == null) return true;
                final String value = attribute.getValue();
                if (value == null) return true;
                if (!value.endsWith(".*")) return true;
              }
              found[0] = true;
              return false;
            }
            return true;
          }
        }, new TestNGSearchScope(project));
      if (found[0]) return null;
    }
    final PsiIdentifier nameIdentifier = aClass.getNameIdentifier();
    LOG.assertTrue(nameIdentifier != null);
    return new ProblemDescriptor[]{manager.createProblemDescriptor(nameIdentifier, "Undeclared test \'" + aClass.getName() + "\'",
                                                                   isOnTheFly, new LocalQuickFix[]{new RegisterClassFix(aClass),
                                                                     new CreateTestngFix()},
                                                                   ProblemHighlightType.GENERIC_ERROR_OR_WARNING)};
  }
  return null;
}