mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
custom processing of dumb mode during search for tests (IDEA-106927)
This commit is contained in:
@@ -19,6 +19,8 @@ package com.intellij.execution;
|
||||
import com.intellij.execution.junit.JUnitUtil;
|
||||
import com.intellij.execution.junit.TestClassFilter;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
@@ -42,41 +44,48 @@ public class ConfigurationUtil {
|
||||
final PsiManager manager = testClassFilter.getPsiManager();
|
||||
|
||||
final Project project = manager.getProject();
|
||||
GlobalSearchScope projectScopeWithoutLibraries = GlobalSearchScope.projectScope(project);
|
||||
final GlobalSearchScope scope = projectScopeWithoutLibraries.intersectWith(testClassFilter.getScope());
|
||||
ClassInheritorsSearch.search(testClassFilter.getBase(), scope, true).forEach(new PsiElementProcessorAdapter<PsiClass>(new PsiElementProcessor<PsiClass>() {
|
||||
public boolean execute(@NotNull final PsiClass aClass) {
|
||||
if (testClassFilter.isAccepted(aClass)) found.add(aClass);
|
||||
return true;
|
||||
try {
|
||||
GlobalSearchScope projectScopeWithoutLibraries = GlobalSearchScope.projectScope(project);
|
||||
final GlobalSearchScope scope = projectScopeWithoutLibraries.intersectWith(testClassFilter.getScope());
|
||||
ClassInheritorsSearch.search(testClassFilter.getBase(), scope, true).forEach(new PsiElementProcessorAdapter<PsiClass>(new PsiElementProcessor<PsiClass>() {
|
||||
public boolean execute(@NotNull final PsiClass aClass) {
|
||||
if (testClassFilter.isAccepted(aClass)) found.add(aClass);
|
||||
return true;
|
||||
}
|
||||
}));
|
||||
|
||||
// classes having suite() method
|
||||
final PsiMethod[] suiteMethods = ApplicationManager.getApplication().runReadAction(
|
||||
new Computable<PsiMethod[]>() {
|
||||
public PsiMethod[] compute() {
|
||||
return PsiShortNamesCache.getInstance(project).getMethodsByName(JUnitUtil.SUITE_METHOD_NAME, scope);
|
||||
}
|
||||
}
|
||||
);
|
||||
for (final PsiMethod method : suiteMethods) {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
final PsiClass containingClass = method.getContainingClass();
|
||||
if (containingClass == null) return;
|
||||
if (containingClass instanceof PsiAnonymousClass) return;
|
||||
if (containingClass.hasModifierProperty(PsiModifier.ABSTRACT)) return;
|
||||
if (containingClass.getContainingClass() != null && !containingClass.hasModifierProperty(PsiModifier.STATIC)) return;
|
||||
if (JUnitUtil.isSuiteMethod(method) && testClassFilter.isAccepted(containingClass)) {
|
||||
found.add(containingClass);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}));
|
||||
|
||||
// classes having suite() method
|
||||
final PsiMethod[] suiteMethods = ApplicationManager.getApplication().runReadAction(
|
||||
new Computable<PsiMethod[]>() {
|
||||
public PsiMethod[] compute() {
|
||||
return PsiShortNamesCache.getInstance(project).getMethodsByName(JUnitUtil.SUITE_METHOD_NAME, scope);
|
||||
}
|
||||
}
|
||||
);
|
||||
for (final PsiMethod method : suiteMethods) {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
final PsiClass containingClass = method.getContainingClass();
|
||||
if (containingClass == null) return;
|
||||
if (containingClass instanceof PsiAnonymousClass) return;
|
||||
if (containingClass.hasModifierProperty(PsiModifier.ABSTRACT)) return;
|
||||
if (containingClass.getContainingClass() != null && !containingClass.hasModifierProperty(PsiModifier.STATIC)) return;
|
||||
if (JUnitUtil.isSuiteMethod(method) && testClassFilter.isAccepted(containingClass)) {
|
||||
found.add(containingClass);
|
||||
}
|
||||
}
|
||||
});
|
||||
boolean hasJunit4 = addAnnotatedMethodsAnSubclasses(manager, scope, testClassFilter, found, "org.junit.Test", true);
|
||||
hasJunit4 |= addAnnotatedMethodsAnSubclasses(manager, scope, testClassFilter, found, "org.junit.runner.RunWith", false);
|
||||
return hasJunit4;
|
||||
}
|
||||
catch (IndexNotReadyException e) {
|
||||
found.clear();
|
||||
DumbService.getInstance(project).waitForSmartMode();
|
||||
return findAllTestClasses(testClassFilter, found);
|
||||
}
|
||||
|
||||
boolean hasJunit4 = addAnnotatedMethodsAnSubclasses(manager, scope, testClassFilter, found, "org.junit.Test", true);
|
||||
hasJunit4 |= addAnnotatedMethodsAnSubclasses(manager, scope, testClassFilter, found, "org.junit.runner.RunWith", false);
|
||||
return hasJunit4;
|
||||
}
|
||||
|
||||
private static boolean addAnnotatedMethodsAnSubclasses(final PsiManager manager, final GlobalSearchScope scope, final TestClassFilter testClassFilter,
|
||||
|
||||
@@ -367,11 +367,6 @@ public class TestPackage extends TestObject {
|
||||
public void onCancel() {
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DumbModeAction getDumbModeAction() {
|
||||
return DumbModeAction.WAIT;
|
||||
}
|
||||
}
|
||||
private class MySearchForTestsTask extends SearchForTestsTask {
|
||||
private final TestClassFilter myClassFilter;
|
||||
|
||||
+14
-6
@@ -30,6 +30,8 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.project.DumbModeAction;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.IndexNotReadyException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
@@ -90,7 +92,7 @@ public class SearchingForTestsTask extends Task.Backgroundable {
|
||||
try {
|
||||
mySocket = myServerSocket.accept();
|
||||
try {
|
||||
fillTestObjects(myClasses);
|
||||
findAllTests();
|
||||
}
|
||||
catch (CantRunException e) {
|
||||
logCantRunException(e);
|
||||
@@ -104,6 +106,17 @@ public class SearchingForTestsTask extends Task.Backgroundable {
|
||||
}
|
||||
}
|
||||
|
||||
private void findAllTests() throws CantRunException {
|
||||
try {
|
||||
fillTestObjects(myClasses);
|
||||
}
|
||||
catch (IndexNotReadyException e) {
|
||||
myClasses.clear();
|
||||
DumbService.getInstance(myProject).waitForSmartMode();
|
||||
findAllTests();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
writeTempFile();
|
||||
@@ -117,11 +130,6 @@ public class SearchingForTestsTask extends Task.Backgroundable {
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DumbModeAction getDumbModeAction() {
|
||||
return DumbModeAction.WAIT;
|
||||
}
|
||||
|
||||
public void finish() {
|
||||
DataOutputStream os = null;
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user