junit: do not highlight abstract test cases as unused when they do have non-abstract inheritors

This commit is contained in:
Anna Kozlova
2012-02-03 16:40:28 +04:00
parent ee8cf62ef2
commit 8d87a73c8e
2 changed files with 15 additions and 2 deletions
@@ -104,7 +104,7 @@ public class JUnitUtil {
return isTestClass(psiClass, true, true);
}
private static boolean isTestClass(@NotNull PsiClass psiClass, boolean checkAbstract, boolean checkForTestCaseInheritance) {
public static boolean isTestClass(@NotNull PsiClass psiClass, boolean checkAbstract, boolean checkForTestCaseInheritance) {
if (!PsiClassUtil.isRunnableClass(psiClass, true, checkAbstract)) return false;
if (checkForTestCaseInheritance && isTestCaseInheritor(psiClass)) return true;
final PsiModifierList modifierList = psiClass.getModifierList();
@@ -30,6 +30,10 @@ import com.intellij.openapi.util.WriteExternalException;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.search.searches.ClassInheritorsSearch;
import com.intellij.psi.util.PsiClassUtil;
import com.intellij.util.CommonProcessors;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
@@ -50,7 +54,16 @@ public class JUnitEntryPoint extends EntryPoint {
if (ADD_JUNIT_TO_ENTRIES) {
if (psiElement instanceof PsiClass) {
final PsiClass aClass = (PsiClass)psiElement;
if (JUnitUtil.isTestClass(aClass)) {
if (JUnitUtil.isTestClass(aClass, false, true)) {
if (!PsiClassUtil.isRunnableClass(aClass, true, true)) {
final CommonProcessors.FindProcessor<PsiClass> findProcessor = new CommonProcessors.FindProcessor<PsiClass>() {
@Override
protected boolean accept(PsiClass psiClass) {
return !psiClass.hasModifierProperty(PsiModifier.ABSTRACT);
}
};
return !ClassInheritorsSearch.search(aClass).forEach(findProcessor) && findProcessor.isFound();
}
return true;
}
}