mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-168172 Run configuration from different external system implementation wrongly intersect
This commit is contained in:
+37
-19
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user