IDEA-168172 Run configuration from different external system implementation wrongly intersect

This commit is contained in:
Vladislav.Soroka
2017-03-07 12:19:45 +03:00
parent b5ac353b14
commit 1f8dab44eb
@@ -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<PsiElement> 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();
}
}