Kotlin Facet: Track configuration version

This commit is contained in:
Alexey Sedunov
2016-11-10 19:49:38 +03:00
parent 27aaac5a96
commit 4613eed406
4 changed files with 35 additions and 19 deletions
@@ -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()
}
@@ -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<KotlinFacetSettings> {
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<FacetEditorTab> {
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) }
@@ -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?
@@ -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
}