mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
generic SchemeManagerIprProvider
This commit is contained in:
+5
-7
@@ -195,13 +195,11 @@ internal class ProjectInspectionManagerTest {
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="Convert2Diamond" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
</profile>
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="Convert2Diamond" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
</profile>
|
||||
<version value="1.0" />
|
||||
</component>
|
||||
</project>""".trimIndent())
|
||||
assertThat(projectFile.parent.resolve(".inspectionProfiles")).doesNotExist()
|
||||
|
||||
+4
-12
@@ -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<InspectionProfileImpl>,
|
||||
@@ -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()
|
||||
|
||||
|
||||
+3
-3
@@ -24,8 +24,8 @@ import com.intellij.util.toByteArray
|
||||
import org.jdom.Element
|
||||
import java.io.InputStream
|
||||
|
||||
class SchemeManagerIprProvider : StreamProvider {
|
||||
var nameToData = ContainerUtil.newConcurrentMap<String, ByteArray>()
|
||||
class SchemeManagerIprProvider(private val subStateTagName: String) : StreamProvider {
|
||||
private val nameToData = ContainerUtil.newConcurrentMap<String, ByteArray>()
|
||||
|
||||
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") {
|
||||
|
||||
@@ -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<out T : Scheme>(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
|
||||
}
|
||||
|
||||
@@ -79,7 +79,13 @@ class CopyrightManager(private val project: Project, schemeManagerFactory: Schem
|
||||
val scopeToCopyright = LinkedHashMap<String, String>()
|
||||
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<CopyrightProfile>, SchemeWrapper<CopyrightProfile>>() {
|
||||
override fun createScheme(dataHolder: SchemeDataHolder<SchemeWrapper<CopyrightProfile>>,
|
||||
@@ -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<SchemeWrapper<CopyrightProfile>>,
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user