diff --git a/plugins/gradle/java/src/execution/test/runner/PatternGradleConfigurationProducer.java b/plugins/gradle/java/src/execution/test/runner/PatternGradleConfigurationProducer.java index 3d8b58b663ad..509c2a7005de 100644 --- a/plugins/gradle/java/src/execution/test/runner/PatternGradleConfigurationProducer.java +++ b/plugins/gradle/java/src/execution/test/runner/PatternGradleConfigurationProducer.java @@ -24,6 +24,7 @@ import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.service.execution.GradleExternalTaskConfigurationType; +import org.jetbrains.plugins.gradle.util.GradleBundle; import org.jetbrains.plugins.gradle.util.GradleConstants; import java.util.*; @@ -55,6 +56,7 @@ public final class PatternGradleConfigurationProducer extends GradleTestRunConfi assert contextLocation != null; Project project = context.getProject(); List tests = getTestPatterns(context); + if (tests.isEmpty()) return false; TestMappings testMappings = getTestMappings(project, tests); Function1 findTestSource = test -> getSourceFile(testMappings.getClasses().get(test)); Function1 createFilter = (test) -> @@ -62,7 +64,7 @@ public final class PatternGradleConfigurationProducer extends GradleTestRunConfi Module module = getModuleFromContext(context); if (module == null) return false; if (!applyTestConfiguration(settings, module, tests, findTestSource, createFilter)) return false; - configuration.setName(tests.size() > 1 ? String.format("%s and %d more", tests.get(0), tests.size() - 1) : tests.get(0)); + configuration.setName(suggestConfigurationName(tests)); JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, contextLocation); return true; } @@ -89,6 +91,11 @@ public final class PatternGradleConfigurationProducer extends GradleTestRunConfi ExternalSystemRunConfiguration configuration = (ExternalSystemRunConfiguration)fromContext.getConfiguration(); Project project = context.getProject(); List tests = getTestPatterns(context); + if (tests.isEmpty()) { + LOG.warn("Cannot find runnable tests from context, uses raw run configuration"); + performRunnable.run(); + return; + } TestMappings testMappings = getTestMappings(project, tests); getTestTasksChooser().chooseTestTasks(project, context.getDataContext(), testMappings.getClasses().values(), tasks -> { ExternalSystemTaskExecutionSettings settings = configuration.getSettings(); @@ -100,11 +107,18 @@ public final class PatternGradleConfigurationProducer extends GradleTestRunConfi performRunnable.run(); return; } - configuration.setName(tests.size() > 1 ? String.format("%s and %d more", tests.get(0), tests.size() - 1) : tests.get(0)); + configuration.setName(suggestConfigurationName(tests)); performRunnable.run(); }); } + @NotNull + private static String suggestConfigurationName(List tests) { + if (tests.isEmpty()) return ""; + if (tests.size() == 1) return tests.get(0); + return GradleBundle.message("gradle.tests.pattern.producer.configuration.name", tests.get(0), tests.size() - 1); + } + @Nullable private static Module getModuleFromContext(ConfigurationContext context) { Module module = context.getModule(); diff --git a/plugins/gradle/resources/i18n/GradleBundle.properties b/plugins/gradle/resources/i18n/GradleBundle.properties index 455f8d5df7c7..16a3a6b50c46 100644 --- a/plugins/gradle/resources/i18n/GradleBundle.properties +++ b/plugins/gradle/resources/i18n/GradleBundle.properties @@ -70,4 +70,5 @@ gradle.settings.title.debug=Gradle Debug gradle.tests.tasks.choosing.popup.title.common=Run Tasks gradle.tests.tasks.choosing.popup.title=Run Tasks for {0} gradle.tests.tasks.choosing.popup.hint=Select several tasks to run them at once -gradle.tests.tasks.choosing.warning.text=No tasks available \ No newline at end of file +gradle.tests.tasks.choosing.warning.text=No tasks available +gradle.tests.pattern.producer.configuration.name={0} and {1} more \ No newline at end of file