cleanup — move SaveSessionProducer to upper level
authorVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Mon, 7 Jan 2019 13:46:45 +0000 (14:46 +0100)
committerVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Mon, 7 Jan 2019 14:27:58 +0000 (15:27 +0100)
15 files changed:
platform/configuration-store-impl/src/ComponentStoreImpl.kt
platform/configuration-store-impl/src/DirectoryBasedStorage.kt
platform/configuration-store-impl/src/FileBasedStorage.kt
platform/configuration-store-impl/src/SaveSessionBase.kt
platform/configuration-store-impl/src/StorageVirtualFileTracker.kt
platform/configuration-store-impl/src/StoreAwareProjectManager.kt
platform/configuration-store-impl/src/XmlElementStorage.kt
platform/configuration-store-impl/src/defaultProjectElementNormalizer.kt
platform/configuration-store-impl/testSrc/DirectoryBasedStorageTest.kt
platform/lang-impl/src/com/intellij/openapi/roots/impl/storage/ClasspathStorage.java
platform/lang-impl/src/com/intellij/openapi/roots/impl/storage/ClasspathStorageProvider.java
platform/projectModel-api/src/com/intellij/configurationStore/SaveSessionProducer.kt [new file with mode: 0644]
platform/projectModel-api/src/com/intellij/openapi/components/StateStorage.kt
platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/IComponentStore.kt
plugins/eclipse/src/org/jetbrains/idea/eclipse/config/ClasspathSaveSession.java

index e21b8ddbd86a5e7a1eaff9b4f6dd1495fe94c3de..cdf51c662c556ad3d5be57482102442e60a86395 100644 (file)
@@ -8,7 +8,6 @@ import com.intellij.openapi.application.ApplicationManager
 import com.intellij.openapi.application.ex.DecodeDefaultsUtil
 import com.intellij.openapi.application.runUndoTransparentWriteAction
 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.IComponentStore
