mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cache part of JUnitUtil.isTestClass to avoid O(methods^2) during highlighting
This commit is contained in:
@@ -27,12 +27,9 @@ import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.searches.ClassInheritorsSearch;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiClassUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.testIntegration.JavaTestFramework;
|
||||
import com.intellij.testIntegration.TestFramework;
|
||||
import com.intellij.util.Processor;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -144,22 +141,24 @@ public class JUnitUtil {
|
||||
}
|
||||
}
|
||||
}
|
||||
final PsiModifierList modifierList = psiClass.getModifierList();
|
||||
if (modifierList == null) return false;
|
||||
final boolean hasJUnit5 = isJUnit5(modifierList);
|
||||
boolean hasJUnit5 = isJUnit5(psiClass);
|
||||
if (!PsiClassUtil.isRunnableClass(psiClass, !hasJUnit5, checkAbstract)) return false;
|
||||
|
||||
if (AnnotationUtil.isAnnotated(psiClass, RUN_WITH, true)) return true;
|
||||
|
||||
if (checkForTestCaseInheritance && (!hasJUnit5 || psiClass.hasModifierProperty(PsiModifier.PUBLIC)) && isTestCaseInheritor(psiClass)) return true;
|
||||
|
||||
return CachedValuesManager.getCachedValue(psiClass, () ->
|
||||
CachedValueProvider.Result.create(hasTestOrSuiteMethods(psiClass), PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT));
|
||||
}
|
||||
|
||||
private static boolean hasTestOrSuiteMethods(@NotNull PsiClass psiClass) {
|
||||
for (final PsiMethod method : psiClass.getAllMethods()) {
|
||||
ProgressManager.checkCanceled();
|
||||
if (isSuiteMethod(method)) return true;
|
||||
if (isTestAnnotated(method)) return true;
|
||||
}
|
||||
|
||||
if (hasJUnit5) {
|
||||
|
||||
if (isJUnit5(psiClass)) {
|
||||
for (PsiClass innerClass : psiClass.getInnerClasses()) {
|
||||
for (PsiMethod method : innerClass.getAllMethods()) {
|
||||
if (isTestAnnotated(method)) return true;
|
||||
|
||||
Reference in New Issue
Block a user