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); }
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); }
@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(); }
@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; }
@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; }