From 1f8dab44eb6d6d0f09aa1d2a7b1957d8f63c43c8 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Tue, 7 Mar 2017 12:18:31 +0300 Subject: [PATCH] IDEA-168172 Run configuration from different external system implementation wrongly intersect --- ...xternalSystemRunConfigurationProducer.java | 56 ++++++++++++------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/AbstractExternalSystemRunConfigurationProducer.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/AbstractExternalSystemRunConfigurationProducer.java index 3dd8fbcb03ed..830893c5bc02 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/AbstractExternalSystemRunConfigurationProducer.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/AbstractExternalSystemRunConfigurationProducer.java @@ -20,11 +20,12 @@ import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.ConfigurationFromContext; import com.intellij.execution.actions.RunConfigurationProducer; import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings; -import com.intellij.openapi.externalSystem.model.execution.ExternalTaskExecutionInfo; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Vladislav.Soroka @@ -37,7 +38,7 @@ public abstract class AbstractExternalSystemRunConfigurationProducer extends Run } @Override - public boolean shouldReplace(ConfigurationFromContext self, ConfigurationFromContext other) { + public boolean shouldReplace(@NotNull ConfigurationFromContext self, @NotNull ConfigurationFromContext other) { return true; } @@ -45,34 +46,33 @@ public abstract class AbstractExternalSystemRunConfigurationProducer extends Run protected boolean setupConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context, Ref sourceElement) { - Location location = context.getLocation(); - if (!(location instanceof ExternalSystemTaskLocation)) { + Project project = getProjectFromContext(context); + if (project == null) return false; + + ExternalSystemTaskExecutionSettings contextTaskExecutionSettings = getTaskSettingsFromContext(context); + if (contextTaskExecutionSettings == null) return false; + + ExternalSystemTaskExecutionSettings taskExecutionSettings = configuration.getSettings(); + if (!contextTaskExecutionSettings.getExternalSystemId().equals(taskExecutionSettings.getExternalSystemId())) { return false; } - ExternalSystemTaskLocation taskLocation = (ExternalSystemTaskLocation)location; - ExternalSystemTaskExecutionSettings taskExecutionSettings = configuration.getSettings(); - ExternalTaskExecutionInfo task = taskLocation.getTaskInfo(); - taskExecutionSettings.setExternalProjectPath(task.getSettings().getExternalProjectPath()); - taskExecutionSettings.setTaskNames(task.getSettings().getTaskNames()); - configuration.setName(AbstractExternalSystemTaskConfigurationType.generateName(location.getProject(), taskExecutionSettings)); + taskExecutionSettings.setExternalProjectPath(contextTaskExecutionSettings.getExternalProjectPath()); + taskExecutionSettings.setTaskNames(contextTaskExecutionSettings.getTaskNames()); + configuration.setName(AbstractExternalSystemTaskConfigurationType.generateName(project, taskExecutionSettings)); return true; } @Override public boolean isConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context) { - final Location contextLocation = context.getLocation(); - if (contextLocation == null) return false; + Project project = getProjectFromContext(context); + if (project == null) return false; - if (!(contextLocation instanceof ExternalSystemTaskLocation)) { - return false; - } + ExternalSystemTaskExecutionSettings contextTaskExecutionSettings = getTaskSettingsFromContext(context); + if (contextTaskExecutionSettings == null) return false; - ExternalSystemTaskLocation taskLocation = (ExternalSystemTaskLocation)contextLocation; - ExternalSystemTaskExecutionSettings contextTaskExecutionSettings = taskLocation.getTaskInfo().getSettings(); ExternalSystemTaskExecutionSettings taskExecutionSettings = configuration.getSettings(); - - if(!contextTaskExecutionSettings.getExternalSystemId().equals(taskExecutionSettings.getExternalSystemId())) { + if (!contextTaskExecutionSettings.getExternalSystemId().equals(taskExecutionSettings.getExternalSystemId())) { return false; } if (!StringUtil.equals(contextTaskExecutionSettings.getExternalProjectPath(), taskExecutionSettings.getExternalProjectPath())) { @@ -81,4 +81,22 @@ public abstract class AbstractExternalSystemRunConfigurationProducer extends Run if (!contextTaskExecutionSettings.getTaskNames().equals(taskExecutionSettings.getTaskNames())) return false; return true; } + + @Nullable + private static ExternalSystemTaskExecutionSettings getTaskSettingsFromContext(ConfigurationContext context) { + final Location contextLocation = context.getLocation(); + if (!(contextLocation instanceof ExternalSystemTaskLocation)) { + return null; + } + return ((ExternalSystemTaskLocation)contextLocation).getTaskInfo().getSettings(); + } + + @Nullable + private static Project getProjectFromContext(ConfigurationContext context) { + final Location contextLocation = context.getLocation(); + if (!(contextLocation instanceof ExternalSystemTaskLocation)) { + return null; + } + return contextLocation.getProject(); + } } \ No newline at end of file