From 8d87a73c8ed9ef56fbed21d0150bc3aeec1cbe6d Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 3 Feb 2012 16:01:16 +0400 Subject: [PATCH] junit: do not highlight abstract test cases as unused when they do have non-abstract inheritors --- .../com/intellij/execution/junit/JUnitUtil.java | 2 +- .../junit2/inspection/JUnitEntryPoint.java | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java index a285b5ba4fc4..6a537423dbb5 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java +++ b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java @@ -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(); diff --git a/plugins/junit/src/com/intellij/execution/junit2/inspection/JUnitEntryPoint.java b/plugins/junit/src/com/intellij/execution/junit2/inspection/JUnitEntryPoint.java index 05da4519e1fc..49c7d33d8b04 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/inspection/JUnitEntryPoint.java +++ b/plugins/junit/src/com/intellij/execution/junit2/inspection/JUnitEntryPoint.java @@ -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 findProcessor = new CommonProcessors.FindProcessor() { + @Override + protected boolean accept(PsiClass psiClass) { + return !psiClass.hasModifierProperty(PsiModifier.ABSTRACT); + } + }; + return !ClassInheritorsSearch.search(aClass).forEach(findProcessor) && findProcessor.isFound(); + } return true; } }