diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/InternalTestDiscoveryListener.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/InternalTestDiscoveryListener.java index 5c89e1bd9031..3b94aaaf0c98 100644 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/InternalTestDiscoveryListener.java +++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/InternalTestDiscoveryListener.java @@ -35,14 +35,16 @@ import java.util.List; */ @SuppressWarnings("unused") public class InternalTestDiscoveryListener implements TestListener, Closeable { + private final String myModuleName; + private final String myTracesDirectory; private List myCompletedMethodNames = new ArrayList(); - private String myTracesDirectory; private final Alarm myProcessTracesAlarm; private TestDiscoveryIndex myDiscoveryIndex; public InternalTestDiscoveryListener() { myProcessTracesAlarm = new Alarm(Alarm.ThreadToUse.POOLED_THREAD, null); myTracesDirectory = System.getProperty("org.jetbrains.instrumentation.trace.dir"); + myModuleName = System.getProperty("org.jetbrains.instrumentation.main.module"); } private TestDiscoveryIndex getIndex() { @@ -89,9 +91,7 @@ public class InternalTestDiscoveryListener implements TestListener, Closeable { protected void flushCurrentTraces() { final String[] fullTestNames = ArrayUtil.toStringArray(myCompletedMethodNames); myCompletedMethodNames.clear(); - myProcessTracesAlarm.addRequest(() -> { - TestDiscoveryExtension.processAvailableTraces(fullTestNames, myTracesDirectory, null, getIndex()); - }, 100); + myProcessTracesAlarm.addRequest(() -> TestDiscoveryExtension.processAvailableTraces(fullTestNames, myTracesDirectory, myModuleName, "j", getIndex()), 100); } private static String getMethodName(Test test) { diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurationProducer.java index 2503982c89c7..027cb27de0e4 100644 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurationProducer.java +++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurationProducer.java @@ -35,13 +35,12 @@ import com.intellij.psi.PsiMethod; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.testIntegration.TestFramework; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.ContainerUtilRt; import com.intellij.util.containers.HashSet; import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.stream.Stream; public abstract class TestDiscoveryConfigurationProducer extends JavaRunConfigurationProducerBase { protected TestDiscoveryConfigurationProducer(ConfigurationType type) { @@ -90,11 +89,18 @@ public abstract class TestDiscoveryConfigurationProducer extends JavaRunConfigur configuration.getFrameworkPrefix()); if (modules.isEmpty()) return true; + final List survivedModules = new ArrayList<>(); final ModuleManager moduleManager = ModuleManager.getInstance(project); + for (String moduleName : modules) { + final Module moduleByName = moduleManager.findModuleByName(moduleName); + if (moduleByName != null) { + survivedModules.add(moduleByName); + } + } + if (survivedModules.isEmpty()) return true; + final Set allModules = new HashSet<>(Arrays.asList(moduleManager.getModules())); - modules.stream() - .map(moduleManager::findModuleByName) - .filter(module -> module != null) + survivedModules .forEach(module -> { final List dependentModules = ModuleUtilCore.getAllDependentModules(module); dependentModules.add(module); diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryExtension.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryExtension.java index 377583935031..5296da303956 100644 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryExtension.java +++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryExtension.java @@ -74,6 +74,9 @@ public class TestDiscoveryExtension extends RunConfigurationExtension { @NotNull final ProcessHandler handler, @Nullable RunnerSettings runnerSettings) { if (runnerSettings == null && isApplicableFor(configuration)) { + final String frameworkPrefix = ((JavaTestConfigurationBase)configuration).getFrameworkPrefix(); + final String moduleName = ((JavaTestConfigurationBase)configuration).getConfigurationModule().getModuleName(); + final Alarm processTracesAlarm = new Alarm(Alarm.ThreadToUse.POOLED_THREAD, null); final MessageBusConnection connection = configuration.getProject().getMessageBus().connect(); connection.subscribe(SMTRunnerEventsListener.TEST_STATUS, new SMTRunnerEventsAdapter() { @@ -84,12 +87,12 @@ public class TestDiscoveryExtension extends RunConfigurationExtension { if ((root == null || root.getHandler() == handler)) { final String fullTestName = test.getLocationUrl(); if (fullTestName != null && fullTestName.startsWith(JavaTestLocator.TEST_PROTOCOL)) { - myCompletedMethodNames.add(((JavaTestConfigurationBase)configuration).getFrameworkPrefix() + fullTestName.substring(JavaTestLocator.TEST_PROTOCOL.length() + 3)); + myCompletedMethodNames.add(frameworkPrefix + fullTestName.substring(JavaTestLocator.TEST_PROTOCOL.length() + 3)); if (myCompletedMethodNames.size() > 50) { final String[] fullTestNames = ArrayUtil.toStringArray(myCompletedMethodNames); myCompletedMethodNames.clear(); processTracesAlarm.addRequest(() -> processAvailableTraces(fullTestNames, - getTracesDirectory(configuration), configuration, + getTracesDirectory(configuration), moduleName, frameworkPrefix, TestDiscoveryIndex.getInstance(configuration.getProject()) ), 100); } @@ -162,7 +165,8 @@ public class TestDiscoveryExtension extends RunConfigurationExtension { if (testMethodTraces != null) { for (File testMethodTrace : testMethodTraces) { try { - coverageIndex.updateFromTestTrace(testMethodTrace, (JavaTestConfigurationBase)configuration); + coverageIndex.updateFromTestTrace(testMethodTrace, ((JavaTestConfigurationBase)configuration).getConfigurationModule().getModuleName(), + ((JavaTestConfigurationBase)configuration).getFrameworkPrefix()); FileUtil.delete(testMethodTrace); } catch (IOException e) { @@ -180,7 +184,8 @@ public class TestDiscoveryExtension extends RunConfigurationExtension { public static void processAvailableTraces(final String[] fullTestNames, final String tracesDirectory, - RunConfigurationBase configuration, + final String moduleName, + final String frameworkPrefix, final TestDiscoveryIndex discoveryIndex) { synchronized (ourTracesLock) { for (String fullTestName : fullTestNames) { @@ -190,7 +195,7 @@ public class TestDiscoveryExtension extends RunConfigurationExtension { final File testMethodTrace = new File(tracesDirectory, className + "-" + methodName + ".tr"); if (testMethodTrace.exists()) { try { - discoveryIndex.updateFromTestTrace(testMethodTrace, (JavaTestConfigurationBase)configuration); + discoveryIndex.updateFromTestTrace(testMethodTrace, moduleName, frameworkPrefix); FileUtil.delete(testMethodTrace); } catch (IOException e) { diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryIndex.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryIndex.java index 47da00fb4377..064ca20dd519 100644 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryIndex.java +++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryIndex.java @@ -296,11 +296,12 @@ public class TestDiscoveryIndex implements ProjectComponent { public void projectClosed() { } - public void updateFromTestTrace(@NotNull File file, @Nullable JavaTestConfigurationBase configurationBase) throws IOException { + public void updateFromTestTrace(@NotNull File file, + @Nullable final String moduleName, + @NotNull final String frameworkPrefix) throws IOException { int fileNameDotIndex = file.getName().lastIndexOf('.'); final String testName = fileNameDotIndex != -1 ? file.getName().substring(0, fileNameDotIndex) : file.getName(); - final Module module = configurationBase != null ? configurationBase.getConfigurationModule().getModule() : null; - doUpdateFromTestTrace(file, testName, module != null ? configurationBase.getFrameworkPrefix() + module.getName() : null); + doUpdateFromTestTrace(file, testName, moduleName != null ? frameworkPrefix + moduleName : null); } private void doUpdateFromTestTrace(File file, final String testName, @Nullable final String moduleName) throws IOException {