move ConfigurationFactoryEx methods to RunConfigurationBase to simplify configuration factory

No need to complicate and introduce yet another concept of configuration factory — all current implementations simply delegates work to configuration
This commit is contained in:
Vladimir Krivosheev
2018-08-29 16:27:38 +02:00
parent a0e468887f
commit a1bcab003b
21 changed files with 164 additions and 263 deletions
@@ -2,63 +2,31 @@
package com.intellij.execution.applet;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.configuration.ConfigurationFactoryEx;
import com.intellij.execution.configurations.*;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationTypeBase;
import com.intellij.execution.configurations.ConfigurationTypeUtil;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.components.BaseState;
import com.intellij.openapi.project.Project;
import com.intellij.util.LazyUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public class AppletConfigurationType implements ConfigurationType {
private final ConfigurationFactory myFactory;
public final class AppletConfigurationType extends ConfigurationTypeBase {
AppletConfigurationType() {
myFactory = new ConfigurationFactoryEx(this) {
super("Applet", ExecutionBundle.message("applet.configuration.name"), ExecutionBundle.message("applet.configuration.description"), LazyUtil.create(() -> AllIcons.RunConfigurations.Applet));
addFactory(new ConfigurationFactory(this) {
@NotNull
@Override
public RunConfiguration createTemplateConfiguration(@NotNull Project project) {
return new AppletConfiguration(project, this);
}
@Override
public void onNewConfigurationCreated(@NotNull RunConfiguration configuration) {
((ModuleBasedConfiguration)configuration).onNewConfigurationCreated();
}
@Override
public Class<? extends BaseState> getOptionsClass() {
return AppletConfigurationOptions.class;
}
};
}
@NotNull
@Override
public String getDisplayName() {
return ExecutionBundle.message("applet.configuration.name");
}
@Override
public String getConfigurationTypeDescription() {
return ExecutionBundle.message("applet.configuration.description");
}
@Override
public Icon getIcon() {
return AllIcons.RunConfigurations.Applet;
}
@Override
public ConfigurationFactory[] getConfigurationFactories() {
return new ConfigurationFactory[]{myFactory};
}
@Override
@NotNull
public String getId() {
return "Applet";
});
}
public static AppletConfigurationType getInstance() {
@@ -7,6 +7,7 @@ import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.ConfigurationTypeUtil;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.components.BaseState;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
@@ -25,7 +26,12 @@ public class ApplicationConfigurationType implements ConfigurationType {
private final ConfigurationFactory myFactory;
public ApplicationConfigurationType() {
myFactory = new JvmMainMethodConfigurationFactoryBase(this) {
myFactory = new ConfigurationFactory(this) {
@Override
public Class<? extends BaseState> getOptionsClass() {
return ApplicationConfigurationOptions.class;
}
@NotNull
@Override
public RunConfiguration createTemplateConfiguration(@NotNull Project project) {
@@ -1,25 +0,0 @@
// 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.execution.application;
import com.intellij.execution.configuration.ConfigurationFactoryListener;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.ModuleBasedConfiguration;
import com.intellij.openapi.components.BaseState;
import org.jetbrains.annotations.NotNull;
public abstract class JvmMainMethodConfigurationFactoryBase extends ConfigurationFactory implements ConfigurationFactoryListener<ModuleBasedConfiguration> {
protected JvmMainMethodConfigurationFactoryBase(@NotNull ConfigurationType type) {
super(type);
}
@Override
public void onNewConfigurationCreated(@NotNull ModuleBasedConfiguration configuration) {
configuration.onNewConfigurationCreated();
}
@Override
public Class<? extends BaseState> getOptionsClass() {
return ApplicationConfigurationOptions.class;
}
}
@@ -1,6 +1,4 @@
/*
* Copyright 2000-2017 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.
*/
// 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.execution.jar;
import com.intellij.diagnostic.logging.LogConfigurationPanel;
@@ -16,6 +14,8 @@ import com.intellij.openapi.options.SettingsEditorGroup;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
import com.intellij.util.xmlb.XmlSerializer;
@@ -224,6 +224,16 @@ public class JarApplicationConfiguration extends LocatableConfigurationBase impl
return myBean.PASS_PARENT_ENVS;
}
@Override
public void onNewConfigurationCreated() {
super.onNewConfigurationCreated();
if (StringUtil.isEmpty(getWorkingDirectory())) {
String baseDir = FileUtil.toSystemIndependentName(StringUtil.notNullize(getProject().getBasePath()));
setWorkingDirectory(baseDir);
}
}
private static class JarApplicationConfigurationBean {
public String JAR_PATH = "";
public String VM_PARAMETERS = "";
@@ -2,15 +2,9 @@
package com.intellij.execution.jar;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.configuration.ConfigurationFactoryEx;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.ConfigurationTypeBase;
import com.intellij.execution.configurations.ConfigurationTypeUtil;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.configurations.*;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.LazyUtil;
import org.jetbrains.annotations.NotNull;
@@ -23,16 +17,7 @@ public class JarApplicationConfigurationType extends ConfigurationTypeBase imple
public JarApplicationConfigurationType() {
super("JarApplication", ExecutionBundle.message("jar.application.configuration.name"),
ExecutionBundle.message("jar.application.configuration.description"), LazyUtil.create(() -> AllIcons.FileTypes.Archive));
addFactory(new ConfigurationFactoryEx(this) {
@Override
public void onNewConfigurationCreated(@NotNull RunConfiguration configuration) {
JarApplicationConfiguration jarApplicationConfiguration = (JarApplicationConfiguration)configuration;
if (StringUtil.isEmpty(jarApplicationConfiguration.getWorkingDirectory())) {
String baseDir = FileUtil.toSystemIndependentName(StringUtil.notNullize(configuration.getProject().getBasePath()));
jarApplicationConfiguration.setWorkingDirectory(baseDir);
}
}
addFactory(new ConfigurationFactory(this) {
@Override
@NotNull
public RunConfiguration createTemplateConfiguration(@NotNull Project project) {
@@ -1,10 +1,9 @@
// 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.execution.scratch;
import com.intellij.execution.configuration.ConfigurationFactoryEx;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationTypeBase;
import com.intellij.execution.configurations.ConfigurationTypeUtil;
import com.intellij.execution.configurations.ModuleBasedConfiguration;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.components.BaseState;
@@ -19,7 +18,7 @@ import org.jetbrains.annotations.NotNull;
public final class JavaScratchConfigurationType extends ConfigurationTypeBase {
public JavaScratchConfigurationType() {
super("Java Scratch", "Java Scratch", "Configuration for java scratch files", LazyUtil.create(() -> LayeredIcon.create(AllIcons.RunConfigurations.Application, AllIcons.Actions.Scratch)));
addFactory(new ConfigurationFactoryEx(this) {
addFactory(new ConfigurationFactory(this) {
@Override
public boolean isApplicable(@NotNull Project project) {
return false;
@@ -31,11 +30,6 @@ public final class JavaScratchConfigurationType extends ConfigurationTypeBase {
return new JavaScratchConfiguration("", project, this);
}
@Override
public void onNewConfigurationCreated(@NotNull RunConfiguration configuration) {
((ModuleBasedConfiguration)configuration).onNewConfigurationCreated();
}
@Override
public Class<? extends BaseState> getOptionsClass() {
return JavaScratchConfigurationOptions.class;
@@ -181,6 +181,7 @@ public abstract class ModuleBasedConfiguration<ConfigurationModule extends RunCo
return false;
}
@Override
public void onNewConfigurationCreated() {
final RunConfigurationModule configurationModule = getConfigurationModule();
if (configurationModule.getModule() == null) {
@@ -308,4 +308,14 @@ public abstract class RunConfigurationBase extends UserDataHolderBase implements
protected boolean isNewSerializationUsed() {
return false;
}
/**
* Called when configuration created via UI (Add Configuration).
* Suitable to perform some initialization tasks (in most cases it is indicator that you do something wrong, so, please override this method with care and only if really need).
*/
public void onNewConfigurationCreated() {
}
public void onConfigurationCopied() {
}
}
@@ -1,6 +1,4 @@
/*
* Copyright 2000-2017 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.
*/
// 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.execution.configurations;
import com.intellij.execution.ExecutionBundle;
@@ -30,7 +28,8 @@ public class RunConfigurationModule implements JDOMExternalizable {
@NonNls private static final String ELEMENT = "module";
@NonNls private static final String ATTRIBUTE = "name";
private @Nullable ModulePointer myModulePointer;
@Nullable
private ModulePointer myModulePointer;
private final Project myProject;
@@ -63,7 +62,15 @@ public class RunConfigurationModule implements JDOMExternalizable {
prev.setAttribute(ATTRIBUTE, getModuleName());
}
/**
* @deprecated It is not init. It sets module to any first module if no module yet configured. Use {@link #setModuleToAnyFirstIfNotSpecified} if need.
*/
@Deprecated
public void init() {
setModuleToAnyFirstIfNotSpecified();
}
public void setModuleToAnyFirstIfNotSpecified() {
if (StringUtil.isEmptyOrSpaces(getModuleName())) {
Module[] modules = getModuleManager().getModules();
if (modules.length > 0) {
@@ -4,14 +4,21 @@ package com.intellij.execution.configuration;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.configurations.RunConfigurationBase;
import org.jetbrains.annotations.NotNull;
/**
* @deprecated Use {@link ConfigurationFactoryListener}
* @deprecated Use {@link RunConfigurationBase#onNewConfigurationCreated()}
*/
@Deprecated
public abstract class ConfigurationFactoryEx<T extends RunConfiguration> extends ConfigurationFactory implements ConfigurationFactoryListener<T> {
public abstract class ConfigurationFactoryEx<T extends RunConfiguration> extends ConfigurationFactory {
protected ConfigurationFactoryEx(@NotNull ConfigurationType type) {
super(type);
}
public void onNewConfigurationCreated(@NotNull T configuration) {
}
public void onConfigurationCopied(@NotNull T configuration) {
}
}
@@ -1,13 +0,0 @@
// 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.execution.configuration;
import com.intellij.execution.configurations.RunConfiguration;
import org.jetbrains.annotations.NotNull;
public interface ConfigurationFactoryListener<T extends RunConfiguration> {
default void onNewConfigurationCreated(@NotNull T configuration) {
}
default void onConfigurationCopied(@NotNull T configuration) {
}
}
@@ -4,8 +4,10 @@ package com.intellij.execution.dashboard.actions;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.RunManager;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.configuration.ConfigurationFactoryListener;
import com.intellij.execution.configuration.ConfigurationFactoryEx;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.configurations.RunConfigurationBase;
import com.intellij.execution.dashboard.RunDashboardManager;
import com.intellij.execution.dashboard.RunDashboardRunConfigurationNode;
import com.intellij.execution.impl.RunDialog;
@@ -52,8 +54,14 @@ public class CopyConfigurationAction extends RunConfigurationTreeAction {
copiedSettings.setFolderName(settings.getFolderName());
final ConfigurationFactory factory = settings.getFactory();
if (factory instanceof ConfigurationFactoryListener) {
((ConfigurationFactoryListener)factory).onConfigurationCopied(settings.getConfiguration());
RunConfiguration configuration = settings.getConfiguration();
//noinspection deprecation
if (factory instanceof ConfigurationFactoryEx) {
//noinspection deprecation
((ConfigurationFactoryEx)factory).onConfigurationCopied(configuration);
}
if (configuration instanceof RunConfigurationBase) {
((RunConfigurationBase)configuration).onConfigurationCopied();
}
if (RunDialog.editConfiguration(node.getProject(), copiedSettings,
@@ -2,7 +2,7 @@
package com.intellij.execution.impl
import com.intellij.execution.*
import com.intellij.execution.configuration.ConfigurationFactoryListener
import com.intellij.execution.configuration.ConfigurationFactoryEx
import com.intellij.execution.configurations.*
import com.intellij.execution.impl.RunConfigurable.Companion.collectNodesRecursively
import com.intellij.execution.impl.RunConfigurableNodeKind.*
@@ -971,8 +971,7 @@ open class RunConfigurable @JvmOverloads constructor(private val project: Projec
val name = createUniqueName(typeNode, suggestedName, CONFIGURATION, TEMPORARY_CONFIGURATION)
configuration.name = name
(configuration as? LocatableConfigurationBase)?.setNameChangedByUser(false)
@Suppress("UNCHECKED_CAST")
(factory as? ConfigurationFactoryListener<RunConfiguration>)?.onNewConfigurationCreated(configuration)
callNewConfigurationCreated(factory, configuration)
return createNewConfiguration(settings, node, selectedNode)
}
@@ -1181,7 +1180,8 @@ open class RunConfigurable @JvmOverloads constructor(private val project: Projec
settings.name = copyName
val factory = settings.factory
@Suppress("UNCHECKED_CAST")
(factory as? ConfigurationFactoryListener<RunConfiguration>)?.onConfigurationCopied(settings.configuration)
(factory as? ConfigurationFactoryEx<RunConfiguration>)?.onConfigurationCopied(settings.configuration)
(settings.configuration as? RunConfigurationBase)?.onConfigurationCopied()
val parentNode = selectedNode?.parent
val node = (if ((parentNode as? DefaultMutableTreeNode)?.userObject is String) parentNode else typeNode) as DefaultMutableTreeNode
val configurable = createNewConfiguration(settings, node, selectedNode)
@@ -4,6 +4,7 @@ package com.intellij.execution.impl
import com.intellij.ProjectTopics
import com.intellij.configurationStore.*
import com.intellij.execution.*
import com.intellij.execution.configuration.ConfigurationFactoryEx
import com.intellij.execution.configurations.*
import com.intellij.execution.runners.ExecutionEnvironment
import com.intellij.execution.runners.ExecutionUtil
@@ -1044,4 +1045,10 @@ internal fun doGetBeforeRunTasks(configuration: RunConfiguration): List<BeforeRu
internal fun RunConfiguration.cloneBeforeRunTasks() {
beforeRunTasks = doGetBeforeRunTasks(this).mapSmart { it.clone() }
}
fun callNewConfigurationCreated(factory: ConfigurationFactory, configuration: RunConfiguration) {
@Suppress("UNCHECKED_CAST")
(factory as? ConfigurationFactoryEx<RunConfiguration>)?.onNewConfigurationCreated(configuration)
(configuration as? RunConfigurationBase)?.onNewConfigurationCreated()
}
@@ -2,23 +2,19 @@
package com.intellij.remoteServer.impl.configuration.deployment;
import com.intellij.execution.configuration.ConfigurationFactoryEx;
import com.intellij.execution.configuration.ConfigurationFactoryListener;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationTypeBase;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.openapi.project.Project;
import com.intellij.remoteServer.ServerType;
import com.intellij.remoteServer.configuration.RemoteServer;
import com.intellij.remoteServer.configuration.RemoteServersManager;
import com.intellij.remoteServer.configuration.ServerConfiguration;
import com.intellij.remoteServer.configuration.deployment.*;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.remoteServer.configuration.deployment.DeploymentConfigurator;
import com.intellij.remoteServer.configuration.deployment.DeploymentSourceType;
import com.intellij.remoteServer.configuration.deployment.SingletonDeploymentSourceType;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -80,7 +76,8 @@ public final class DeployToServerConfigurationType extends ConfigurationTypeBase
return myServerType;
}
public class DeployToServerConfigurationFactory extends ConfigurationFactoryEx<DeployToServerRunConfiguration<?, ?>> implements ConfigurationFactoryListener<DeployToServerRunConfiguration<?, ?>> {
// todo do not extends ConfigurationFactoryEx once Google Cloud Tools plugin will get rid of getFactory() usage
public class DeployToServerConfigurationFactory extends ConfigurationFactoryEx<DeployToServerRunConfiguration<?, ?>> {
public DeployToServerConfigurationFactory() {
super(DeployToServerConfigurationType.this);
}
@@ -90,35 +87,6 @@ public final class DeployToServerConfigurationType extends ConfigurationTypeBase
return myServerType.canAutoDetectConfiguration() || !RemoteServersManager.getInstance().getServers(myServerType).isEmpty();
}
@Override
public void onNewConfigurationCreated(@NotNull DeployToServerRunConfiguration<?, ?> configuration) {
if (configuration.getServerName() == null) {
RemoteServer<?> server = ContainerUtil.getFirstItem(RemoteServersManager.getInstance().getServers(myServerType));
if (server != null) {
configuration.setServerName(server.getName());
}
}
if (configuration.getDeploymentSource() == null) {
setupDeploymentSource(configuration, configuration);
}
}
private <S extends ServerConfiguration, D extends DeploymentConfiguration> void setupDeploymentSource(
@NotNull RunConfiguration configuration, @NotNull DeployToServerRunConfiguration<S, D> deployConfiguration) {
DeploymentConfigurator<D, S> deploymentConfigurator = deployConfiguration.getDeploymentConfigurator();
List<DeploymentSource> sources = deploymentConfigurator.getAvailableDeploymentSources();
DeploymentSource source = ContainerUtil.getFirstItem(sources);
if (source != null) {
deployConfiguration.setDeploymentSource(source);
deployConfiguration.setDeploymentConfiguration(deploymentConfigurator.createDefaultConfiguration(source));
DeploymentSourceType type = source.getType();
//noinspection unchecked
type.setBuildBeforeRunTask(configuration, source);
}
}
@Override
@NotNull
public DeployToServerRunConfiguration createTemplateConfiguration(@NotNull Project project) {
@@ -128,7 +96,7 @@ public final class DeployToServerConfigurationType extends ConfigurationTypeBase
}
}
public class MultiSourcesConfigurationFactory extends DeployToServerConfigurationFactory {
public final class MultiSourcesConfigurationFactory extends DeployToServerConfigurationFactory {
@NotNull
@Override
public String getId() {
@@ -137,7 +105,7 @@ public final class DeployToServerConfigurationType extends ConfigurationTypeBase
}
}
public class SingletonTypeConfigurationFactory extends DeployToServerConfigurationFactory {
public final class SingletonTypeConfigurationFactory extends DeployToServerConfigurationFactory {
private final SingletonDeploymentSourceType mySourceType;
public SingletonTypeConfigurationFactory(@NotNull SingletonDeploymentSourceType sourceType) {
@@ -1,6 +1,4 @@
/*
* Copyright 2000-2017 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.
*/
// 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.remoteServer.impl.configuration.deployment;
import com.intellij.configurationStore.ComponentSerializationUtil;
@@ -23,6 +21,7 @@ import com.intellij.remoteServer.configuration.deployment.*;
import com.intellij.remoteServer.impl.configuration.deployment.DeployToServerSettingsEditor.AnySource;
import com.intellij.remoteServer.impl.configuration.deployment.DeployToServerSettingsEditor.LockedSource;
import com.intellij.remoteServer.impl.runtime.DeployToServerState;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
import com.intellij.util.xmlb.XmlSerializer;
import com.intellij.util.xmlb.annotations.Attribute;
@@ -32,6 +31,8 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* @author nik
*/
@@ -255,6 +256,29 @@ public class DeployToServerRunConfiguration<S extends ServerConfiguration, D ext
return result;
}
@Override
public void onNewConfigurationCreated() {
if (getServerName() == null) {
RemoteServer<?> server = ContainerUtil.getFirstItem(RemoteServersManager.getInstance().getServers(myServerType));
if (server != null) {
setServerName(server.getName());
}
}
if (getDeploymentSource() == null) {
DeploymentConfigurator<D, S> deploymentConfigurator = getDeploymentConfigurator();
List<DeploymentSource> sources = deploymentConfigurator.getAvailableDeploymentSources();
DeploymentSource source = ContainerUtil.getFirstItem(sources);
if (source != null) {
setDeploymentSource(source);
setDeploymentConfiguration(deploymentConfigurator.createDefaultConfiguration(source));
DeploymentSourceType type = source.getType();
//noinspection unchecked
type.setBuildBeforeRunTask(this, source);
}
}
}
public static class ConfigurationState {
@Attribute("server-name")
public String myServerName;
@@ -4,9 +4,7 @@ package com.intellij.remoteServer.impl.configuration.deployment;
import com.intellij.execution.ProgramRunnerUtil;
import com.intellij.execution.RunManager;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.configuration.ConfigurationFactoryListener;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.executors.DefaultRunExecutor;
import com.intellij.execution.impl.RunDialog;
import com.intellij.openapi.project.Project;
@@ -53,9 +51,8 @@ public class DeploymentConfigurationManagerImpl extends DeploymentConfigurationM
@SuppressWarnings("unchecked")
ConfigurationFactory factory = configurationType.getFactoryForType(sourceType);
RunnerAndConfigurationSettings settings = runManager.createRunConfiguration(configurationType.getDisplayName(), factory);
//noinspection unchecked
((ConfigurationFactoryListener<RunConfiguration>)factory).onNewConfigurationCreated(settings.getConfiguration());
DeployToServerRunConfiguration<?, ?> runConfiguration = (DeployToServerRunConfiguration<?, ?>)settings.getConfiguration();
runConfiguration.onNewConfigurationCreated();
if (remoteServer != null) {
runConfiguration.setServerName(remoteServer.getName());
}
@@ -3,9 +3,8 @@ package com.intellij.remoteServer.util;
import com.intellij.execution.RunManager;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.configuration.ConfigurationFactoryListener;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.impl.RunManagerImplKt;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModulePointer;
import com.intellij.openapi.module.ModulePointerManager;
@@ -42,8 +41,7 @@ public class CloudRunConfigurationUtil {
result.setServerName(account.getName());
result.setDeploymentSource(deploymentSource);
result.setDeploymentConfiguration(deploymentConfiguration);
//noinspection unchecked
((ConfigurationFactoryListener<RunConfiguration>)configurationFactory).onNewConfigurationCreated(runSettings.getConfiguration());
RunManagerImplKt.callNewConfigurationCreated(configurationFactory, runSettings.getConfiguration());
runManager.addConfiguration(runSettings);
runManager.setSelectedConfiguration(runSettings);
@@ -3,8 +3,10 @@
package com.intellij.execution.junit;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.configuration.ConfigurationFactoryEx;
import com.intellij.execution.configurations.*;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.ConfigurationTypeUtil;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
@@ -20,17 +22,12 @@ public class JUnitConfigurationType implements ConfigurationType {
/**reflection*/
public JUnitConfigurationType() {
myFactory = new ConfigurationFactoryEx(this) {
myFactory = new ConfigurationFactory(this) {
@Override
@NotNull
public RunConfiguration createTemplateConfiguration(@NotNull Project project) {
return new JUnitConfiguration("", project, this);
}
@Override
public void onNewConfigurationCreated(@NotNull RunConfiguration configuration) {
((ModuleBasedConfiguration)configuration).onNewConfigurationCreated();
}
};
}
@@ -1,96 +1,58 @@
// 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.theoryinpractice.testng.configuration;
import com.intellij.execution.Location;
import com.intellij.execution.RunManager;
import com.intellij.execution.configuration.ConfigurationFactoryEx;
import com.intellij.execution.configurations.*;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ConfigurationTypeBase;
import com.intellij.execution.configurations.ConfigurationTypeUtil;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.PsiElement;
import com.intellij.util.LazyUtil;
import com.theoryinpractice.testng.model.TestData;
import com.theoryinpractice.testng.model.TestNGTestObject;
import icons.TestngIcons;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public final class TestNGConfigurationType extends ConfigurationTypeBase {
public TestNGConfigurationType() {
super("TestNG", "TestNG", null, LazyUtil.create(() -> TestngIcons.TestNG));
addFactory(new ConfigurationFactory(this) {
@NotNull
@Override
public RunConfiguration createTemplateConfiguration(@NotNull Project project) {
return new TestNGConfiguration("", project, this);
}
});
}
public class TestNGConfigurationType implements ConfigurationType {
private final ConfigurationFactory myFactory;
public TestNGConfigurationType() {
myFactory = new ConfigurationFactoryEx(this)
{
@NotNull
@Override
public RunConfiguration createTemplateConfiguration(@NotNull Project project) {
return new TestNGConfiguration("", project, this);
}
@Override
public void onNewConfigurationCreated(@NotNull RunConfiguration configuration) {
((ModuleBasedConfiguration)configuration).onNewConfigurationCreated();
}
};
}
public static TestNGConfigurationType getInstance() {
return ConfigurationTypeUtil.findConfigurationType(TestNGConfigurationType.class);
}
public static TestNGConfigurationType getInstance() {
return ConfigurationTypeUtil.findConfigurationType(TestNGConfigurationType.class);
}
public boolean isConfigurationByLocation(RunConfiguration runConfiguration, Location location) {
TestNGConfiguration config = (TestNGConfiguration) runConfiguration;
TestData testobject = config.getPersistantData();
if (testobject == null)
return false;
else {
final PsiElement element = location.getPsiElement();
final TestNGTestObject testNGTestObject = TestNGTestObject.fromConfig(config);
if (testNGTestObject != null && testNGTestObject.isConfiguredByElement(element)) {
final Module configurationModule = config.getConfigurationModule().getModule();
if (Comparing.equal(location.getModule(), configurationModule)) return true;
final Module predefinedModule =
((TestNGConfiguration)RunManager.getInstance(location.getProject()).getConfigurationTemplate(myFactory)
.getConfiguration()).getConfigurationModule().getModule();
return Comparing.equal(predefinedModule, configurationModule);
}
else {
return false;
}
}
TestNGConfiguration config = (TestNGConfiguration)runConfiguration;
TestData testObject = config.getPersistantData();
if (testObject == null) {
return false;
}
@NotNull
@Override
public String getDisplayName() {
return "TestNG";
}
final PsiElement element = location.getPsiElement();
final TestNGTestObject testNGTestObject = TestNGTestObject.fromConfig(config);
if (testNGTestObject.isConfiguredByElement(element)) {
final Module configurationModule = config.getConfigurationModule().getModule();
if (Comparing.equal(location.getModule(), configurationModule)) return true;
@Override
public String getConfigurationTypeDescription() {
return "TestNG Configuration";
final Module predefinedModule =
((TestNGConfiguration)RunManager.getInstance(location.getProject()).getConfigurationTemplate(getConfigurationFactories()[0])
.getConfiguration()).getConfigurationModule().getModule();
return Comparing.equal(predefinedModule, configurationModule);
}
@Override
public Icon getIcon() {
return TestngIcons.TestNG;
else {
return false;
}
@Override
public ConfigurationFactory[] getConfigurationFactories() {
return new ConfigurationFactory[] {myFactory};
}
@Override
@NotNull
public String getId() {
return "TestNG";
}
}
}
@@ -4,7 +4,6 @@ package com.jetbrains.python.run;
import com.google.common.collect.Lists;
import com.intellij.diagnostic.logging.LogConfigurationPanel;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.configuration.AbstractRunConfiguration;
import com.intellij.execution.configuration.EnvironmentVariablesComponent;
import com.intellij.execution.configurations.*;
@@ -59,7 +58,7 @@ public abstract class AbstractPythonRunConfiguration<T extends AbstractPythonRun
public AbstractPythonRunConfiguration(@NotNull Project project, @NotNull ConfigurationFactory factory) {
super(project, factory);
getConfigurationModule().init();
getConfigurationModule().setModuleToAnyFirstIfNotSpecified();
}
@Override
@@ -307,15 +306,6 @@ public abstract class AbstractPythonRunConfiguration<T extends AbstractPythonRun
return getConfigurationModule().getModule();
}
@NotNull
public final Module getModuleNotNull() throws ExecutionException {
final Module module = getModule();
if (module == null) {
throw new ExecutionException("No module set for configuration, please choose one");
}
return module;
}
@Override
public boolean isUseModuleSdk() {
return myUseModuleSdk;