use of com.theoryinpractice.testng.inspection.TestNGSearchScope in project intellij-community by JetBrains.
the class TestNGRelatedFilesProvider method getItems.
@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<>();
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();
}
Aggregations