mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
do not write factory id for SimpleConfigurationType
factory uses RC `name`, but type uses `id`. It means that for SimpleConfigurationType deserialization maybe (depends on RC id value) broken. As solution, we don't write factory id for SimpleConfigurationType anymore — and this change IS backward compatible — previous IDEA version will correctly use first factory if factory id is not specified at all (`null` value). Also, in any case it doesn't make sense to write factory id for single-factory RC type Only for SimpleConfigurationType, not for Configuration with the only factory, because it is not clear how it can affect (some RC conditionally build factory list)
This commit is contained in:
+13
-44
@@ -8,60 +8,24 @@ package com.intellij.execution.remote;
|
||||
|
||||
import com.intellij.execution.ExecutionBundle;
|
||||
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.execution.configurations.SimpleConfigurationType;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.util.LazyUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public final class RemoteConfigurationType implements ConfigurationType {
|
||||
private final ConfigurationFactory myFactory;
|
||||
|
||||
/**reflection*/
|
||||
public final class RemoteConfigurationType extends SimpleConfigurationType {
|
||||
public RemoteConfigurationType() {
|
||||
myFactory = new ConfigurationFactory(this) {
|
||||
@Override
|
||||
@NotNull
|
||||
public RunConfiguration createTemplateConfiguration(@NotNull Project project) {
|
||||
return new RemoteConfiguration(project, this);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return ExecutionBundle.message("remote.debug.configuration.display.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getConfigurationTypeDescription() {
|
||||
return ExecutionBundle.message("remote.debug.configuration.description");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
return AllIcons.RunConfigurations.Remote;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigurationFactory[] getConfigurationFactories() {
|
||||
return new ConfigurationFactory[]{myFactory};
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ConfigurationFactory getFactory() {
|
||||
return myFactory;
|
||||
super("Remote", ExecutionBundle.message("remote.debug.configuration.display.name"), ExecutionBundle.message("remote.debug.configuration.description"),
|
||||
LazyUtil.create(() -> AllIcons.RunConfigurations.Remote));
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public String getId() {
|
||||
return "Remote";
|
||||
public RunConfiguration createTemplateConfiguration(@NotNull Project project) {
|
||||
return new RemoteConfiguration(project, this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -70,9 +34,14 @@ public final class RemoteConfigurationType implements ConfigurationType {
|
||||
return "jvmRemote";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Deprecated
|
||||
public ConfigurationFactory getFactory() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static RemoteConfigurationType getInstance() {
|
||||
return ConfigurationTypeUtil.findConfigurationType(RemoteConfigurationType.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-4
@@ -9,7 +9,6 @@ import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.ProgramRunnerUtil;
|
||||
import com.intellij.execution.RunManager;
|
||||
import com.intellij.execution.RunnerAndConfigurationSettings;
|
||||
import com.intellij.execution.configurations.ConfigurationFactory;
|
||||
import com.intellij.execution.executors.DefaultDebugExecutor;
|
||||
import com.intellij.execution.impl.ConsoleViewImpl;
|
||||
import com.intellij.execution.impl.EditorHyperlinkSupport;
|
||||
@@ -192,9 +191,7 @@ class ForkedDebuggerThread extends Thread {
|
||||
}
|
||||
|
||||
private static void attachVM(@NotNull Project project, String runConfigName, @NotNull String debugPort, ProgramRunner.Callback callback) {
|
||||
RemoteConfigurationType remoteConfigurationType = RemoteConfigurationType.getInstance();
|
||||
ConfigurationFactory factory = remoteConfigurationType.getFactory();
|
||||
RunnerAndConfigurationSettings runSettings = RunManager.getInstance(project).createConfiguration(runConfigName, factory);
|
||||
RunnerAndConfigurationSettings runSettings = RunManager.getInstance(project).createConfiguration(runConfigName, RemoteConfigurationType.class);
|
||||
runSettings.setActivateToolWindowBeforeRun(false);
|
||||
|
||||
RemoteConfiguration configuration = (RemoteConfiguration)runSettings.getConfiguration();
|
||||
|
||||
+9
-2
@@ -22,6 +22,7 @@ import com.intellij.openapi.util.text.StringUtil
|
||||
import com.intellij.util.PathUtilRt
|
||||
import com.intellij.util.SmartList
|
||||
import com.intellij.util.getAttributeBooleanValue
|
||||
import com.intellij.util.text.nullize
|
||||
import gnu.trove.THashMap
|
||||
import gnu.trove.THashSet
|
||||
import org.jdom.Element
|
||||
@@ -243,11 +244,17 @@ class RunnerAndConfigurationSettingsImpl @JvmOverloads constructor(val manager:
|
||||
if (!isNewSerializationAllowed) {
|
||||
element.setAttribute(TEMPLATE_FLAG_ATTRIBUTE, "false")
|
||||
}
|
||||
element.setAttribute(NAME_ATTR, configuration.name)
|
||||
|
||||
configuration.name.nullize()?.let {
|
||||
element.setAttribute(NAME_ATTR, it)
|
||||
}
|
||||
}
|
||||
|
||||
val factory = factory
|
||||
element.setAttribute(CONFIGURATION_TYPE_ATTRIBUTE, factory.type.id)
|
||||
element.setAttribute(FACTORY_NAME_ATTRIBUTE, factory.id)
|
||||
if (factory.type !is SimpleConfigurationType) {
|
||||
element.setAttribute(FACTORY_NAME_ATTRIBUTE, factory.id)
|
||||
}
|
||||
if (folderName != null) {
|
||||
element.setAttribute(FOLDER_NAME, folderName!!)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user