extract ExternalSystemTaskExecutionSettings.setFrom

This commit is contained in:
Vladimir Krivosheev
2018-08-21 20:30:38 +02:00
parent 83d6d09304
commit 49a5301fe8
6 changed files with 45 additions and 73 deletions
@@ -6,22 +6,20 @@ import com.intellij.openapi.externalSystem.model.ProjectSystemId;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.ContainerUtilRt;
import com.intellij.util.xmlb.annotations.Tag;
import gnu.trove.THashMap;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* Keeps external system task execution parameters. Basically, this is a model class which holds data represented when
* a user opens run configuration editor for corresponding external system.
*
* @author Denis Zhdanov
* @since 24.05.13 12:20
*/
@Tag("ExternalSystemSettings")
public class ExternalSystemTaskExecutionSettings implements Cloneable {
@@ -29,21 +27,28 @@ public class ExternalSystemTaskExecutionSettings implements Cloneable {
@NotNull @NonNls public static final String TAG_NAME = "ExternalSystemSettings";
@NotNull @NonNls public static final Key<ParametersList> JVM_AGENT_SETUP_KEY = Key.create("jvmAgentSetup");
private List<String> myTaskNames = ContainerUtilRt.newArrayList();
private List<String> myTaskDescriptions = ContainerUtilRt.newArrayList();
@NotNull
private List<String> myTaskNames = Collections.emptyList();
@NotNull
private List<String> myTaskDescriptions = Collections.emptyList();
@Nullable private String myExecutionName;
private String myExternalSystemIdString;
private String myExternalProjectPath;
private String myVmOptions;
private String myScriptParameters;
private Map<String, String> myEnv = ContainerUtilRt.newHashMap();
@NotNull
private Map<String, String> myEnv = Collections.emptyMap();
private boolean myPassParentEnvs = true;
public ExternalSystemTaskExecutionSettings() {
}
private ExternalSystemTaskExecutionSettings(@NotNull ExternalSystemTaskExecutionSettings source) {
setFrom(source);
}
public void setFrom(@NotNull ExternalSystemTaskExecutionSettings source) {
myExecutionName = source.myExecutionName;
myExternalSystemIdString = source.myExternalSystemIdString;
myExternalProjectPath = source.myExternalProjectPath;
@@ -53,7 +58,7 @@ public class ExternalSystemTaskExecutionSettings implements Cloneable {
myTaskNames = ContainerUtil.copyList(source.myTaskNames);
myTaskDescriptions = ContainerUtil.copyList(source.myTaskDescriptions);
myEnv = source.myEnv == null ? null : new THashMap<>(source.myEnv);
myEnv = source.myEnv.isEmpty() ? Collections.emptyMap() : new THashMap<>(source.myEnv);
myPassParentEnvs = source.myPassParentEnvs;
}
@@ -102,19 +107,21 @@ public class ExternalSystemTaskExecutionSettings implements Cloneable {
myScriptParameters = scriptParameters;
}
@NotNull
public List<String> getTaskNames() {
return myTaskNames;
}
public void setTaskNames(List<String> taskNames) {
public void setTaskNames(@NotNull List<String> taskNames) {
myTaskNames = taskNames;
}
@NotNull
public List<String> getTaskDescriptions() {
return myTaskDescriptions;
}
public void setTaskDescriptions(List<String> taskDescriptions) {
public void setTaskDescriptions(@NotNull List<String> taskDescriptions) {
myTaskDescriptions = taskDescriptions;
}
@@ -123,8 +130,8 @@ public class ExternalSystemTaskExecutionSettings implements Cloneable {
return myEnv;
}
public void setEnv(Map<String, String> env) {
myEnv = env == null ? ContainerUtilRt.newHashMap() : env;
public void setEnv(@NotNull Map<String, String> value) {
myEnv = value;
}
public boolean isPassParentEnvs() {
@@ -135,6 +142,7 @@ public class ExternalSystemTaskExecutionSettings implements Cloneable {
myPassParentEnvs = passParentEnvs;
}
@SuppressWarnings("MethodDoesntCallSuperMethod")
@Override
public ExternalSystemTaskExecutionSettings clone() {
return new ExternalSystemTaskExecutionSettings(this);
@@ -142,13 +150,13 @@ public class ExternalSystemTaskExecutionSettings implements Cloneable {
@Override
public int hashCode() {
int result = myTaskNames != null ? myTaskNames.hashCode() : 0;
int result = myTaskNames.hashCode();
result = 31 * result + (myExecutionName != null ? myExecutionName.hashCode() : 0);
result = 31 * result + (myExternalSystemIdString != null ? myExternalSystemIdString.hashCode() : 0);
result = 31 * result + (myExternalProjectPath != null ? myExternalProjectPath.hashCode() : 0);
result = 31 * result + (myVmOptions != null ? myVmOptions.hashCode() : 0);
result = 31 * result + (myScriptParameters != null ? myScriptParameters.hashCode() : 0);
result = 31 * result + (myEnv != null ? myEnv.hashCode() : 0);
result = 31 * result + myEnv.hashCode();
result = 31 * result + (myPassParentEnvs ? 1 : 0);
return result;
}
@@ -160,33 +168,29 @@ public class ExternalSystemTaskExecutionSettings implements Cloneable {
ExternalSystemTaskExecutionSettings settings = (ExternalSystemTaskExecutionSettings)o;
if (myExecutionName != null ? !myExecutionName.equals(settings.myExecutionName) : settings.myExecutionName != null) {
if (!Objects.equals(myExecutionName, settings.myExecutionName)) {
return false;
}
if (myExternalProjectPath != null
? !myExternalProjectPath.equals(settings.myExternalProjectPath)
: settings.myExternalProjectPath != null)
if (!Objects.equals(myExternalProjectPath, settings.myExternalProjectPath))
{
return false;
}
if (myExternalSystemIdString != null
? !myExternalSystemIdString.equals(settings.myExternalSystemIdString)
: settings.myExternalSystemIdString != null)
if (!Objects.equals(myExternalSystemIdString, settings.myExternalSystemIdString))
{
return false;
}
if (myTaskNames != null ? !myTaskNames.equals(settings.myTaskNames) : settings.myTaskNames != null) return false;
if (!Objects.equals(myTaskNames, settings.myTaskNames)) return false;
if (StringUtil.isEmpty(myVmOptions) ^ StringUtil.isEmpty(settings.myVmOptions)) return false;
if (StringUtil.isEmpty(myScriptParameters) ^ StringUtil.isEmpty(settings.myScriptParameters)) return false;
if (myEnv != null ? !myEnv.equals(settings.myEnv) : settings.myEnv != null) return false;
if (!Objects.equals(myEnv, settings.myEnv)) return false;
if (myPassParentEnvs != settings.myPassParentEnvs) return false;
return true;
}
@Override
public String toString() {
return (myTaskNames == null ? "" : StringUtil.join(myTaskNames, " ")) +
return StringUtil.join(myTaskNames, " ") +
(StringUtil.isEmpty(myScriptParameters) ? "" : " " + myScriptParameters) +
(StringUtil.isEmpty(myVmOptions) ? "" : " " + myVmOptions);
}
@@ -1,18 +1,4 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.openapi.externalSystem.service.execution;
import com.intellij.execution.configuration.EnvironmentVariablesComponent;
@@ -33,12 +19,13 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.EditorTextField;
import com.intellij.ui.RawCommandLineEditor;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.GridBag;
import gnu.trove.THashMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.awt.*;
import java.util.Collections;
import static com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil.normalizePath;
@@ -146,8 +133,7 @@ public class ExternalSystemTaskSettingsControl implements ExternalSystemSettings
myTasksTextField.setText(StringUtil.join(myOriginalSettings.getTaskNames(), " "));
myVmOptionsEditor.setText(myOriginalSettings.getVmOptions());
myArgumentsEditor.setText(myOriginalSettings.getScriptParameters());
myEnvVariablesComponent.setEnvData(
EnvironmentVariablesData.create(myOriginalSettings.getEnv(), myOriginalSettings.isPassParentEnvs()));
myEnvVariablesComponent.setEnvData(EnvironmentVariablesData.create(myOriginalSettings.getEnv(), myOriginalSettings.isPassParentEnvs()));
}
@Override
@@ -177,7 +163,7 @@ public class ExternalSystemTaskSettingsControl implements ExternalSystemSettings
settings.setVmOptions(myVmOptionsEditor.getText());
settings.setScriptParameters(myArgumentsEditor.getText());
settings.setPassParentEnvs(myEnvVariablesComponent.isPassParentEnvs());
settings.setEnv(ContainerUtil.newHashMap(myEnvVariablesComponent.getEnvs()));
settings.setEnv(myEnvVariablesComponent.getEnvs().isEmpty() ? Collections.emptyMap() : new THashMap<>(myEnvVariablesComponent.getEnvs()));
}
@Override
@@ -109,7 +109,7 @@ import java.util.function.Supplier;
import static com.intellij.openapi.externalSystem.settings.AbstractExternalSystemLocalSettings.SyncType.*;
import static com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil.doWriteAction;
import static com.intellij.util.containers.ContainerUtil.*;
import static com.intellij.util.containers.ContainerUtil.list;
/**
* @author Denis Zhdanov
@@ -980,20 +980,13 @@ public class ExternalSystemUtil {
@NotNull Project project,
@NotNull ProjectSystemId externalSystemId) {
AbstractExternalSystemTaskConfigurationType configurationType = findConfigurationType(externalSystemId);
if (configurationType == null) return null;
if (configurationType == null) {
return null;
}
String name = AbstractExternalSystemTaskConfigurationType.generateName(project, taskSettings);
RunnerAndConfigurationSettings settings = RunManager.getInstance(project).createRunConfiguration(name, configurationType.getFactory());
ExternalSystemRunConfiguration runConfiguration = (ExternalSystemRunConfiguration)settings.getConfiguration();
runConfiguration.getSettings().setExternalProjectPath(taskSettings.getExternalProjectPath());
runConfiguration.getSettings().setTaskNames(newArrayList(taskSettings.getTaskNames()));
runConfiguration.getSettings().setTaskDescriptions(newArrayList(taskSettings.getTaskDescriptions()));
runConfiguration.getSettings().setVmOptions(taskSettings.getVmOptions());
runConfiguration.getSettings().setScriptParameters(taskSettings.getScriptParameters());
runConfiguration.getSettings().setPassParentEnvs(taskSettings.isPassParentEnvs());
runConfiguration.getSettings().setEnv(newHashMap(taskSettings.getEnv()));
runConfiguration.getSettings().setExecutionName(taskSettings.getExecutionName());
((ExternalSystemRunConfiguration)settings.getConfiguration()).getSettings().setFrom(taskSettings);
return settings;
}
@@ -2717,6 +2717,9 @@ public class ContainerUtil extends ContainerUtilRt {
else if (list.size() == 1) {
return new SmartList<T>(list.get(0));
}
else if (list.isEmpty()) {
return new SmartList<T>();
}
else {
return new ArrayList<T>(list);
}
@@ -36,7 +36,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiJavaModule;
import com.intellij.task.ExecuteRunConfigurationTask;
import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashMap;
import org.intellij.lang.annotations.Language;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -99,7 +99,7 @@ public class GradleApplicationEnvironmentProvider implements GradleExecutionEnvi
ExternalSystemTaskExecutionSettings taskSettings = new ExternalSystemTaskExecutionSettings();
taskSettings.setPassParentEnvs(params.isPassParentEnvs());
taskSettings.setEnv(ContainerUtil.newHashMap(params.getEnv()));
taskSettings.setEnv(params.getEnv().isEmpty() ? Collections.emptyMap() : new THashMap<>(params.getEnv()));
taskSettings.setExternalSystemIdString(GradleConstants.SYSTEM_ID.getId());
String projectPath = GradleRunnerUtil.resolveProjectPath(module);
taskSettings.setExternalProjectPath(projectPath);
@@ -1,18 +1,4 @@
/*
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.plugins.gradle.importing;
import com.intellij.execution.executors.DefaultRunExecutor;
@@ -64,7 +50,7 @@ public class GradleEnvironmentTest extends GradleImportingTestCase {
"Support for this is available in Gradle 3.5 and all later versions."));
}
private void importAndRunTask(Map<String, String> passedEnv, StringBuilder gradleEnv) throws IOException {
private void importAndRunTask(@NotNull Map<String, String> passedEnv, StringBuilder gradleEnv) throws IOException {
importProject("task printEnv() {\n" +
" doLast { println System.getenv().toMapString()}\n" +
"}");