allow junit configurations in libraries

EA-117378 - assert: AbstractInClassConfigurationProducer.setupConfigurationFromContext
This commit is contained in:
Anna Kozlova
2018-09-28 18:52:03 +02:00
parent c6e1c1ea7e
commit 61368f4c56
3 changed files with 21 additions and 26 deletions
@@ -215,7 +215,7 @@ public class JUnitUtil {
public static boolean isJUnit4TestClass(final PsiClass psiClass, boolean checkAbstract) {
final PsiModifierList modifierList = psiClass.getModifierList();
if (modifierList == null || JavaExecutionUtil.findModule(psiClass) == null) return false;
if (modifierList == null) return false;
if (psiClass.getQualifiedName() == null) return false; //skip local and anonymous classes
PsiClass topLevelClass = getTopmostClass(psiClass);
@@ -257,7 +257,7 @@ public class JUnitUtil {
public static boolean isJUnit5TestClass(@NotNull final PsiClass psiClass, boolean checkAbstract) {
final PsiModifierList modifierList = psiClass.getModifierList();
if (modifierList == null || JavaExecutionUtil.findModule(psiClass) == null) return false;
if (modifierList == null) return false;
if (psiClass.isAnnotationType()) return false;
@@ -271,31 +271,26 @@ public class JUnitUtil {
if (!PsiClassUtil.isRunnableClass(psiClass, false, checkAbstract)) return false;
Module module = ModuleUtilCore.findModuleForPsiElement(psiClass);
if (module != null) {
return CachedValuesManager.getCachedValue(psiClass, () -> {
boolean hasAnnotation = false;
for (final PsiMethod method : psiClass.getAllMethods()) {
ProgressManager.checkCanceled();
if (MetaAnnotationUtil.isMetaAnnotated(method, TEST5_ANNOTATIONS)) {
return CachedValuesManager.getCachedValue(psiClass, () -> {
boolean hasAnnotation = false;
for (final PsiMethod method : psiClass.getAllMethods()) {
ProgressManager.checkCanceled();
if (MetaAnnotationUtil.isMetaAnnotated(method, TEST5_ANNOTATIONS)) {
hasAnnotation = true;
break;
}
}
if (!hasAnnotation) {
for (PsiClass aClass : psiClass.getAllInnerClasses()) {
if (MetaAnnotationUtil.isMetaAnnotated(aClass, Collections.singleton(JUNIT5_NESTED))) {
hasAnnotation = true;
break;
}
}
if (!hasAnnotation) {
for (PsiClass aClass : psiClass.getAllInnerClasses()) {
if (MetaAnnotationUtil.isMetaAnnotated(aClass, Collections.singleton(JUNIT5_NESTED))) {
hasAnnotation = true;
break;
}
}
}
return CachedValueProvider.Result.create(hasAnnotation, PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT);
});
}
return false;
}
return CachedValueProvider.Result.create(hasAnnotation, PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT);
});
}
public static boolean isJUnit5(@NotNull PsiElement element) {
@@ -137,7 +137,7 @@ public abstract class AbstractInClassConfigurationProducer<T extends JavaTestCon
configuration.restoreOriginalModule(originalModule);
Module module = configuration.getConfigurationModule().getModule();
if (module == null) {
if (module == null && psiClass.getManager().isInProject(psiClass)) {
PsiFile containingFile = psiClass.getContainingFile();
LOG.error("No module found", new Attachment("context.txt",
"generated name:" + configuration.getName() +
@@ -145,7 +145,7 @@ public abstract class AbstractInClassConfigurationProducer<T extends JavaTestCon
"; physical: " + psiClass.isPhysical() +
"; className: " + psiClass.getQualifiedName() +
"; file: " + containingFile +
"; module: " + ModuleUtilCore.findModuleForPsiElement(psiClass) +
"; module: " + ModuleUtilCore.findModuleForPsiElement(psiClass.getContainingFile()) +
"; original module: " + originalModule));
return false;
}
@@ -102,7 +102,7 @@ public class JavaExecutionUtil {
}
public static Module findModule(@NotNull final PsiClass psiClass) {
return ModuleUtilCore.findModuleForPsiElement(psiClass);
return ModuleUtilCore.findModuleForPsiElement(psiClass.getContainingFile());
}
@Nullable