platform: system and method for module rename tracking
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Fri, 2 Aug 2013 18:45:28 +0000 (20:45 +0200)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Fri, 2 Aug 2013 20:16:42 +0000 (22:16 +0200)
platform/lang-api/src/com/intellij/openapi/project/ModuleNameTracker.java
platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleImpl.java
platform/projectModel-api/src/com/intellij/openapi/project/ModuleAdapter.java
platform/projectModel-api/src/com/intellij/openapi/project/ModuleListener.java
platform/projectModel-impl/src/com/intellij/openapi/module/impl/ModuleManagerImpl.java

index 2b6036e1d9609829d139d2ff00b57d3ab3c7329d..b606e6c17c1b19d87a14143313ffbf2e2115ead1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2013 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.
@@ -23,9 +23,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-/**
- * User: ksafonov
- */
+/** @deprecated use {@link ModuleListener#OLD_NAME_KEY} (to remove in IDEA 14) */
+@SuppressWarnings("UnusedDeclaration")
 public abstract class ModuleNameTracker extends ModuleAdapter {
   private final Map<Module, String> myModulesNames = new HashMap<Module, String>();
   private final Project myProject;
index 8b252ee3c4f43f105cf3e5ac8f71272e5eea3549..421b75d266757d890ea3a7b0ea3ff2e9e0a9e067 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2013 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.
@@ -33,6 +33,7 @@ import com.intellij.openapi.extensions.Extensions;
 import com.intellij.openapi.module.ModifiableModuleModel;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ModuleComponent;
+import com.intellij.openapi.project.ModuleListener;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.roots.impl.storage.ClasspathStorage;
 import com.intellij.openapi.util.Comparing;
@@ -364,6 +365,7 @@ public class ModuleImpl extends ComponentManagerImpl implements ModuleEx {
       final VirtualFile moduleFile = getModuleFile();
       if (moduleFile == null) return;
       if (moduleFile.equals(event.getFile())) {
+        ModuleImpl.this.putUserData(ModuleListener.OLD_NAME_KEY, myName);
         myName = moduleNameByFileName(moduleFile.getName());
         ModuleManagerImpl.getInstanceImpl(getProject()).fireModuleRenamedByVfsEvent(ModuleImpl.this);
       }
index 376664b87403beda0304a0930261e2cf3b9d1aba..1230d1ed77646ff1c21bd48674af0f12f3e9f737 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 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.
@@ -13,7 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package com.intellij.openapi.project;
 
 import com.intellij.openapi.module.Module;
@@ -24,16 +23,15 @@ import java.util.List;
  * @author nik
  */
 public abstract class ModuleAdapter implements ModuleListener {
+  @Override
+  public void moduleAdded(Project project, Module module) { }
 
-  public void moduleAdded(Project project, Module module) {
-  }
-
-  public void beforeModuleRemoved(Project project, Module module) {
-  }
+  @Override
+  public void beforeModuleRemoved(Project project, Module module) { }
 
-  public void moduleRemoved(Project project, Module module) {
-  }
+  @Override
+  public void moduleRemoved(Project project, Module module) { }
 
-  public void modulesRenamed(Project project, List<Module> modules) {
-  }
+  @Override
+  public void modulesRenamed(Project project, List<Module> modules) { }
 }
index 43f1491108a66739171e5f64f69d6db360e73949..3197143e22f7c93e8b823dc12de69f47369a4367 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 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.
@@ -16,6 +16,7 @@
 package com.intellij.openapi.project;
 
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.util.Key;
 
 import java.util.EventListener;
 import java.util.List;
@@ -24,6 +25,8 @@ import java.util.List;
  * @author max
  */
 public interface ModuleListener extends EventListener {
+  Key<String> OLD_NAME_KEY = Key.create("module.rename.old.name");
+
   void moduleAdded(Project project, Module module);
 
   void beforeModuleRemoved(Project project, Module module);
index 6e3571ed4bdfa7290b3b57032a9f026fd4ac6753..1f58278c07274c7c2397991e03763824f512c14d 100644 (file)
@@ -26,6 +26,7 @@ import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.module.*;
 import com.intellij.openapi.progress.ProgressIndicator;
 import com.intellij.openapi.progress.ProgressIndicatorProvider;
+import com.intellij.openapi.project.ModuleListener;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectBundle;
 import com.intellij.openapi.roots.ModifiableRootModel;
@@ -305,6 +306,9 @@ public abstract class ModuleManagerImpl extends ModuleManager implements Project
   protected void fireModulesRenamed(List<Module> modules) {
     if (!modules.isEmpty()) {
       myMessageBus.syncPublisher(ProjectTopics.MODULES).modulesRenamed(myProject, modules);
+      for (Module module : modules) {
+        module.putUserData(ModuleListener.OLD_NAME_KEY, null);
+      }
     }
   }
 
@@ -967,12 +971,12 @@ public abstract class ModuleManagerImpl extends ModuleManager implements Project
         final Set<Module> modulesToBeRenamed = modulesToNewNamesMap.keySet();
         modulesToBeRenamed.removeAll(moduleModel.myModulesToDispose);
         final List<Module> modules = new ArrayList<Module>();
-        for (final Module moduleToBeRenamed : modulesToBeRenamed) {
-          ModuleEx module = (ModuleEx)moduleToBeRenamed;
-          moduleModel.myPathToModule.remove(moduleToBeRenamed.getModuleFilePath());
-          modules.add(moduleToBeRenamed);
-          module.rename(modulesToNewNamesMap.get(moduleToBeRenamed));
-          moduleModel.myPathToModule.put(moduleToBeRenamed.getModuleFilePath(), module);
+        for (final Module module : modulesToBeRenamed) {
+          module.putUserData(ModuleListener.OLD_NAME_KEY, module.getName());
+          moduleModel.myPathToModule.remove(module.getModuleFilePath());
+          modules.add(module);
+          ((ModuleEx)module).rename(modulesToNewNamesMap.get(module));
+          moduleModel.myPathToModule.put(module.getModuleFilePath(), module);
         }
 
         moduleModel.myIsWritable = false;