From 6a041fa2b4de09a09b10e682bdc6fbf80fdc9fa4 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 31 Aug 2016 17:06:41 +0200 Subject: [PATCH] generic SchemeManagerIprProvider --- .../ex/ProjectInspectionManagerTest.kt | 12 +++--- .../ProjectInspectionProfileManager.kt | 16 ++------ .../SchemeManagerIprProvider.kt | 6 +-- .../configurationStore/scheme-impl.kt | 20 +++++++--- plugins/copyright/src/CopyrightManager.kt | 38 ++++++++----------- 5 files changed, 42 insertions(+), 50 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/ex/ProjectInspectionManagerTest.kt b/java/java-tests/testSrc/com/intellij/codeInspection/ex/ProjectInspectionManagerTest.kt index 3604f0db8139..a231b161d325 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/ex/ProjectInspectionManagerTest.kt +++ b/java/java-tests/testSrc/com/intellij/codeInspection/ex/ProjectInspectionManagerTest.kt @@ -195,13 +195,11 @@ internal class ProjectInspectionManagerTest { - - - - - + + + """.trimIndent()) assertThat(projectFile.parent.resolve(".inspectionProfiles")).doesNotExist() diff --git a/platform/analysis-impl/src/com/intellij/profile/codeInspection/ProjectInspectionProfileManager.kt b/platform/analysis-impl/src/com/intellij/profile/codeInspection/ProjectInspectionProfileManager.kt index cf06a8f296f8..69c2ad36d1ed 100644 --- a/platform/analysis-impl/src/com/intellij/profile/codeInspection/ProjectInspectionProfileManager.kt +++ b/platform/analysis-impl/src/com/intellij/profile/codeInspection/ProjectInspectionProfileManager.kt @@ -18,10 +18,7 @@ package com.intellij.profile.codeInspection import com.intellij.codeInspection.InspectionProfile import com.intellij.codeInspection.ex.InspectionProfileImpl import com.intellij.codeInspection.ex.InspectionToolRegistrar -import com.intellij.configurationStore.SchemeDataHolder -import com.intellij.configurationStore.SchemeManagerIprProvider -import com.intellij.configurationStore.digest -import com.intellij.configurationStore.wrapState +import com.intellij.configurationStore.* import com.intellij.openapi.Disposable import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.components.PersistentStateComponent @@ -94,7 +91,7 @@ class ProjectInspectionProfileManager(val project: Project, } } - private val schemeManagerIprProvider = if (project.isDirectoryBased) null else SchemeManagerIprProvider() + private val schemeManagerIprProvider = if (project.isDirectoryBased) null else SchemeManagerIprProvider("profile") override val schemeManager = schemeManagerFactory.create("inspectionProfiles", object : InspectionProfileProcessor() { override fun createScheme(dataHolder: SchemeDataHolder, @@ -223,16 +220,11 @@ class ProjectInspectionProfileManager(val project: Project, severityRegistrar.writeExternal(result) - return wrapState(result) + return wrapState(result, project) } @Synchronized override fun loadState(state: Element) { - val data = state.getChild("settings") - - schemeManagerIprProvider?.let { - it.load(data) - schemeManager.reload() - } + val data = unwrapState(state, project, schemeManagerIprProvider, schemeManager) val newState = State() diff --git a/platform/projectModel-impl/src/com/intellij/configurationStore/SchemeManagerIprProvider.kt b/platform/projectModel-impl/src/com/intellij/configurationStore/SchemeManagerIprProvider.kt index d3b8406f01df..e0d429f2f3f3 100644 --- a/platform/projectModel-impl/src/com/intellij/configurationStore/SchemeManagerIprProvider.kt +++ b/platform/projectModel-impl/src/com/intellij/configurationStore/SchemeManagerIprProvider.kt @@ -24,8 +24,8 @@ import com.intellij.util.toByteArray import org.jdom.Element import java.io.InputStream -class SchemeManagerIprProvider : StreamProvider { - var nameToData = ContainerUtil.newConcurrentMap() +class SchemeManagerIprProvider(private val subStateTagName: String) : StreamProvider { + private val nameToData = ContainerUtil.newConcurrentMap() override fun read(fileSpec: String, roamingType: RoamingType): InputStream? { val name = PathUtilRt.getFileName(fileSpec) @@ -59,7 +59,7 @@ class SchemeManagerIprProvider : StreamProvider { return } - for (profileElement in state.getChildren("profile")) { + for (profileElement in state.getChildren(subStateTagName)) { var name: String? = null for (optionElement in profileElement.getChildren("option")) { if (optionElement.getAttributeValue("name") == "myName") { diff --git a/platform/projectModel-impl/src/com/intellij/configurationStore/scheme-impl.kt b/platform/projectModel-impl/src/com/intellij/configurationStore/scheme-impl.kt index abf0dd809862..c7f249e96fae 100644 --- a/platform/projectModel-impl/src/com/intellij/configurationStore/scheme-impl.kt +++ b/platform/projectModel-impl/src/com/intellij/configurationStore/scheme-impl.kt @@ -15,10 +15,9 @@ */ package com.intellij.configurationStore -import com.intellij.openapi.options.ExternalizableSchemeAdapter -import com.intellij.openapi.options.Scheme -import com.intellij.openapi.options.SchemeProcessor -import com.intellij.openapi.options.SchemeState +import com.intellij.openapi.options.* +import com.intellij.openapi.project.Project +import com.intellij.project.isDirectoryBased import com.intellij.util.isEmpty import org.jdom.Element import java.io.OutputStream @@ -111,8 +110,17 @@ class InitializedSchemeWrapper(scheme: T, private val writer: (s override fun writeScheme() = writer(scheme) } -fun wrapState(element: Element): Element { - if (element.isEmpty()) { +fun unwrapState(element: Element, project: Project, iprAdapter: SchemeManagerIprProvider?, schemeManager: SchemeManager<*>): Element? { + val data = if (project.isDirectoryBased) element.getChild("settings") else element + iprAdapter?.let { + it.load(data) + schemeManager.reload() + } + return data +} + +fun wrapState(element: Element, project: Project): Element { + if (element.isEmpty() || !project.isDirectoryBased) { element.name = "state" return element } diff --git a/plugins/copyright/src/CopyrightManager.kt b/plugins/copyright/src/CopyrightManager.kt index 046b415dc40d..c3bb5db3d7ac 100644 --- a/plugins/copyright/src/CopyrightManager.kt +++ b/plugins/copyright/src/CopyrightManager.kt @@ -79,7 +79,13 @@ class CopyrightManager(private val project: Project, schemeManagerFactory: Schem val scopeToCopyright = LinkedHashMap() val options = Options() - private val schemeManagerIprProvider = if (project.isDirectoryBased) null else SchemeManagerIprProvider() + private val schemeWriter = { scheme: CopyrightProfile -> + val element = Element("copyright") + scheme.writeExternal(element) + if (project.isDirectoryBased) wrapScheme(element) else element + } + + private val schemeManagerIprProvider = if (project.isDirectoryBased) null else SchemeManagerIprProvider("copyright") val schemeManager = schemeManagerFactory.create("copyright", object : LazySchemeProcessor, SchemeWrapper>() { override fun createScheme(dataHolder: SchemeDataHolder>, @@ -138,24 +144,14 @@ class CopyrightManager(private val project: Project, schemeManagerFactory: Schem result.setAttribute(DEFAULT, it) } - return wrapState(result) + return wrapState(result, project) } override fun loadState(state: Element) { - val data: Element? = state.getChild("settings") + val data: Element = unwrapState(state, project, schemeManagerIprProvider, schemeManager) ?: return - schemeManagerIprProvider?.let { - it.load(data) - schemeManager.reload() - } - - if (data == null) { - return - } - - val moduleToCopyright = data.getChild(MODULE2COPYRIGHT) - if (moduleToCopyright != null) { - for (element in moduleToCopyright.getChildren(ELEMENT)) { + data.getChild(MODULE2COPYRIGHT)?.let { + for (element in it.getChildren(ELEMENT)) { scopeToCopyright.put(element.getAttributeValue(MODULE), element.getAttributeValue(COPYRIGHT)) } } @@ -257,12 +253,6 @@ private fun wrapScheme(element: Element): Element { return wrapper } -private val schemeWriter = { scheme: CopyrightProfile -> - val element = Element("copyright") - scheme.writeExternal(element) - wrapScheme(element) -} - private class LazySchemeWrapper(name: String, dataHolder: SchemeDataHolder>, private val writer: (scheme: CopyrightProfile) -> Element, @@ -273,7 +263,11 @@ private class LazySchemeWrapper(name: String, val scheme = CopyrightProfile() @Suppress("NAME_SHADOWING") val dataHolder = this.dataHolder.getAndSet(null) - val element = dataHolder.read().getChild(subStateTagName) + var element = dataHolder.read() + if (element.name != subStateTagName) { + element = element.getChild(subStateTagName) + } + scheme.readExternal(element) dataHolder.updateDigest(writer(scheme)) scheme