From 8ca5d3b6f9b3600f10be62fe6510b99e17969135 Mon Sep 17 00:00:00 2001 From: Pavel Kirpichenkov Date: Thu, 4 Jun 2020 18:08:57 +0300 Subject: [PATCH] Update library to source analysis mode configuration Persist analysis flag in the same xml where anchor mapping reside instead of using properties. This makes it possible to save config in VCS. #KT-24309 In Progress --- .../KotlinLibraryToSourceAnalysisComponent.kt | 52 +++++++++++++++++-- idea/resources/META-INF/plugin-common.xml | 2 + 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinLibraryToSourceAnalysisComponent.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinLibraryToSourceAnalysisComponent.kt index 0960c2ec51b..b26c3f2dd6a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinLibraryToSourceAnalysisComponent.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/KotlinLibraryToSourceAnalysisComponent.kt @@ -5,20 +5,62 @@ package org.jetbrains.kotlin.idea.project -import com.intellij.ide.util.PropertiesComponent +import com.intellij.openapi.components.PersistentStateComponent +import com.intellij.openapi.components.ServiceManager +import com.intellij.openapi.components.State +import com.intellij.openapi.components.Storage import com.intellij.openapi.project.Project +import com.intellij.util.xmlb.Converter +import com.intellij.util.xmlb.XmlSerializerUtil +import com.intellij.util.xmlb.annotations.OptionTag +import java.util.concurrent.atomic.AtomicBoolean object KotlinLibraryToSourceAnalysisComponent { - private const val libraryToSourceAnalysisOption = "kotlin.library.to.source.analysis" - @JvmStatic fun setState(project: Project, isEnabled: Boolean) { - PropertiesComponent.getInstance(project).setValue(libraryToSourceAnalysisOption, isEnabled, false) + KotlinLibraryToSourceAnalysisStateComponent.getInstance(project).setEnabled(isEnabled) } @JvmStatic fun isEnabled(project: Project): Boolean = - PropertiesComponent.getInstance(project).getBoolean(libraryToSourceAnalysisOption) + KotlinLibraryToSourceAnalysisStateComponent.getInstance(project).isEnabled.get() +} + +@State(name = "LibraryToSourceAnalysisState", storages = [Storage("anchors.xml")]) +class KotlinLibraryToSourceAnalysisStateComponent : PersistentStateComponent { + @JvmField + @OptionTag(converter = AtomicBooleanXmlbConverter::class) + var isEnabled: AtomicBoolean = AtomicBoolean(false) + + override fun getState(): KotlinLibraryToSourceAnalysisStateComponent? = this + + override fun loadState(state: KotlinLibraryToSourceAnalysisStateComponent) { + XmlSerializerUtil.copyBean(state, this) + } + + fun setEnabled(newState: Boolean) { + isEnabled.getAndSet(newState) + } + + companion object { + fun getInstance(project: Project): KotlinLibraryToSourceAnalysisStateComponent = + ServiceManager.getService(project, KotlinLibraryToSourceAnalysisStateComponent::class.java) + } +} + +class AtomicBooleanXmlbConverter : Converter() { + override fun toString(value: AtomicBoolean): String? = if (value.get()) TRUE else FALSE + + override fun fromString(value: String): AtomicBoolean? = when (value) { + TRUE -> AtomicBoolean(true) + FALSE -> AtomicBoolean(false) + else -> null + } + + companion object { + private const val TRUE = "true" + private const val FALSE = "false" + } } val Project.libraryToSourceAnalysisEnabled: Boolean diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml index b2e295ccdb0..b66ce3553aa 100644 --- a/idea/resources/META-INF/plugin-common.xml +++ b/idea/resources/META-INF/plugin-common.xml @@ -194,6 +194,8 @@ + +