diff --git a/platform/configuration-store-impl/src/ComponentStoreImpl.kt b/platform/configuration-store-impl/src/ComponentStoreImpl.kt index 61cff276d3cc..fc068eed1906 100644 --- a/platform/configuration-store-impl/src/ComponentStoreImpl.kt +++ b/platform/configuration-store-impl/src/ComponentStoreImpl.kt @@ -24,10 +24,10 @@ import com.intellij.openapi.components.* import com.intellij.openapi.components.StateStorage.SaveSession import com.intellij.openapi.components.StateStorageChooserEx.Resolution import com.intellij.openapi.components.impl.ComponentManagerImpl -import com.intellij.openapi.components.impl.stores.DefaultStateSerializer import com.intellij.openapi.components.impl.stores.IComponentStore import com.intellij.openapi.components.impl.stores.StoreUtil import com.intellij.openapi.components.impl.stores.UnknownMacroNotification +import com.intellij.openapi.components.impl.stores.deserializeState import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.debug import com.intellij.openapi.progress.ProcessCanceledException @@ -319,7 +319,7 @@ abstract class ComponentStoreImpl : IComponentStore { if (changedStorages != null && changedStorages.contains(storage)) { // state will be null if file deleted // we must create empty (initial) state to reinit component - state = DefaultStateSerializer.deserializeState(Element("state"), stateClass, null)!! + state = deserializeState(Element("state"), stateClass, null)!! } else { continue @@ -368,7 +368,7 @@ abstract class ComponentStoreImpl : IComponentStore { try { val documentElement = JDOMXIncluder.resolve(JDOMUtil.loadDocument(url), url.toExternalForm()).detachRootElement() getPathMacroManagerForDefaults()?.expandPaths(documentElement) - return DefaultStateSerializer.deserializeState(documentElement, stateClass, null) + return deserializeState(documentElement, stateClass, null) } catch (e: Throwable) { throw IOException("Error loading default state from $url", e) @@ -500,14 +500,7 @@ internal fun executeSave(session: SaveSession, readonlyFiles: MutableList): Storage { - for (storage in storages) { - if (!storage.deprecated) { - return storage - } - } - throw AssertionError("All storages are deprecated") -} +private fun findNonDeprecated(storages: Array) = storages.firstOrNull { !it.deprecated } ?: throw AssertionError("All storages are deprecated") enum class StateLoadPolicy { LOAD, LOAD_ONLY_DEFAULT, NOT_LOAD diff --git a/platform/platform-impl/src/com/intellij/configurationStore/StateStorageBase.kt b/platform/platform-impl/src/com/intellij/configurationStore/StateStorageBase.kt index 3a6b50c22f97..3f96cbcef213 100644 --- a/platform/platform-impl/src/com/intellij/configurationStore/StateStorageBase.kt +++ b/platform/platform-impl/src/com/intellij/configurationStore/StateStorageBase.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,6 @@ package com.intellij.configurationStore import com.intellij.openapi.components.StateStorage import com.intellij.openapi.components.impl.stores.BatchUpdateListener -import com.intellij.openapi.components.impl.stores.DefaultStateSerializer import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.debug import com.intellij.util.messages.MessageBus @@ -40,7 +39,7 @@ abstract class StateStorageBase : StateStorage { } open fun deserializeState(serializedState: Element?, stateClass: Class, mergeInto: S?): S? { - return DefaultStateSerializer.deserializeState(serializedState, stateClass, mergeInto) + return com.intellij.openapi.components.impl.stores.deserializeState(serializedState, stateClass, mergeInto) } abstract fun getSerializedState(storageData: T, component: Any?, componentName: String, archive: Boolean = true): Element? diff --git a/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java b/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java index e10b317e7946..5757dac6df9d 100644 --- a/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java +++ b/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java @@ -18,7 +18,7 @@ package com.intellij.core; import com.intellij.mock.MockProject; import com.intellij.openapi.components.ComponentManager; import com.intellij.openapi.components.PathMacroManager; -import com.intellij.openapi.components.impl.stores.DefaultStateSerializer; +import com.intellij.openapi.components.impl.stores.DefaultStateSerializerKt; import com.intellij.openapi.components.impl.stores.DirectoryStorageUtil; import com.intellij.openapi.components.impl.stores.FileStorageCoreUtil; import com.intellij.openapi.module.ModuleManager; @@ -81,7 +81,7 @@ public class CoreProjectLoader { VirtualFile libraries = dotIdea.findChild("libraries"); if (libraries != null) { Map data = DirectoryStorageUtil.loadFrom(libraries, PathMacroManager.getInstance(project)); - Element libraryTable = DefaultStateSerializer.deserializeState(DirectoryStorageUtil.getCompositeState(data, new ProjectLibraryTable.LibraryStateSplitter()), Element.class, null); + Element libraryTable = DefaultStateSerializerKt.deserializeState(DirectoryStorageUtil.getCompositeState(data, new ProjectLibraryTable.LibraryStateSplitter()), Element.class, null); ((LibraryTableBase) ProjectLibraryTable.getInstance(project)).loadState(libraryTable); } diff --git a/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DefaultStateSerializer.kt b/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DefaultStateSerializer.kt index 89097342ab6a..319a64e3c1de 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DefaultStateSerializer.kt +++ b/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DefaultStateSerializer.kt @@ -22,32 +22,32 @@ import com.intellij.util.ReflectionUtil import com.intellij.util.xmlb.XmlSerializer import org.jdom.Element -object DefaultStateSerializer { - private val LOG = Logger.getInstance(DefaultStateSerializer::class.java) +private val LOG = Logger.getInstance("#com.intellij.openapi.components.impl.stores.DefaultStateSerializer") - fun deserializeState(stateElement: Element?, stateClass: Class, mergeInto: T?): T? { - if (stateElement == null) { - return mergeInto - } - else if (stateClass == Element::class.java) { - return stateElement as T? - } - else if (JDOMExternalizable::class.java.isAssignableFrom(stateClass)) { - if (mergeInto != null) { - val elementText = JDOMUtil.writeElement(stateElement) - LOG.error("State is " + stateClass.name + ", merge into is " + mergeInto.toString() + ", state element text is " + elementText) - } - - val t = ReflectionUtil.newInstance(stateClass) - (t as JDOMExternalizable).readExternal(stateElement) - return t - } - else if (mergeInto == null) { - return XmlSerializer.deserialize(stateElement, stateClass) - } - else { - XmlSerializer.deserializeInto(mergeInto, stateElement) - return mergeInto - } +fun deserializeState(stateElement: Element?, stateClass: Class, mergeInto: T?): T? { + @Suppress("DEPRECATION") + if (stateElement == null) { + return mergeInto } -} + else if (stateClass == Element::class.java) { + @Suppress("UNCHECKED_CAST") + return stateElement as T? + } + else if (JDOMExternalizable::class.java.isAssignableFrom(stateClass)) { + if (mergeInto != null) { + val elementText = JDOMUtil.writeElement(stateElement) + LOG.error("State is ${stateClass.name}, merge into is ${mergeInto.toString()}, state element text is $elementText") + } + + val t = ReflectionUtil.newInstance(stateClass) + (t as JDOMExternalizable).readExternal(stateElement) + return t + } + else if (mergeInto == null) { + return XmlSerializer.deserialize(stateElement, stateClass) + } + else { + XmlSerializer.deserializeInto(mergeInto, stateElement) + return mergeInto + } +} \ No newline at end of file