Kotlin Facet: Track configuration version
This commit is contained in:
@@ -76,6 +76,12 @@ class KotlinCompilerInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class KotlinFacetSettings {
|
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 versionInfo = KotlinVersionInfo()
|
||||||
var compilerInfo = KotlinCompilerInfo()
|
var compilerInfo = KotlinCompilerInfo()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,36 +20,46 @@ import com.intellij.facet.FacetConfiguration
|
|||||||
import com.intellij.facet.ui.FacetEditorContext
|
import com.intellij.facet.ui.FacetEditorContext
|
||||||
import com.intellij.facet.ui.FacetEditorTab
|
import com.intellij.facet.ui.FacetEditorTab
|
||||||
import com.intellij.facet.ui.FacetValidatorsManager
|
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.jdom.Element
|
||||||
import org.jetbrains.kotlin.config.KotlinFacetSettings
|
import org.jetbrains.kotlin.config.KotlinFacetSettings
|
||||||
|
|
||||||
class KotlinFacetConfiguration : FacetConfiguration, PersistentStateComponent<KotlinFacetSettings> {
|
class KotlinFacetConfiguration : FacetConfiguration {
|
||||||
private var settings = KotlinFacetSettings()
|
var settings = KotlinFacetSettings()
|
||||||
|
private set
|
||||||
|
|
||||||
@Suppress("OverridingDeprecatedMember")
|
@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")
|
@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(
|
override fun createEditorTabs(
|
||||||
editorContext: FacetEditorContext,
|
editorContext: FacetEditorContext,
|
||||||
validatorsManager: FacetValidatorsManager
|
validatorsManager: FacetValidatorsManager
|
||||||
): Array<FacetEditorTab> {
|
): 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 generalTab = KotlinFacetEditorGeneralTab(this, editorContext, validatorsManager, compilerTab)
|
||||||
val tabs = arrayListOf(generalTab, compilerTab)
|
val tabs = arrayListOf(generalTab, compilerTab)
|
||||||
KotlinFacetConfigurationExtension.EP_NAME.extensions.flatMapTo(tabs) { it.createEditorTabs(editorContext, validatorsManager) }
|
KotlinFacetConfigurationExtension.EP_NAME.extensions.flatMapTo(tabs) { it.createEditorTabs(editorContext, validatorsManager) }
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun isModified(): Boolean {
|
override fun isModified(): Boolean {
|
||||||
return with(configuration.state.versionInfo) {
|
return with(configuration.settings.versionInfo) {
|
||||||
languageVersionComboBox.selectedItem != languageLevel
|
languageVersionComboBox.selectedItem != languageLevel
|
||||||
|| targetPlatformComboBox.selectedItem != targetPlatformKind
|
|| targetPlatformComboBox.selectedItem != targetPlatformKind
|
||||||
|| apiVersionComboBox.selectedItem != apiLevel
|
|| apiVersionComboBox.selectedItem != apiLevel
|
||||||
@@ -113,7 +113,7 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun reset() {
|
override fun reset() {
|
||||||
with(configuration.state.versionInfo) {
|
with(configuration.settings.versionInfo) {
|
||||||
languageVersionComboBox.selectedItem = languageLevel
|
languageVersionComboBox.selectedItem = languageLevel
|
||||||
targetPlatformComboBox.selectedItem = targetPlatformKind
|
targetPlatformComboBox.selectedItem = targetPlatformKind
|
||||||
apiVersionComboBox.selectedItem = apiLevel
|
apiVersionComboBox.selectedItem = apiLevel
|
||||||
@@ -121,7 +121,7 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun apply() {
|
override fun apply() {
|
||||||
with(configuration.state.versionInfo) {
|
with(configuration.settings.versionInfo) {
|
||||||
languageLevel = languageVersionComboBox.selectedItem as LanguageVersion?
|
languageLevel = languageVersionComboBox.selectedItem as LanguageVersion?
|
||||||
targetPlatformKind = targetPlatformComboBox.selectedItem as TargetPlatformKind<*>?
|
targetPlatformKind = targetPlatformComboBox.selectedItem as TargetPlatformKind<*>?
|
||||||
apiLevel = apiVersionComboBox.selectedItem as LanguageVersion?
|
apiLevel = apiVersionComboBox.selectedItem as LanguageVersion?
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
|||||||
|
|
||||||
class KotlinFacetSettingsProviderImpl : KotlinFacetSettingsProvider {
|
class KotlinFacetSettingsProviderImpl : KotlinFacetSettingsProvider {
|
||||||
override fun getSettings(module: Module): KotlinFacetSettings {
|
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)
|
settings.initializeIfNeeded(module, null)
|
||||||
return settings
|
return settings
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user