From 5bb489befb6c0a9222fe3ae05820fc27b9d28715 Mon Sep 17 00:00:00 2001 From: Maxim Manuylov Date: Wed, 30 May 2012 00:12:02 +0200 Subject: [PATCH] Converter for KT-2041: JetRunConfiguration should store its settings in the same format as Java's ApplicationConfiguration to be able to reuse code in JPS --- idea/src/META-INF/plugin.xml | 2 + ...rationSettingsFormatConverterProvider.java | 107 ++++++++++++++++++ .../jet/plugin/run/JetRunConfiguration.java | 13 --- .../run/JetRunConfigurationSettings.java | 83 -------------- 4 files changed, 109 insertions(+), 96 deletions(-) create mode 100644 idea/src/org/jetbrains/jet/plugin/converters/JetRunConfigurationSettingsFormatConverterProvider.java delete mode 100644 idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationSettings.java diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 25197fa32c1..049ad9e8218 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -190,5 +190,7 @@ Kotlin + + diff --git a/idea/src/org/jetbrains/jet/plugin/converters/JetRunConfigurationSettingsFormatConverterProvider.java b/idea/src/org/jetbrains/jet/plugin/converters/JetRunConfigurationSettingsFormatConverterProvider.java new file mode 100644 index 00000000000..4ca30ff09a7 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/converters/JetRunConfigurationSettingsFormatConverterProvider.java @@ -0,0 +1,107 @@ +/* + * Copyright 2010-2012 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. + */ + +package org.jetbrains.jet.plugin.converters; + +import com.intellij.conversion.*; +import org.jdom.Element; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author Maxim.Manuylov + * Date: 29.05.12 + */ +public class JetRunConfigurationSettingsFormatConverterProvider extends ConverterProvider { + protected JetRunConfigurationSettingsFormatConverterProvider() { + super("jet-run-configuration-should-store-its-settings-as-java-app-configuration"); + } + + @NotNull + @Override + public String getConversionDescription() { + return "Kotlin run configurations settings will be converted to Java run configurations format"; + } + + @NotNull + @Override + public ProjectConverter createConverter(@NotNull final ConversionContext context) { + return new ProjectConverter() { + @NotNull + @Override + public ConversionProcessor createRunConfigurationsConverter() { + return new ConversionProcessor() { + @Override + public boolean isConversionNeeded(@NotNull final RunManagerSettings settings) { + for (final Element runConfiguration : settings.getRunConfigurations()) { + if (isJetRunConfiguration(runConfiguration) && getOldSettings(runConfiguration) != null) { + return true; + } + } + return false; + } + + @Override + public void process(@NotNull final RunManagerSettings settings) throws CannotConvertException { + for (final Element runConfiguration : settings.getRunConfigurations()) { + if (isJetRunConfiguration(runConfiguration)) { + final Element oldSettings = getOldSettings(runConfiguration); + if (oldSettings == null) continue; + for (final Object optionObj : oldSettings.getChildren("option")) { + if (optionObj instanceof Element) { + final Element option = (Element)optionObj; + final String optionName = option.getAttributeValue("name"); + final String optionValue = option.getAttributeValue("value"); + if ("mainClassName".equals(optionName)) { + runConfiguration.addContent(createOption("MAIN_CLASS_NAME", optionValue)); + } + else if ("programParameters".equals(optionName)) { + runConfiguration.addContent(createOption("PROGRAM_PARAMETERS", optionValue)); + } + else if ("vmParameters".equals(optionName)) { + runConfiguration.addContent(createOption("VM_PARAMETERS", optionValue)); + } + else if ("workingDirectory".equals(optionName)) { + runConfiguration.addContent(createOption("WORKING_DIRECTORY", optionValue)); + } + } + } + runConfiguration.removeContent(oldSettings); + } + } + } + }; + } + }; + } + + private static boolean isJetRunConfiguration(@NotNull final Element runConfiguration) { + return "JetRunConfigurationType".equals(runConfiguration.getAttributeValue("type")); + } + + @Nullable + private static Element getOldSettings(@NotNull final Element runConfiguration) { + return runConfiguration.getChild("JetRunConfigurationSettings"); + } + + @NotNull + private static Element createOption(@NotNull final String name, @Nullable final String value) { + final Element option = new Element("option"); + option.setAttribute("name", name); + option.setAttribute("value", value == null ? "" : value); + return option; + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/run/JetRunConfiguration.java b/idea/src/org/jetbrains/jet/plugin/run/JetRunConfiguration.java index 98cad497c18..45b72ecb50a 100644 --- a/idea/src/org/jetbrains/jet/plugin/run/JetRunConfiguration.java +++ b/idea/src/org/jetbrains/jet/plugin/run/JetRunConfiguration.java @@ -27,7 +27,6 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.util.*; -import com.intellij.util.xmlb.XmlSerializer; import org.jdom.Element; import org.jetbrains.annotations.NotNull; @@ -82,18 +81,6 @@ public class JetRunConfiguration extends ModuleBasedConfiguration