mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
junit3: suggest to search for inheritors for classes without default constructors
This commit is contained in:
@@ -60,7 +60,12 @@ public class InheritorChooser {
|
||||
final Runnable performRunnable,
|
||||
final PsiMethod psiMethod,
|
||||
final PsiClass containingClass) {
|
||||
return runMethodInAbstractClass(context, performRunnable, psiMethod, containingClass, Conditions.<PsiClass>alwaysTrue());
|
||||
return runMethodInAbstractClass(context, performRunnable, psiMethod, containingClass, new Condition<PsiClass>() {
|
||||
@Override
|
||||
public boolean value(PsiClass psiClass) {
|
||||
return psiClass.hasModifierProperty(PsiModifier.ABSTRACT);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public boolean runMethodInAbstractClass(final ConfigurationContext context,
|
||||
@@ -68,7 +73,7 @@ public class InheritorChooser {
|
||||
final PsiMethod psiMethod,
|
||||
final PsiClass containingClass,
|
||||
final Condition<PsiClass> acceptAbstractCondition) {
|
||||
if (containingClass != null && containingClass.hasModifierProperty(PsiModifier.ABSTRACT) && acceptAbstractCondition.value(containingClass)) {
|
||||
if (containingClass != null && acceptAbstractCondition.value(containingClass)) {
|
||||
final Location location = context.getLocation();
|
||||
if (location instanceof MethodLocation) {
|
||||
final PsiClass aClass = ((MethodLocation)location).getContainingClass();
|
||||
|
||||
@@ -93,7 +93,7 @@ public class JUnitUtil {
|
||||
return testCaseClass != null && psiMethod.getContainingClass().isInheritor(testCaseClass, true);
|
||||
}
|
||||
|
||||
private static boolean isTestCaseInheritor(final PsiClass aClass) {
|
||||
public static boolean isTestCaseInheritor(final PsiClass aClass) {
|
||||
if (!aClass.isValid()) return false;
|
||||
Location<PsiClass> location = PsiLocation.fromPsiElement(aClass);
|
||||
PsiClass testCaseClass = getTestCaseClassOrNull(location);
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.intellij.execution.configurations.RunConfiguration;
|
||||
import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.psi.*;
|
||||
|
||||
public abstract class JUnitConfigurationProducer extends JavaRunConfigurationProducerBase<JUnitConfiguration> implements Cloneable {
|
||||
@@ -88,4 +89,27 @@ public abstract class JUnitConfigurationProducer extends JavaRunConfigurationPro
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected Condition<PsiClass> getConditionToSearchForInheritors() {
|
||||
return new Condition<PsiClass>() {
|
||||
@Override
|
||||
public boolean value(PsiClass psiClass) {
|
||||
if (psiClass.hasModifierProperty(PsiModifier.ABSTRACT)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (JUnitUtil.isTestCaseInheritor(psiClass)) {
|
||||
final PsiMethod[] constructors = psiClass.getConstructors();
|
||||
for (PsiMethod method : constructors) {
|
||||
if (method.getParameterList().getParametersCount() == 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return constructors.length != 0;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ public class TestClassConfigurationProducer extends JUnitConfigurationProducer {
|
||||
super.runForClass(aClass, psiMethod, context, performRunnable);
|
||||
}
|
||||
};
|
||||
if (inheritorChooser.runMethodInAbstractClass(context, performRunnable, null, (PsiClass)fromContext.getSourceElement())) return;
|
||||
if (inheritorChooser.runMethodInAbstractClass(context, performRunnable, null, (PsiClass)fromContext.getSourceElement(), getConditionToSearchForInheritors())) return;
|
||||
super.onFirstRun(fromContext, context, performRunnable);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ public class TestMethodConfigurationProducer extends JUnitConfigurationProducer
|
||||
super.runForClass(aClass, psiMethod, context, performRunnable);
|
||||
}
|
||||
};
|
||||
if (inheritorChooser.runMethodInAbstractClass(context, performRunnable, psiMethod, containingClass)) return;
|
||||
if (inheritorChooser.runMethodInAbstractClass(context, performRunnable, psiMethod, containingClass, getConditionToSearchForInheritors())) return;
|
||||
super.onFirstRun(fromContext, context, performRunnable);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -87,7 +87,7 @@ public class TestNGInClassConfigurationProducer extends TestNGConfigurationProdu
|
||||
if (inheritorChooser.runMethodInAbstractClass(fromContext, performRunnable, psiMethod, containingClass, new Condition<PsiClass>() {
|
||||
@Override
|
||||
public boolean value(PsiClass aClass) {
|
||||
return TestNGUtil.hasTest(aClass);
|
||||
return aClass.hasModifierProperty(PsiModifier.ABSTRACT) && TestNGUtil.hasTest(aClass);
|
||||
}
|
||||
})) return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user