diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/settings/BeforeRunTaskImporter.java b/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/settings/BeforeRunTaskImporter.java index c8c35744a326..064ac9bfc74b 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/settings/BeforeRunTaskImporter.java +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/settings/BeforeRunTaskImporter.java @@ -14,6 +14,17 @@ import java.util.Map; public interface BeforeRunTaskImporter { ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.externalSystem.beforeRunTaskImporter"); + /** + * Given a map of configuration settings, + * optionally create relevant BeforeRunTask if it is missing from beforeRunTasks list + * + * @param project + * @param modelsProvider + * @param runConfiguration + * @param beforeRunTasks + * @param cfg + * @return + */ List process(@NotNull Project project, @NotNull IdeModifiableModelsProvider modelsProvider, @NotNull RunConfiguration runConfiguration, diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExternalSettingsImporter.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExternalSettingsImporter.kt index 85b6af60c3c4..a215c0cc44c6 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExternalSettingsImporter.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExternalSettingsImporter.kt @@ -5,6 +5,7 @@ import com.intellij.execution.BeforeRunTask import com.intellij.execution.BeforeRunTaskProvider import com.intellij.execution.configurations.RunConfiguration import com.intellij.openapi.externalSystem.model.project.settings.ConfigurationData +import com.intellij.openapi.externalSystem.service.execution.ExternalSystemBeforeRunTask import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManagerImpl import com.intellij.openapi.externalSystem.service.project.manage.ExternalSystemTaskActivator @@ -30,7 +31,16 @@ class GradleBeforeRunTaskImporter: BeforeRunTaskImporter { consumeIfCast(cfg["projectPath"], String::class.java) { externalProjectPath = it } } task.isEnabled = true - beforeRunTasks.add(task) + + val taskExists = beforeRunTasks.filterIsInstance() + .any { + it.taskExecutionSettings.taskNames == task.taskExecutionSettings.taskNames && + it.taskExecutionSettings.externalProjectPath == task.taskExecutionSettings.externalProjectPath + } + + if (!taskExists) { + beforeRunTasks.add(task) + } return beforeRunTasks }