simplify — get rid of getStateStorage(@NotNull String fileSpec, @NotNull RoamingType...
authorVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Wed, 2 Sep 2015 13:59:16 +0000 (15:59 +0200)
committerVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Thu, 3 Sep 2015 10:32:43 +0000 (12:32 +0200)
platform/configuration-store-impl/src/DefaultProjectStoreImpl.kt
platform/configuration-store-impl/src/FileBasedStorage.kt
platform/configuration-store-impl/src/ModuleStoreImpl.kt
platform/configuration-store-impl/src/StateStorageManagerImpl.kt
platform/configuration-store-impl/testSrc/ApplicationStoreTest.kt
platform/configuration-store-impl/testSrc/ModuleStoreRenameTest.kt
platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleImpl.java
platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileStorage.java [deleted file]
platform/platform-impl/src/com/intellij/openapi/components/impl/stores/StateStorageManager.java
plugins/settings-repository/src/IcsManager.kt

index f8de1735d43ef7b16ef846cc3304c2665490ab27..7a619fee2f95a3fe53ab5cbdefb0e3eb31e5d089 100644 (file)
@@ -63,8 +63,6 @@ class DefaultProjectStoreImpl(override val project: ProjectImpl, private val pat
 
     override fun getStateStorage(storageSpec: Storage) = storage
 
-    override fun getStateStorage(fileSpec: String, roamingType: RoamingType) = storage
-
     override fun startExternalization(): StateStorageManager.ExternalizationSession? {
       val externalizationSession = storage.startExternalization()
       return if (externalizationSession == null) null else MyExternalizationSession(externalizationSession)
index 920e45c6b3271fa4a77107622edbd98d6b75b663..6ea57eb3ce6ee75e7308b7204bee0f9ac6074914 100644 (file)
@@ -25,7 +25,6 @@ import com.intellij.openapi.components.RoamingType
 import com.intellij.openapi.components.StateStorage
 import com.intellij.openapi.components.StoragePathMacros
 import com.intellij.openapi.components.TrackingPathMacroSubstitutor
-import com.intellij.openapi.components.impl.stores.FileStorage
 import com.intellij.openapi.components.impl.stores.StorageUtil
 import com.intellij.openapi.components.store.ReadOnlyModificationException
 import com.intellij.openapi.fileEditor.impl.LoadTextUtil
@@ -51,7 +50,7 @@ open class FileBasedStorage(file: File,
                             rootElementName: String,
                             pathMacroManager: TrackingPathMacroSubstitutor? = null,
                             roamingType: RoamingType? = null,
-                            provider: StreamProvider? = null) : XmlElementStorage(fileSpec, rootElementName, pathMacroManager, roamingType, provider), FileStorage {
+                            provider: StreamProvider? = null) : XmlElementStorage(fileSpec, rootElementName, pathMacroManager, roamingType, provider) {
   private volatile var cachedVirtualFile: VirtualFile? = null
   private var lineSeparator: LineSeparator? = null
   private var blockSavingTheContent = false
@@ -68,7 +67,7 @@ open class FileBasedStorage(file: File,
   protected open val isUseXmlProlog: Boolean = false
 
   // we never set io file to null
-  override fun setFile(virtualFile: VirtualFile?, ioFileIfChanged: File?) {
+  fun setFile(virtualFile: VirtualFile?, ioFileIfChanged: File?) {
     cachedVirtualFile = virtualFile
     if (ioFileIfChanged != null) {
       file = ioFileIfChanged
@@ -100,7 +99,7 @@ open class FileBasedStorage(file: File,
     }
   }
 
-  override fun getVirtualFile(): VirtualFile? {
+  fun getVirtualFile(): VirtualFile? {
     var result = cachedVirtualFile
     if (result == null) {
       result = LocalFileSystem.getInstance().findFileByIoFile(file)
index 73166c9dd38413f6ae44d069ecf7efea0abf093c..40839c4d983148372d9fa13341a5612ba9070bf7 100644 (file)
@@ -19,6 +19,7 @@ import com.intellij.openapi.components.PathMacroManager
 import com.intellij.openapi.components.StoragePathMacros
 import com.intellij.openapi.module.Module
 import com.intellij.openapi.project.ex.ProjectEx
+import java.io.File
 
 class ModuleStoreImpl(module: Module, private val pathMacroManager: PathMacroManager) : ComponentStoreImpl() {
   override val project = module.getProject()
@@ -26,7 +27,9 @@ class ModuleStoreImpl(module: Module, private val pathMacroManager: PathMacroMan
   override val storageManager = ModuleStateStorageManager(pathMacroManager.createTrackingSubstitutor(), module)
 
   override fun setPath(path: String) {
-    storageManager.addMacro(StoragePathMacros.MODULE_FILE, path)
+    if (!storageManager.addMacro(StoragePathMacros.MODULE_FILE, path)) {
+      storageManager.getCachedFileStorages(listOf(StoragePathMacros.MODULE_FILE)).firstOrNull()?.setFile(null, File(path))
+    }
   }
 
   override fun optimizeTestLoading() = (project as ProjectEx).isOptimiseTestLoadSpeed()
index ad5b97f86623fca40463f52de9d0831bb1711679..daa992ac9f8cc151214886240d0a511d2bb01146 100644 (file)
@@ -94,7 +94,7 @@ open class StateStorageManagerImpl(private val rootTagName: String,
   /**
    * @param expansion System-independent.
    */
-  fun addMacro(key: String, expansion: String) {
+  fun addMacro(key: String, expansion: String):Boolean {
     assert(!key.isEmpty())
 
     val value: String
@@ -116,11 +116,12 @@ open class StateStorageManagerImpl(private val rootTagName: String,
     for (macro in macros) {
       if (key.equals(macro.key)) {
         macro.value = value
-        return
+        return false
       }
     }
 
     macros.add(Macro(key, value))
+    return true
   }
 
   // system-independent paths
@@ -134,8 +135,6 @@ open class StateStorageManagerImpl(private val rootTagName: String,
 
   override final fun getStateStorage(storageSpec: Storage) = getOrCreateStorage(storageSpec.file, storageSpec.roamingType, storageSpec.storageClass.java as Class<out StateStorage>, storageSpec.stateSplitter.java)
 
-  override final fun getStateStorage(fileSpec: String, roamingType: RoamingType) = getOrCreateStorage(fileSpec, roamingType)
-
   protected open fun normalizeFileSpec(fileSpec: String): String {
     val path = FileUtilRt.toSystemIndependentName(fileSpec)
     // fileSpec for directory based storage could be erroneously specified as "name/"
@@ -163,7 +162,7 @@ open class StateStorageManagerImpl(private val rootTagName: String,
 
   fun getCachedFileStorages(changed: Collection<String>, deleted: Collection<String>) = storageLock.withLock { Pair(getCachedFileStorages(changed), getCachedFileStorages(deleted)) }
 
-  fun getCachedFileStorages(fileSpecs: Collection<String>): Collection<StateStorage> {
+  fun getCachedFileStorages(fileSpecs: Collection<String>): Collection<FileBasedStorage> {
     if (fileSpecs.isEmpty()) {
       return emptyList()
     }
@@ -391,7 +390,7 @@ open class StateStorageManagerImpl(private val rootTagName: String,
   override fun getOldStorage(component: Any, componentName: String, operation: StateStorageOperation): StateStorage? {
     val oldStorageSpec = getOldStorageSpec(component, componentName, operation) ?: return null
     @suppress("DEPRECATED_SYMBOL_WITH_MESSAGE")
-    return getStateStorage(oldStorageSpec, if (component is com.intellij.openapi.util.RoamingTypeDisabled) RoamingType.DISABLED else RoamingType.DEFAULT)
+    return getOrCreateStorage(oldStorageSpec, if (component is com.intellij.openapi.util.RoamingTypeDisabled) RoamingType.DISABLED else RoamingType.DEFAULT)
   }
 
   protected open fun getOldStorageSpec(component: Any, componentName: String, operation: StateStorageOperation): String? = null
index ca28916b28f8d86df19afe3b0b3d39593d900e37..0a122db0df69929d3be0cbc8f70af59b16c25333 100644 (file)
@@ -150,7 +150,6 @@ class ApplicationStoreTest {
 
     val oldContent = "<application><component name=\"A\" foo=\"old\" deprecated=\"old\"/></application>"
     val file = writeConfig("b.xml", oldContent)
-    val oldModificationTime = file.getLastModifiedTime()
     testAppConfig.refreshVfs()
 
     val component = AWorkspace()
index 8fb95898ee2586b88105ca15b712ea1ee84131e6..03d2e6ff5badacfcdaacd06a49b8835c75ea0384 100644 (file)
@@ -4,7 +4,6 @@ import com.intellij.ProjectTopics
 import com.intellij.ide.highlighter.ModuleFileType
 import com.intellij.openapi.application.ApplicationManager
 import com.intellij.openapi.application.runWriteAction
-import com.intellij.openapi.components.RoamingType
 import com.intellij.openapi.components.StoragePathMacros
 import com.intellij.openapi.components.stateStore
 import com.intellij.openapi.module.ModifiableModuleModel
@@ -30,6 +29,9 @@ import kotlin.properties.Delegates
 class ModuleStoreRenameTest {
   companion object {
     @ClassRule val projectRule = ProjectRule()
+
+    private val Module.storage: FileBasedStorage
+      get() = (stateStore.getStateStorageManager() as StateStorageManagerImpl).getCachedFileStorages(listOf(StoragePathMacros.MODULE_FILE)).first()
   }
 
   var module: Module by Delegates.notNull()
@@ -83,7 +85,7 @@ class ModuleStoreRenameTest {
   // project structure
   @Test fun `rename module using model`() {
     runInEdtAndWait { module.saveStore() }
-    val storage = module.stateStore.getStateStorageManager().getStateStorage(StoragePathMacros.MODULE_FILE, RoamingType.DEFAULT) as FileBasedStorage
+    val storage = module.storage
     val oldFile = storage.file
     assertThat(oldFile).isFile()
 
@@ -97,7 +99,7 @@ class ModuleStoreRenameTest {
   // project view
   @Test fun `rename module using rename virtual file`() {
     runInEdtAndWait { module.saveStore() }
-    var storage = module.stateStore.getStateStorageManager().getStateStorage(StoragePathMacros.MODULE_FILE, RoamingType.DEFAULT) as FileBasedStorage
+    var storage = module.storage
     val oldFile = storage.file
     assertThat(oldFile).isFile()
 
@@ -111,8 +113,7 @@ class ModuleStoreRenameTest {
   // we cannot test external rename yet, because it is not supported - ModuleImpl doesn't support delete and create events (in case of external change we don't get move event, but get "delete old" and "create new")
 
   private fun assertRename(newName: String, oldFile: File) {
-    val storageManager = module.stateStore.getStateStorageManager()
-    val newFile = (storageManager.getStateStorage(StoragePathMacros.MODULE_FILE, RoamingType.DEFAULT) as FileBasedStorage).file
+    val newFile = module.storage.file
     assertThat(newFile.getName()).isEqualTo("$newName${ModuleFileType.DOT_DEFAULT_EXTENSION}")
     assertThat(oldFile)
       .doesNotExist()
@@ -120,14 +121,12 @@ class ModuleStoreRenameTest {
     assertThat(newFile).isFile()
 
     // ensure that macro value updated
-    assertThat(storageManager.expandMacros(StoragePathMacros.MODULE_FILE)).isEqualTo(newFile.systemIndependentPath)
+    assertThat(module.stateStore.getStateStorageManager().expandMacros(StoragePathMacros.MODULE_FILE)).isEqualTo(newFile.systemIndependentPath)
   }
 
   @Test fun `rename module parent virtual dir`() {
     runInEdtAndWait { module.saveStore() }
-    val storageManager = module.stateStore.getStateStorageManager()
-    val storage = storageManager.getStateStorage(StoragePathMacros.MODULE_FILE, RoamingType.DEFAULT) as FileBasedStorage
-
+    val storage = module.storage
     val oldFile = storage.file
     val parentVirtualDir = storage.getVirtualFile()!!.getParent()
     runInEdtAndWait { runWriteAction { parentVirtualDir.rename(null, UUID.randomUUID().toString()) } }
index e4d95ab2cee97f6df4cfea7504ec0b6167739938..85611f1101433e16bf10e263502dfea0517a8dce 100644 (file)
@@ -22,7 +22,6 @@ import com.intellij.openapi.application.impl.ApplicationInfoImpl;
 import com.intellij.openapi.components.*;
 import com.intellij.openapi.components.impl.ModuleServiceManagerImpl;
 import com.intellij.openapi.components.impl.PlatformComponentManagerImpl;
-import com.intellij.openapi.components.impl.stores.FileStorage;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.extensions.AreaInstance;
 import com.intellij.openapi.extensions.ExtensionPointName;
@@ -84,11 +83,6 @@ public class ModuleImpl extends PlatformComponentManagerImpl implements ModuleEx
     super.bootstrapPicoContainer(name);
   }
 
-  @NotNull
-  private static FileStorage getMainStorage(@NotNull Module module) {
-    return (FileStorage)ComponentsPackage.getStateStore(module).getStateStorageManager().getStateStorage(StoragePathMacros.MODULE_FILE, RoamingType.DEFAULT);
-  }
-
   @Override
   public void init(@NotNull final String path, @Nullable final Runnable beforeComponentCreation) {
     init(ProgressManager.getInstance().getProgressIndicator(), new Runnable() {
@@ -140,7 +134,7 @@ public class ModuleImpl extends PlatformComponentManagerImpl implements ModuleEx
   @Override
   @Nullable
   public VirtualFile getModuleFile() {
-    return getMainStorage(this).getVirtualFile();
+    return LocalFileSystem.getInstance().findFileByPath(getModuleFilePath());
   }
 
   @Override
@@ -346,7 +340,6 @@ public class ModuleImpl extends PlatformComponentManagerImpl implements ModuleEx
 
     private void setModuleFilePath(String newFilePath) {
       ClasspathStorage.modulePathChanged(ModuleImpl.this, newFilePath);
-      getMainStorage(ModuleImpl.this).setFile(null, new File(newFilePath));
       ComponentsPackage.getStateStore(ModuleImpl.this).setPath(FileUtilRt.toSystemIndependentName(newFilePath));
     }
 
diff --git a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileStorage.java b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileStorage.java
deleted file mode 100644 (file)
index 848da5b..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2000-2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.intellij.openapi.components.impl.stores;
-
-import com.intellij.openapi.vfs.VirtualFile;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.File;
-
-public interface FileStorage {
-  @Nullable
-  VirtualFile getVirtualFile();
-
-  // todo remove
-  void setFile(@Nullable VirtualFile file, @Nullable File ioFileIfChanged);
-}
\ No newline at end of file
index 87079b6151257e651e337846db2529959cb8ffaa..03162b4f8005a86d60584a46bf321c519e3820b5 100644 (file)
@@ -32,9 +32,6 @@ public interface StateStorageManager {
   @NotNull
   StateStorage getStateStorage(@NotNull Storage storageSpec);
 
-  @NotNull
-  StateStorage getStateStorage(@NotNull String fileSpec, @NotNull RoamingType roamingType);
-
   /**
    * Rename file
    * @param path System-independent full old path (/project/bar.iml or collapse $MODULE_FILE$)
index cd16279c9f5e0eead6419617b3f50813db632fa2..a0d1aa62b99ddb05c0cb8124948119be82b25cd6 100644 (file)
@@ -17,13 +17,11 @@ package org.jetbrains.settingsRepository
 
 import com.intellij.configurationStore.StateStorageManagerImpl
 import com.intellij.configurationStore.StreamProvider
-import com.intellij.configurationStore.isProjectOrModuleFile
 import com.intellij.ide.ApplicationLoadListener
 import com.intellij.openapi.application.Application
 import com.intellij.openapi.application.ApplicationManager
 import com.intellij.openapi.application.PathManager
 import com.intellij.openapi.components.RoamingType
-import com.intellij.openapi.components.StoragePathMacros
 import com.intellij.openapi.components.stateStore
 import com.intellij.openapi.diagnostic.Logger
 import com.intellij.openapi.progress.ProgressIndicator
@@ -127,30 +125,17 @@ class IcsManager(dir: File) {
     }
   }
 
-  private fun registerProjectLevelProviders(project: Project) {
-    val storageManager = project.stateStore.getStateStorageManager()
-    val projectId = storageManager.getStateStorage(StoragePathMacros.WORKSPACE_FILE, RoamingType.DISABLED).getState(ProjectId(), "IcsProjectId", javaClass<ProjectId>(), null, false)
-    if (projectId == null || projectId.uid == null) {
-      // not mapped, if user wants, he can map explicitly, we don't suggest
-      // we cannot suggest "map to ICS" for any project that user opens, it will be annoying
-      return
-    }
-
-//    storageManager.setStreamProvider(ProjectLevelProvider(projectId.uid!!))
-    // updateStoragesFromStreamProvider(storageManager, storageManager.getStorageFileNames())
-  }
-
-  private inner class ProjectLevelProvider(projectId: String) : IcsStreamProvider(projectId) {
-    override fun isAutoCommit(fileSpec: String, roamingType: RoamingType) = !isProjectOrModuleFile(fileSpec)
-
-    override fun isApplicable(fileSpec: String, roamingType: RoamingType): Boolean {
-      if (isProjectOrModuleFile(fileSpec)) {
-        // applicable only if file was committed to Settings Server explicitly
-        return repositoryManager.has(buildPath(fileSpec, roamingType, this.projectId))
-      }
-      return settings.shareProjectWorkspace || fileSpec != StoragePathMacros.WORKSPACE_FILE
-    }
-  }
+//  private inner class ProjectLevelProvider(projectId: String) : IcsStreamProvider(projectId) {
+//    override fun isAutoCommit(fileSpec: String, roamingType: RoamingType) = !isProjectOrModuleFile(fileSpec)
+//
+//    override fun isApplicable(fileSpec: String, roamingType: RoamingType): Boolean {
+//      if (isProjectOrModuleFile(fileSpec)) {
+//        // applicable only if file was committed to Settings Server explicitly
+//        return repositoryManager.has(buildPath(fileSpec, roamingType, this.projectId))
+//      }
+//      return settings.shareProjectWorkspace || fileSpec != StoragePathMacros.WORKSPACE_FILE
+//    }
+//  }
 
   fun sync(syncType: SyncType, project: Project? = null, localRepositoryInitializer: (() -> Unit)? = null) = syncManager.sync(syncType, project, localRepositoryInitializer)