@@ -612,9 +611,9 @@ interface SaveExecutor {
 }
 
 private class SaveSessionProducerManager : SaveExecutor {
-  private val producers = LinkedHashMap<StateStorage, StateStorage.SaveSessionProducer>()
+  private val producers = LinkedHashMap<StateStorage, SaveSessionProducer>()
 
-  fun getProducer(storage: StateStorage): StateStorage.SaveSessionProducer? {
+  fun getProducer(storage: StateStorage): SaveSessionProducer? {
     var producer = producers.get(storage)
     if (producer == null) {
       producer = storage.createSaveSessionProducer() ?: return null
@@ -630,8 +629,7 @@ private class SaveSessionProducerManager : SaveExecutor {
 
     var changed = false
     for (session in producers.values) {
-      val saveSession = session.createSaveSession() ?: continue
-      executeSave(saveSession, readonlyFiles, errors)
+      executeSave(session.createSaveSession() ?: continue, readonlyFiles, errors)
       changed = true
     }
     return changed
index 7894ee130772223fdcc24af47251ffb248d23670..dba454b2389112186e6b0eede0f915cfcdcab792 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.configurationStore
 
 import com.intellij.configurationStore.schemeManager.createDir
@@ -7,7 +7,6 @@ import com.intellij.openapi.application.runUndoTransparentWriteAction
 import com.intellij.openapi.components.PathMacroSubstitutor
 import com.intellij.openapi.components.StateSplitter
 import com.intellij.openapi.components.StateSplitterEx
-import com.intellij.openapi.components.StateStorage
 import com.intellij.openapi.components.impl.stores.DirectoryStorageUtil
 import com.intellij.openapi.components.impl.stores.FileStorageCoreUtil
 import com.intellij.openapi.vfs.LocalFileSystem
@@ -32,7 +31,7 @@ abstract class DirectoryBasedStorageBase(@Suppress("DEPRECATION") protected val
 
   public override fun loadData(): StateMap = StateMap.fromMap(DirectoryStorageUtil.loadFrom(virtualFile, pathMacroSubstitutor))
 
-  override fun createSaveSessionProducer(): StateStorage.SaveSessionProducer? = null
+  override fun createSaveSessionProducer(): SaveSessionProducer? = null
 
   override fun analyzeExternalChangesAndUpdateIfNeed(componentNames: MutableSet<in String>) {
     // todo reload only changed file, compute diff
@@ -95,7 +94,7 @@ open class DirectoryBasedStorage(private val dir: Path,
     cachedVirtualFile = dir
   }
 
-  override fun createSaveSessionProducer(): StateStorage.SaveSessionProducer? = if (checkIsSavingDisabled()) null else MySaveSession(this, getStorageData())
+  override fun createSaveSessionProducer(): SaveSessionProducer? = if (checkIsSavingDisabled()) null else MySaveSession(this, getStorageData())
 
   private class MySaveSession(private val storage: DirectoryBasedStorage, private val originalStates: StateMap) : SaveSessionBase() {
     private var copiedStorageData: MutableMap<String, Any>? = null
index a6f82014c057c6563f6e743ba1ae6d244603aef0..c440a81a80bb1caea732e3b5978fe762aa161613 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.configurationStore
 
 import com.intellij.notification.Notification
@@ -8,7 +8,6 @@ import com.intellij.openapi.application.ApplicationManager
 import com.intellij.openapi.application.runUndoTransparentWriteAction
 import com.intellij.openapi.components.PathMacroSubstitutor
 import com.intellij.openapi.components.RoamingType
-import com.intellij.openapi.components.StateStorage
 import com.intellij.openapi.components.StoragePathMacros
 import com.intellij.openapi.diagnostic.debug
 import com.intellij.openapi.diagnostic.debugOrInfoIfTestMode
@@ -269,7 +268,7 @@ private fun doWrite(requestor: Any, file: VirtualFile, dataWriterOrByteArray: An
       is DataWriter -> dataWriterOrByteArray.toBufferExposingByteArray(lineSeparator)
       else -> dataWriterOrByteArray as BufferExposingByteArrayOutputStream
     }
-    throw ReadOnlyModificationException(file, object : StateStorage.SaveSession {
+    throw ReadOnlyModificationException(file, object : SaveSession {
       override fun save() {
         doWrite(requestor, file, byteArray, lineSeparator, prependXmlProlog)
       }
@@ -318,7 +317,7 @@ private fun deleteFile(file: Path, requestor: Any, virtualFile: VirtualFile?) {
       deleteFile(requestor, virtualFile)
     }
     else {
-      throw ReadOnlyModificationException(virtualFile, object : StateStorage.SaveSession {
+      throw ReadOnlyModificationException(virtualFile, object : SaveSession {
         override fun save() {
           deleteFile(requestor, virtualFile)
         }
@@ -331,4 +330,4 @@ internal fun deleteFile(requestor: Any, virtualFile: VirtualFile) {
   runUndoTransparentWriteAction { virtualFile.delete(requestor) }
 }
 
-internal class ReadOnlyModificationException(val file: VirtualFile, val session: StateStorage.SaveSession?) : RuntimeException("File is read-only: $file")
\ No newline at end of file
+internal class ReadOnlyModificationException(val file: VirtualFile, val session: SaveSession?) : RuntimeException("File is read-only: $file")
\ No newline at end of file
index 25a0c62ac34771fa4b25004e2625676dcfc7b761..d82c8315d3eef0843e02cd6a529b2d02b7f472d4 100644 (file)
@@ -1,7 +1,6 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.configurationStore
 
-import com.intellij.openapi.components.StateStorage
 import com.intellij.openapi.components.impl.stores.FileStorageCoreUtil
 import com.intellij.openapi.util.JDOMExternalizable
 import com.intellij.openapi.util.WriteExternalException
@@ -9,7 +8,7 @@ import com.intellij.openapi.vfs.LargeFileWriteRequestor
 import com.intellij.openapi.vfs.SafeWriteRequestor
 import org.jdom.Element
 
-abstract class SaveSessionBase : StateStorage.SaveSession, StateStorage.SaveSessionProducer, SafeWriteRequestor, LargeFileWriteRequestor {
+abstract class SaveSessionBase : SaveSession, SaveSessionProducer, SafeWriteRequestor, LargeFileWriteRequestor {
   final override fun setState(component: Any?, componentName: String, state: Any?) {
     if (state == null) {
       setSerializedState(componentName, null)
index a715c0dbc9fe7ead75cfad03b17068b2ca5fb722..20b22cce4497688c1317002355805d5f94e432aa 100644 (file)
@@ -1,3 +1,4 @@
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.configurationStore
 
 import com.intellij.openapi.components.StateStorage
@@ -90,7 +91,7 @@ class StorageVirtualFileTracker(private val messageBus: MessageBus) {
               }
             }
             is VFileCreateEvent -> {
-              if (storage is FileBasedStorage && event.requestor !is StateStorage.SaveSession) {
+              if (storage is FileBasedStorage && event.requestor !is SaveSession) {
                 storage.setFile(event.file, null)
               }
             }
index e63c5f7e312c46f3f4421c2cf38c676e6b95d071..4e865fb0129e97f76c44a3b447fbc8e7728fcfec 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.configurationStore
 
 import com.intellij.configurationStore.schemeManager.SchemeChangeEvent
@@ -114,7 +114,7 @@ class StoreAwareProjectManager(virtualFileManager: VirtualFileManager, progressM
           return
         }
 
-        if (event.requestor is StateStorage.SaveSession || event.requestor is StateStorage || event.requestor is ProjectManagerEx) {
+        if (event.requestor is SaveSession || event.requestor is StateStorage || event.requestor is ProjectManagerEx) {
           return
         }
 
index e09b193d8f121c1ea726a6e0994746d9cdb0e13d..bb276ce12f59f820fbd51744f1a98ccade83d04d 100644 (file)
@@ -4,7 +4,6 @@ package com.intellij.configurationStore
 import com.intellij.openapi.components.PathMacroManager
 import com.intellij.openapi.components.PathMacroSubstitutor
 import com.intellij.openapi.components.RoamingType
-import com.intellij.openapi.components.StateStorage
 import com.intellij.openapi.components.impl.stores.FileStorageCoreUtil
 import com.intellij.openapi.diagnostic.debug
 import com.intellij.openapi.diagnostic.runAndLogException
@@ -85,9 +84,9 @@ abstract class XmlElementStorage protected constructor(val fileSpec: String,
     storageDataRef.set(loadState(element))
   }
 
-  override fun createSaveSessionProducer(): StateStorage.SaveSessionProducer? = if (checkIsSavingDisabled()) null else createSaveSession(getStorageData())
+  override fun createSaveSessionProducer() = if (checkIsSavingDisabled()) null else createSaveSession(getStorageData())
 
-  protected abstract fun createSaveSession(states: StateMap): StateStorage.SaveSessionProducer
+  protected abstract fun createSaveSession(states: StateMap): SaveSessionProducer
 
   override fun analyzeExternalChangesAndUpdateIfNeed(componentNames: MutableSet<in String>) {
     val oldData = storageDataRef.get()
index 88b0c3df41c88a7c3510d2fe9a67634a4fe64928..579eadfb272dde8f652d41af6315f0128f0e5008 100644 (file)
@@ -1,8 +1,7 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.configurationStore
 
 import com.intellij.openapi.components.PersistentStateComponent
-import com.intellij.openapi.components.StateStorage
 import com.intellij.openapi.components.StoragePathMacros
 import com.intellij.openapi.components.impl.ComponentManagerImpl
 import com.intellij.openapi.components.impl.ServiceManagerImpl
@@ -168,7 +167,7 @@ private fun writeConfigFile(elements: List<Element>, file: Path) {
   }
 }
 
-private val fakeSaveSession = object : StateStorage.SaveSession {
+private val fakeSaveSession = object : SaveSession {
   override fun save() {
   }
 }
\ No newline at end of file
index 8a9a20bffddd832bd1af1669b0d7db3463a587e1..23f23e015c942be2f71143652b153c53cd3c1cc6 100644 (file)
@@ -1,8 +1,7 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.configurationStore
 
 import com.intellij.openapi.components.MainConfigurationStateSplitter
-import com.intellij.openapi.components.StateStorage
 import com.intellij.openapi.util.JDOMUtil
 import com.intellij.testFramework.ProjectRule
 import com.intellij.testFramework.RuleChain
@@ -14,7 +13,7 @@ import org.junit.ClassRule
 import org.junit.Rule
 import org.junit.Test
 
-private fun StateStorage.SaveSessionProducer.save() {
+private fun SaveSessionProducer.save() {
   runInEdtAndWait {
     createSaveSession()!!.save()
   }
index adf7bbdc1cc81c102bfe1f256591411484637de6..a7edc216dd755ef9fcedbafabc3e2d6aa80c80e4 100644 (file)
@@ -1,12 +1,9 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.openapi.roots.impl.storage;
 
 import com.intellij.ProjectTopics;
 import com.intellij.application.options.PathMacrosCollector;
-import com.intellij.configurationStore.StateStorageBase;
-import com.intellij.configurationStore.StateStorageManager;
-import com.intellij.configurationStore.StateStorageManagerKt;
-import com.intellij.configurationStore.StorageUtilKt;
+import com.intellij.configurationStore.*;
 import com.intellij.notification.Notification;
 import com.intellij.notification.NotificationType;
 import com.intellij.openapi.application.ApplicationManager;
index fb2247bf314fcafebc247af097311347ff58c227..11853338ae8e3ee7584a5631d95a7385590bce82 100644 (file)
@@ -1,7 +1,7 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.openapi.roots.impl.storage;
 
-import com.intellij.openapi.components.StateStorage;
+import com.intellij.configurationStore.SaveSessionProducer;
 import com.intellij.openapi.extensions.ExtensionPointName;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.options.ConfigurationException;
@@ -49,7 +49,7 @@ public interface ClasspathStorageProvider {
     List<String> getFilePaths();
 
     @Nullable
-    default StateStorage.SaveSessionProducer startExternalization() {
+    default SaveSessionProducer startExternalization() {
       return null;
     }
 
diff --git a/platform/projectModel-api/src/com/intellij/configurationStore/SaveSessionProducer.kt b/platform/projectModel-api/src/com/intellij/configurationStore/SaveSessionProducer.kt
new file mode 100644 (file)
index 0000000..1eebbca
--- /dev/null
@@ -0,0 +1,19 @@
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package com.intellij.configurationStore
+
+import java.io.IOException
+
+interface SaveSession {
+  @Throws(IOException::class)
+  fun save()
+}
+
+interface SaveSessionProducer {
+  @Throws(IOException::class)
+  fun setState(component: Any?, componentName: String, state: Any?)
+
+  /**
+   * return null if nothing to save
+   */
+  fun createSaveSession(): SaveSession?
+}
\ No newline at end of file
index e118ffcfac65b9a15d120c86ef9590da50a0540e..212b90b5cef597e7c3605a59cba6685ca656e6e4 100644 (file)
@@ -1,7 +1,7 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.openapi.components
 
-import java.io.IOException
+import com.intellij.configurationStore.SaveSessionProducer
 
 interface StateStorage {
   /**
@@ -24,18 +24,4 @@ interface StateStorage {
     return StateStorageChooserEx.Resolution.DO
   }
 
-  interface SaveSessionProducer {
-    @Throws(IOException::class)
-    fun setState(component: Any?, componentName: String, state: Any?)
-
-    /**
-     * return null if nothing to save
-     */
-    fun createSaveSession(): SaveSession?
-  }
-
-  interface SaveSession {
-    @Throws(IOException::class)
-    fun save()
-  }
 }
\ No newline at end of file
index 1585620079a6fd4263a9022972af84b38a56c761..2d9c0c4e91990acc7c6a7cec9070b74ea493b64c 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package com.intellij.openapi.components.impl.stores
 
+import com.intellij.configurationStore.SaveSession
 import com.intellij.configurationStore.StateStorageManager
 import com.intellij.openapi.components.PersistentStateComponent
-import com.intellij.openapi.components.StateStorage
 import com.intellij.openapi.vfs.VirtualFile
 import com.intellij.util.messages.MessageBus
 import org.jetbrains.annotations.SystemIndependent
@@ -32,4 +32,4 @@ interface IComponentStore {
   fun saveApplicationComponent(component: PersistentStateComponent<*>)
 }
 
-data class SaveSessionAndFile(val session: StateStorage.SaveSession, val file: VirtualFile)
+data class SaveSessionAndFile(val session: SaveSession, val file: VirtualFile)
index b07b09a543ccf7189952d5cf71e0ab31de6892fe..e7bc6ef421b203dadbbe438a35ecef5ddf9311ff 100644 (file)
@@ -1,9 +1,10 @@
-// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
 package org.jetbrains.idea.eclipse.config;
 
+import com.intellij.configurationStore.SaveSession;
+import com.intellij.configurationStore.SaveSessionProducer;
 import com.intellij.configurationStore.StorageUtilKt;
 import com.intellij.openapi.application.WriteAction;
-import com.intellij.openapi.components.StateStorage;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.roots.impl.ModuleRootManagerImpl;
 import com.intellij.openapi.util.JDOMUtil;
@@ -29,7 +30,7 @@ import java.nio.file.Paths;
 import java.util.Map;
 import java.util.Set;
 
-final class ClasspathSaveSession implements StateStorage.SaveSessionProducer, StateStorage.SaveSession, SafeWriteRequestor {
+final class ClasspathSaveSession implements SaveSessionProducer, SaveSession, SafeWriteRequestor {
   private final Map<String, Element> modifiedContent = new THashMap<>();
   private final Set<String> deletedContent = new THashSet<>();
 
@@ -86,7 +87,7 @@ final class ClasspathSaveSession implements StateStorage.SaveSessionProducer, St
 
   @Nullable
   @Override
-  public StateStorage.SaveSession createSaveSession() {
+  public SaveSession createSaveSession() {
     return modifiedContent.isEmpty() && deletedContent.isEmpty() ? null : this;
   }