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 95d55226229..ca51c0a3756 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 @@ -76,6 +76,12 @@ class KotlinCompilerInfo { } class KotlinFacetSettings { + companion object { + // Increment this when making serialization-incompatible changes to configuration data + val CURRENT_VERSION = 1 + val DEFAULT_VERSION = 0 + } + var versionInfo = KotlinVersionInfo() var compilerInfo = KotlinCompilerInfo() } diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetConfiguration.kt b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetConfiguration.kt index 8414e2496fd..239062b6180 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetConfiguration.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetConfiguration.kt @@ -20,36 +20,46 @@ import com.intellij.facet.FacetConfiguration import com.intellij.facet.ui.FacetEditorContext import com.intellij.facet.ui.FacetEditorTab import com.intellij.facet.ui.FacetValidatorsManager -import com.intellij.openapi.components.PersistentStateComponent +import com.intellij.util.xmlb.XmlSerializer +import org.jdom.DataConversionException import org.jdom.Element import org.jetbrains.kotlin.config.KotlinFacetSettings -class KotlinFacetConfiguration : FacetConfiguration, PersistentStateComponent { - private var settings = KotlinFacetSettings() +class KotlinFacetConfiguration : FacetConfiguration { + var settings = KotlinFacetSettings() + private set @Suppress("OverridingDeprecatedMember") - override fun readExternal(element: Element?) { - + override fun readExternal(element: Element) { + val version = + try { + element.getAttribute("version")?.intValue + } + catch(e: DataConversionException) { + null + } ?: KotlinFacetSettings.DEFAULT_VERSION + // Reset facet configuration if versions don't match + if (version == KotlinFacetSettings.CURRENT_VERSION) { + XmlSerializer.deserializeInto(settings, element) + } + else { + settings = KotlinFacetSettings() + } } @Suppress("OverridingDeprecatedMember") - override fun writeExternal(element: Element?) { - + override fun writeExternal(element: Element) { + element.setAttribute("version", KotlinFacetSettings.CURRENT_VERSION.toString()) + XmlSerializer.serializeInto(settings, element) } - override fun loadState(state: KotlinFacetSettings) { - this.settings = state - } - - override fun getState() = settings - override fun createEditorTabs( editorContext: FacetEditorContext, validatorsManager: FacetValidatorsManager ): Array { - state.initializeIfNeeded(editorContext.module, editorContext.rootModel) + settings.initializeIfNeeded(editorContext.module, editorContext.rootModel) - val compilerTab = KotlinFacetEditorCompilerTab(state.compilerInfo, editorContext) + val compilerTab = KotlinFacetEditorCompilerTab(settings.compilerInfo, editorContext) val generalTab = KotlinFacetEditorGeneralTab(this, editorContext, validatorsManager, compilerTab) val tabs = arrayListOf(generalTab, compilerTab) KotlinFacetConfigurationExtension.EP_NAME.extensions.flatMapTo(tabs) { it.createEditorTabs(editorContext, validatorsManager) } diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt index 407cf37f311..d25b341dc97 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt @@ -105,7 +105,7 @@ class KotlinFacetEditorGeneralTab( } override fun isModified(): Boolean { - return with(configuration.state.versionInfo) { + return with(configuration.settings.versionInfo) { languageVersionComboBox.selectedItem != languageLevel || targetPlatformComboBox.selectedItem != targetPlatformKind || apiVersionComboBox.selectedItem != apiLevel @@ -113,7 +113,7 @@ class KotlinFacetEditorGeneralTab( } override fun reset() { - with(configuration.state.versionInfo) { + with(configuration.settings.versionInfo) { languageVersionComboBox.selectedItem = languageLevel targetPlatformComboBox.selectedItem = targetPlatformKind apiVersionComboBox.selectedItem = apiLevel @@ -121,7 +121,7 @@ class KotlinFacetEditorGeneralTab( } override fun apply() { - with(configuration.state.versionInfo) { + with(configuration.settings.versionInfo) { languageLevel = languageVersionComboBox.selectedItem as LanguageVersion? targetPlatformKind = targetPlatformComboBox.selectedItem as TargetPlatformKind<*>? apiLevel = apiVersionComboBox.selectedItem as LanguageVersion? diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetSettingsProviderImpl.kt b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetSettingsProviderImpl.kt index 8913114f224..b85903fb070 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetSettingsProviderImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetSettingsProviderImpl.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider class KotlinFacetSettingsProviderImpl : KotlinFacetSettingsProvider { override fun getSettings(module: Module): KotlinFacetSettings { - val settings = KotlinFacet.get(module)?.configuration?.state ?: KotlinFacetSettings() + val settings = KotlinFacet.get(module)?.configuration?.settings ?: KotlinFacetSettings() settings.initializeIfNeeded(module, null) return settings }