diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt index bddb377f0c6..d01232f67e0 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.cli.common.arguments +import com.intellij.util.xmlb.annotations.Transient import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.config.AnalysisFlag import java.util.* @@ -32,6 +33,9 @@ abstract class CommonCompilerArguments : CommonToolArguments() { const val ENABLE = "enable" } + @get:Transient + var autoAdvanceLanguageVersion: Boolean by FreezableVar(true) + @GradleOption(DefaultValues.LanguageVersions::class) @Argument( value = "-language-version", @@ -40,6 +44,9 @@ abstract class CommonCompilerArguments : CommonToolArguments() { ) var languageVersion: String? by FreezableVar(null) + @get:Transient + var autoAdvanceApiVersion: Boolean by FreezableVar(true) + @GradleOption(DefaultValues.LanguageVersions::class) @Argument( value = "-api-version", diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCommonCompilerArgumentsHolder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCommonCompilerArgumentsHolder.kt index be30cc8b42c..0b236521921 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCommonCompilerArgumentsHolder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCommonCompilerArgumentsHolder.kt @@ -21,45 +21,37 @@ import com.intellij.openapi.project.Project import com.intellij.util.text.VersionComparatorUtil import org.jdom.Element import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMMON_COMPILER_ARGUMENTS_SECTION -import org.jetbrains.kotlin.config.getOption +import org.jetbrains.kotlin.config.detectVersionAutoAdvance +import org.jetbrains.kotlin.config.dropVersionsIfNecessary @State(name = KOTLIN_COMMON_COMPILER_ARGUMENTS_SECTION, storages = arrayOf(Storage(file = StoragePathMacros.PROJECT_FILE), Storage(file = BaseKotlinCompilerSettings.KOTLIN_COMPILER_SETTINGS_PATH, scheme = StorageScheme.DIRECTORY_BASED))) class KotlinCommonCompilerArgumentsHolder(project: Project) : BaseKotlinCompilerSettings(project) { - private fun Element.dropElementIfDefault() { - if (DEFAULT_LANGUAGE_VERSION == getAttribute("value")?.value) { - detach() - } - } - override fun getState(): Element { return super.getState().apply { - // Do not serialize language/api version if they correspond to the default language version - getOption("languageVersion")?.dropElementIfDefault() - getOption("apiVersion")?.dropElementIfDefault() + dropVersionsIfNecessary(settings) } } override fun loadState(state: Element) { super.loadState(state) - // To fix earlier configurations with incorrect combination of language and API version update { + // To fix earlier configurations with incorrect combination of language and API version if (VersionComparatorUtil.compare(languageVersion, apiVersion) < 0) { apiVersion = languageVersion } + + detectVersionAutoAdvance() } } override fun createSettings() = CommonCompilerArguments.DummyImpl() companion object { - private val DEFAULT_LANGUAGE_VERSION = LanguageVersion.LATEST_STABLE.versionString - fun getInstance(project: Project) = ServiceManager.getService(project, KotlinCommonCompilerArgumentsHolder::class.java)!! } diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index 7883fb746d5..7c71a715654 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -70,6 +70,48 @@ object CoroutineSupport { } } +sealed class VersionView : DescriptionAware { + abstract val version: LanguageVersion + + object LatestStable : VersionView() { + override val version: LanguageVersion = LanguageVersion.LATEST_STABLE + + override val description: String + get() = "Latest stable (${version.versionString})" + } + + class Specific(override val version: LanguageVersion) : VersionView() { + override val description: String + get() = version.description + + override fun equals(other: Any?) = other is Specific && version == other.version + + override fun hashCode() = version.hashCode() + } + + companion object { + fun deserialize(value: String?, isAutoAdvance: Boolean): VersionView { + if (isAutoAdvance) return VersionView.LatestStable + val languageVersion = LanguageVersion.fromVersionString(value) + return if (languageVersion != null) VersionView.Specific(languageVersion) else VersionView.LatestStable + } + } +} + +var CommonCompilerArguments.languageVersionView: VersionView + get() = VersionView.deserialize(languageVersion, autoAdvanceLanguageVersion) + set(value) { + languageVersion = value.version.versionString + autoAdvanceLanguageVersion = value == VersionView.LatestStable + } + +var CommonCompilerArguments.apiVersionView: VersionView + get() = VersionView.deserialize(apiVersion, autoAdvanceApiVersion) + set(value) { + apiVersion = value.version.versionString + autoAdvanceApiVersion = value == VersionView.LatestStable + } + class KotlinFacetSettings { companion object { // Increment this when making serialization-incompatible changes to configuration data diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt index 61636b121d1..fbb209aedd3 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt @@ -74,6 +74,8 @@ private fun readV1Config(element: Element): KotlinFacetSettings { compilerArguments.apiVersion = apiLevel } + compilerArguments.detectVersionAutoAdvance() + if (useProjectSettings != null) { this.useProjectSettings = useProjectSettings } @@ -106,6 +108,7 @@ private fun readV2AndLaterConfig(element: Element): KotlinFacetSettings { element.getChild("compilerArguments")?.let { compilerArguments = platformKind.createCompilerArguments { freeArgs = ArrayList() } XmlSerializer.deserializeInto(compilerArguments!!, it) + compilerArguments!!.detectVersionAutoAdvance() } testOutputPath = element.getChild("testOutputPath")?.let { PathUtil.toSystemDependentName((it.content.firstOrNull() as? Text)?.textTrim) @@ -214,8 +217,8 @@ private fun Element.restoreNormalOrdering(bean: Any) { .forEachIndexed { index, element -> elementsToReorder[index] = element.clone() } } -private fun buildChildElement(element: Element, tag: String, bean: Any, filter: SerializationFilter) { - Element(tag).apply { +private fun buildChildElement(element: Element, tag: String, bean: Any, filter: SerializationFilter): Element { + return Element(tag).apply { XmlSerializer.serializeInto(bean, this, filter) restoreNormalOrdering(bean) element.addContent(this) @@ -245,7 +248,24 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) { } compilerArguments?.let { copyBean(it) }?.let { it.convertPathsToSystemIndependent() - buildChildElement(element, "compilerArguments", it, filter) + val compilerArgumentsXml = buildChildElement(element, "compilerArguments", it, filter) + compilerArgumentsXml.dropVersionsIfNecessary(it) + } +} + +fun CommonCompilerArguments.detectVersionAutoAdvance() { + autoAdvanceLanguageVersion = languageVersion == null + autoAdvanceApiVersion = apiVersion == null +} + +fun Element.dropVersionsIfNecessary(settings: CommonCompilerArguments) { + // Do not serialize language/api version if they correspond to the default language version + if (settings.autoAdvanceLanguageVersion) { + getOption("languageVersion")?.detach() + } + + if (settings.autoAdvanceApiVersion) { + getOption("apiVersion")?.detach() } } diff --git a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java index 3bc2d18255c..60f064fc02a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java +++ b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java @@ -58,10 +58,7 @@ import org.jetbrains.kotlin.idea.util.application.ApplicationUtilsKt; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Configurable.NoScroll{ private static final Map moduleKindDescriptions = new LinkedHashMap<>(); @@ -111,9 +108,9 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co private JPanel k2jvmPanel; private JPanel k2jsPanel; private JComboBox jvmVersionComboBox; - private JComboBox languageVersionComboBox; + private JComboBox languageVersionComboBox; private JComboBox coroutineSupportComboBox; - private JComboBox apiVersionComboBox; + private JComboBox apiVersionComboBox; private JPanel scriptPanel; private JLabel labelForOutputPrefixFile; private JLabel labelForOutputPostfixFile; @@ -145,7 +142,7 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - restrictAPIVersions(getSelectedLanguageVersion()); + restrictAPIVersions(getSelectedLanguageVersionView().getVersion()); } } ); @@ -295,15 +292,6 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co return jvmVersion != null ? jvmVersion : JvmTarget.DEFAULT.getDescription(); } - private static LanguageVersion getLanguageVersionOrDefault(@Nullable String languageVersion) { - LanguageVersion version = LanguageVersion.fromVersionString(languageVersion); - return version != null ? version : LanguageVersion.LATEST_STABLE; - } - - private static ApiVersion getApiVersionOrDefault(@Nullable String apiVersion) { - return apiVersion != null ? ApiVersion.Companion.parse(apiVersion) : ApiVersion.LATEST_STABLE; - } - private static void setupFileChooser( @NotNull JLabel label, @NotNull TextFieldWithBrowseButton fileChooser, @@ -328,15 +316,21 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co } } + private boolean isLessOrEqual(LanguageVersion version, LanguageVersion upperBound) { + return VersionComparatorUtil.compare(version.getVersionString(), upperBound.getVersionString()) <= 0; + } + @SuppressWarnings("unchecked") public void restrictAPIVersions(LanguageVersion upperBound) { - ApiVersion selectedAPIVersion = getSelectedAPIVersion(); - List permittedAPIVersions = ArraysKt.mapNotNull( + LanguageVersion selectedAPIVersion = getSelectedAPIVersionView().getVersion(); + List permittedAPIVersions = new ArrayList<>(LanguageVersion.values().length + 1); + if (isLessOrEqual(VersionView.LatestStable.INSTANCE.getVersion(), upperBound)) { + permittedAPIVersions.add(VersionView.LatestStable.INSTANCE); + } + ArraysKt.mapNotNullTo( LanguageVersion.values(), - version -> VersionComparatorUtil.compare(version.getVersionString(), upperBound.getVersionString()) <= 0 && - VersionComparatorUtil.compare(version.getVersionString(), upperBound.getVersionString()) <= 0 - ? ApiVersion.createByLanguageVersion(version) - : null + permittedAPIVersions, + version -> isLessOrEqual(version, upperBound) ? new VersionView.Specific(version) : null ); apiVersionComboBox.setModel( new DefaultComboBoxModel(permittedAPIVersions.toArray()) @@ -357,13 +351,17 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co @SuppressWarnings("unchecked") private void fillLanguageAndAPIVersionList() { + languageVersionComboBox.addItem(VersionView.LatestStable.INSTANCE); + apiVersionComboBox.addItem(VersionView.LatestStable.INSTANCE); + for (LanguageVersion version : LanguageVersion.values()) { if (!version.isStable() && !KotlinInternalMode.Instance.getEnabled()) { continue; } - languageVersionComboBox.addItem(version); - apiVersionComboBox.addItem(ApiVersion.createByLanguageVersion(version)); + VersionView.Specific specificVersion = new VersionView.Specific(version); + languageVersionComboBox.addItem(specificVersion); + apiVersionComboBox.addItem(specificVersion); } languageVersionComboBox.setRenderer(new DescriptionListCellRenderer()); apiVersionComboBox.setRenderer(new DescriptionListCellRenderer()); @@ -429,8 +427,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co @Override public boolean isModified() { return ComparingUtils.isModified(reportWarningsCheckBox, !commonCompilerArguments.getSuppressWarnings()) || - !getSelectedLanguageVersion().equals(getLanguageVersionOrDefault(commonCompilerArguments.getLanguageVersion())) || - !getSelectedAPIVersion().equals(getApiVersionOrDefault(commonCompilerArguments.getApiVersion())) || + !getSelectedLanguageVersionView().equals(KotlinFacetSettingsKt.getLanguageVersionView(commonCompilerArguments)) || + !getSelectedAPIVersionView().equals(KotlinFacetSettingsKt.getApiVersionView(commonCompilerArguments)) || !coroutineSupportComboBox.getSelectedItem().equals(CoroutineSupport.byCompilerArguments(commonCompilerArguments)) || ComparingUtils.isModified(additionalArgsOptionsField, compilerSettings.getAdditionalArguments()) || ComparingUtils.isModified(scriptTemplatesField, compilerSettings.getScriptTemplates()) || @@ -467,15 +465,15 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co } @NotNull - public LanguageVersion getSelectedLanguageVersion() { + public VersionView getSelectedLanguageVersionView() { Object item = languageVersionComboBox.getSelectedItem(); - return item != null ? (LanguageVersion) item : LanguageVersion.LATEST_STABLE; + return item != null ? (VersionView) item : VersionView.LatestStable.INSTANCE; } @NotNull - private ApiVersion getSelectedAPIVersion() { + private VersionView getSelectedAPIVersionView() { Object item = apiVersionComboBox.getSelectedItem(); - return item != null ? (ApiVersion) item : ApiVersion.LATEST_STABLE; + return item != null ? (VersionView) item : VersionView.LatestStable.INSTANCE; } public void applyTo( @@ -486,8 +484,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co ) throws ConfigurationException { if (isProjectSettings) { boolean shouldInvalidateCaches = - commonCompilerArguments.getLanguageVersion() != getSelectedLanguageVersion().getVersionString() || - commonCompilerArguments.getApiVersion() != getSelectedAPIVersion().getVersionString() || + !getSelectedLanguageVersionView().equals(KotlinFacetSettingsKt.getLanguageVersionView(commonCompilerArguments)) || + !getSelectedAPIVersionView().equals(KotlinFacetSettingsKt.getApiVersionView(commonCompilerArguments)) || !coroutineSupportComboBox.getSelectedItem().equals(CoroutineSupport.byCompilerArguments(commonCompilerArguments)); if (shouldInvalidateCaches) { @@ -504,8 +502,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co } commonCompilerArguments.setSuppressWarnings(!reportWarningsCheckBox.isSelected()); - commonCompilerArguments.setLanguageVersion(getSelectedLanguageVersion().getVersionString()); - commonCompilerArguments.setApiVersion(getSelectedAPIVersion().getVersionString()); + KotlinFacetSettingsKt.setLanguageVersionView(commonCompilerArguments, getSelectedLanguageVersionView()); + KotlinFacetSettingsKt.setApiVersionView(commonCompilerArguments, getSelectedAPIVersionView()); switch ((LanguageFeature.State) coroutineSupportComboBox.getSelectedItem()) { case ENABLED: @@ -564,9 +562,9 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co @Override public void reset() { reportWarningsCheckBox.setSelected(!commonCompilerArguments.getSuppressWarnings()); - languageVersionComboBox.setSelectedItem(getLanguageVersionOrDefault(commonCompilerArguments.getLanguageVersion())); - apiVersionComboBox.setSelectedItem(getApiVersionOrDefault(commonCompilerArguments.getApiVersion())); - restrictAPIVersions(getSelectedLanguageVersion()); + languageVersionComboBox.setSelectedItem(KotlinFacetSettingsKt.getLanguageVersionView(commonCompilerArguments)); + restrictAPIVersions(getSelectedLanguageVersionView().getVersion()); + apiVersionComboBox.setSelectedItem(KotlinFacetSettingsKt.getApiVersionView(commonCompilerArguments)); coroutineSupportComboBox.setSelectedItem(CoroutineSupport.byCompilerArguments(commonCompilerArguments)); additionalArgsOptionsField.setText(compilerSettings.getAdditionalArguments()); scriptTemplatesField.setText(compilerSettings.getScriptTemplates()); diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.kt index e7dc76452d6..8d3df980728 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithLibraryConfigurator.kt @@ -29,11 +29,9 @@ import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.psi.PsiElement import org.jetbrains.annotations.Contract -import org.jetbrains.kotlin.config.ApiVersion -import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider -import org.jetbrains.kotlin.config.LanguageFeature -import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.idea.KotlinPluginUtil +import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder import org.jetbrains.kotlin.idea.facet.getRuntimeLibraryVersion import org.jetbrains.kotlin.idea.framework.ui.CreateLibraryDialogWithModules import org.jetbrains.kotlin.idea.framework.ui.FileUIUtils @@ -112,6 +110,11 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj configureKotlinSettings(modulesToConfigure) + KotlinCommonCompilerArgumentsHolder.getInstance(project).update { + languageVersionView = VersionView.Specific(LanguageVersion.LATEST_STABLE) + apiVersionView = VersionView.Specific(LanguageVersion.LATEST_STABLE) + } + collector.showNotification() } diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt index 41070fa3641..8227d2e1b37 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt @@ -244,7 +244,7 @@ class KotlinFacetEditorGeneralTab( private fun restrictAPIVersions() { with(editor.compilerConfigurable) { - restrictAPIVersions(selectedLanguageVersion) + restrictAPIVersions(selectedLanguageVersionView.version) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/framework/CustomLibraryDescriptorWithDeferredConfig.kt b/idea/src/org/jetbrains/kotlin/idea/framework/CustomLibraryDescriptorWithDeferredConfig.kt index 3383b952041..23376ddb30a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/framework/CustomLibraryDescriptorWithDeferredConfig.kt +++ b/idea/src/org/jetbrains/kotlin/idea/framework/CustomLibraryDescriptorWithDeferredConfig.kt @@ -31,6 +31,11 @@ import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VirtualFile +import org.jetbrains.kotlin.config.LanguageVersion +import org.jetbrains.kotlin.config.VersionView +import org.jetbrains.kotlin.config.apiVersionView +import org.jetbrains.kotlin.config.languageVersionView +import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder import org.jetbrains.kotlin.idea.configuration.KotlinWithLibraryConfigurator import org.jetbrains.kotlin.idea.configuration.KotlinWithLibraryConfigurator.FileState.COPY import org.jetbrains.kotlin.idea.configuration.KotlinWithLibraryConfigurator.FileState.DO_NOT_COPY @@ -96,6 +101,11 @@ abstract class CustomLibraryDescriptorWithDeferredConfig configureKotlinSettings(module.project, rootModel.sdk) + KotlinCommonCompilerArgumentsHolder.getInstance(module.project).update { + languageVersionView = VersionView.Specific(LanguageVersion.LATEST_STABLE) + apiVersionView = VersionView.Specific(LanguageVersion.LATEST_STABLE) + } + collector.showNotification() } finally { diff --git a/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/.idea/compiler.xml b/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/compiler.xml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/.idea/compiler.xml rename to idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/compiler.xml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/.idea/copyright/profiles_settings.xml b/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/copyright/profiles_settings.xml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/.idea/copyright/profiles_settings.xml rename to idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/copyright/profiles_settings.xml diff --git a/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/kotlinc.xml b/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/kotlinc.xml new file mode 100644 index 00000000000..22d8d323966 --- /dev/null +++ b/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/kotlinc.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/.idea/libraries/KotlinJavaRuntime.xml b/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/libraries/KotlinJavaRuntime.xml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/.idea/libraries/KotlinJavaRuntime.xml rename to idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/libraries/KotlinJavaRuntime.xml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/.idea/misc.xml b/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/misc.xml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/.idea/misc.xml rename to idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/misc.xml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/.idea/modules.xml b/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/modules.xml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/.idea/modules.xml rename to idea/testData/configuration/dropKotlincOnVersionAutoAdvance/.idea/modules.xml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/lib/kotlin-runtime.jar b/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/lib/kotlin-runtime.jar similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/lib/kotlin-runtime.jar rename to idea/testData/configuration/dropKotlincOnVersionAutoAdvance/lib/kotlin-runtime.jar diff --git a/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/module.iml b/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/module.iml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/module.iml rename to idea/testData/configuration/dropKotlincOnVersionAutoAdvance/module.iml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/src/foo.kt b/idea/testData/configuration/dropKotlincOnVersionAutoAdvance/src/foo.kt similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsLatestRuntime/src/foo.kt rename to idea/testData/configuration/dropKotlincOnVersionAutoAdvance/src/foo.kt diff --git a/idea/testData/configuration/kotlincExistsNoSettingsRuntime10/.idea/compiler.xml b/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/.idea/compiler.xml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsRuntime10/.idea/compiler.xml rename to idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/.idea/compiler.xml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsRuntime10/.idea/copyright/profiles_settings.xml b/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/.idea/copyright/profiles_settings.xml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsRuntime10/.idea/copyright/profiles_settings.xml rename to idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/.idea/copyright/profiles_settings.xml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsRuntime10/.idea/libraries/KotlinJavaRuntime.xml b/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/.idea/libraries/KotlinJavaRuntime.xml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsRuntime10/.idea/libraries/KotlinJavaRuntime.xml rename to idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/.idea/libraries/KotlinJavaRuntime.xml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsRuntime10/.idea/misc.xml b/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/.idea/misc.xml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsRuntime10/.idea/misc.xml rename to idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/.idea/misc.xml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsRuntime10/.idea/modules.xml b/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/.idea/modules.xml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsRuntime10/.idea/modules.xml rename to idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/.idea/modules.xml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/lib/kotlin-runtime.jar b/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/lib/kotlin-runtime.jar new file mode 100644 index 00000000000..a4ef023c369 Binary files /dev/null and b/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/lib/kotlin-runtime.jar differ diff --git a/idea/testData/configuration/kotlincExistsNoSettingsRuntime10/module.iml b/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/module.iml similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsRuntime10/module.iml rename to idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/module.iml diff --git a/idea/testData/configuration/kotlincExistsNoSettingsRuntime10/src/foo.kt b/idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/src/foo.kt similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsRuntime10/src/foo.kt rename to idea/testData/configuration/kotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance/src/foo.kt diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/compiler.xml b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/compiler.xml new file mode 100644 index 00000000000..1c358218b27 --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/copyright/profiles_settings.xml b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000000..e7bedf3377d --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/libraries/KotlinJavaRuntime.xml b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/libraries/KotlinJavaRuntime.xml new file mode 100644 index 00000000000..bcc4ed94e22 --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/libraries/KotlinJavaRuntime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/misc.xml b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/misc.xml new file mode 100644 index 00000000000..5a967a62c8a --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/modules.xml b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/modules.xml new file mode 100644 index 00000000000..83db3b6328a --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/lib/kotlin-runtime.jar b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/lib/kotlin-runtime.jar new file mode 100644 index 00000000000..a4ef023c369 Binary files /dev/null and b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/lib/kotlin-runtime.jar differ diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/module.iml b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/module.iml new file mode 100644 index 00000000000..94371e52a2a --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/module.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/src/foo.kt b/idea/testData/configuration/noKotlincExistsNoSettingsLatestRuntime/src/foo.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/compiler.xml b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/compiler.xml new file mode 100644 index 00000000000..1c358218b27 --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/copyright/profiles_settings.xml b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000000..e7bedf3377d --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/libraries/KotlinJavaRuntime.xml b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/libraries/KotlinJavaRuntime.xml new file mode 100644 index 00000000000..bcc4ed94e22 --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/libraries/KotlinJavaRuntime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/misc.xml b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/misc.xml new file mode 100644 index 00000000000..5a967a62c8a --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/modules.xml b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/modules.xml new file mode 100644 index 00000000000..83db3b6328a --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/kotlincExistsNoSettingsRuntime10/lib/kotlin-runtime.jar b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/lib/kotlin-runtime.jar similarity index 100% rename from idea/testData/configuration/kotlincExistsNoSettingsRuntime10/lib/kotlin-runtime.jar rename to idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/lib/kotlin-runtime.jar diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/module.iml b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/module.iml new file mode 100644 index 00000000000..94371e52a2a --- /dev/null +++ b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/module.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/src/foo.kt b/idea/testData/configuration/noKotlincExistsNoSettingsRuntime10/src/foo.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt index c3e62833af0..5aa77c185b2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinInTempDirTest.kt @@ -48,16 +48,16 @@ class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinTest() { } @Throws(IOException::class) - fun testKotlincExistsNoSettingsRuntime10() { + fun testNoKotlincExistsNoSettingsRuntime10() { val application = ApplicationManager.getApplication() as ApplicationImpl application.doNotSave(false) Assert.assertEquals(LanguageVersion.KOTLIN_1_0, module.languageVersionSettings.languageVersion) Assert.assertEquals(LanguageVersion.KOTLIN_1_0, myProject.getLanguageVersionSettings(null).languageVersion) application.saveAll() - Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") != null) + Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") == null) } - fun testKotlincExistsNoSettingsLatestRuntime() { + fun testNoKotlincExistsNoSettingsLatestRuntime() { val application = ApplicationManager.getApplication() as ApplicationImpl application.doNotSave(false) Assert.assertEquals(LanguageVersion.LATEST_STABLE, module.languageVersionSettings.languageVersion) @@ -66,6 +66,31 @@ class ConfigureKotlinInTempDirTest : AbstractConfigureKotlinTest() { Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") == null) } + fun testKotlincExistsNoSettingsLatestRuntimeNoVersionAutoAdvance() { + val application = ApplicationManager.getApplication() as ApplicationImpl + application.doNotSave(false) + Assert.assertEquals(LanguageVersion.LATEST_STABLE, module.languageVersionSettings.languageVersion) + Assert.assertEquals(LanguageVersion.LATEST_STABLE, myProject.getLanguageVersionSettings(null).languageVersion) + KotlinCommonCompilerArgumentsHolder.getInstance(project).update { + autoAdvanceLanguageVersion = false + autoAdvanceApiVersion = false + } + application.saveAll() + Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") != null) + } + + fun testDropKotlincOnVersionAutoAdvance() { + val application = ApplicationManager.getApplication() as ApplicationImpl + application.doNotSave(false) + Assert.assertEquals(LanguageVersion.LATEST_STABLE, module.languageVersionSettings.languageVersion) + KotlinCommonCompilerArgumentsHolder.getInstance(project).update { + autoAdvanceLanguageVersion = true + autoAdvanceApiVersion = true + } + application.saveAll() + Assert.assertTrue(project.baseDir.findFileByRelativePath(".idea/kotlinc.xml") == null) + } + fun testProject106InconsistentVersionInConfig() { val settings = KotlinFacetSettingsProvider.getInstance(myProject).getInitializedSettings(module) Assert.assertEquals(false, settings.useProjectSettings)