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