CR-IC-1832 (explicit API)
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Mon, 5 Aug 2013 11:45:33 +0000 (13:45 +0200)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Mon, 5 Aug 2013 11:46:05 +0000 (13:46 +0200)
platform/lang-api/src/com/intellij/openapi/project/ModuleNameTracker.java
platform/lang-impl/src/com/intellij/facet/impl/pointers/FacetPointersManagerImpl.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
platform/projectModel-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java

index b606e6c17c1b19d87a14143313ffbf2e2115ead1..b5331bfc6b493a7addfcd1ebcb2a57c932372bf9 100644 (file)
@@ -23,7 +23,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-/** @deprecated use {@link ModuleListener#OLD_NAME_KEY} (to remove in IDEA 14) */
+/** @deprecated use {@link ModuleListener#modulesRenamed(Project, java.util.List, com.intellij.util.Function)} (to remove in IDEA 14) */
 @SuppressWarnings("UnusedDeclaration")
 public abstract class ModuleNameTracker extends ModuleAdapter {
   private final Map<Module, String> myModulesNames = new HashMap<Module, String>();
index 31554199b515d6b1669f3778f37e1d0ce3bde39e..789f0136e326e7f0de3d67a804428f8c4eb4639c 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.
@@ -34,6 +34,7 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Disposer;
 import com.intellij.openapi.util.Pair;
 import com.intellij.util.EventDispatcher;
+import com.intellij.util.Function;
 import com.intellij.util.messages.MessageBusConnection;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
@@ -224,7 +225,7 @@ public class FacetPointersManagerImpl extends FacetPointersManager implements Pr
     }
 
     @Override
-    public void modulesRenamed(Project project, final List<Module> modules) {
+    public void modulesRenamed(Project project, List<Module> modules, Function<Module, String> oldNameProvider) {
       for (Module module : modules) {
         refreshPointers(module);
       }
index 421b75d266757d890ea3a7b0ea3ff2e9e0a9e067..3391d4ce478c05716832c61b451b17b04fe0a680 100644 (file)
@@ -33,7 +33,6 @@ 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;
@@ -365,9 +364,9 @@ 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);
+        String oldName = myName;
         myName = moduleNameByFileName(moduleFile.getName());
-        ModuleManagerImpl.getInstanceImpl(getProject()).fireModuleRenamedByVfsEvent(ModuleImpl.this);
+        ModuleManagerImpl.getInstanceImpl(getProject()).fireModuleRenamedByVfsEvent(ModuleImpl.this, oldName);
       }
     }
 
index 1230d1ed77646ff1c21bd48674af0f12f3e9f737..5058eddfd912615f96953be86633248deed490aa 100644 (file)
@@ -16,6 +16,7 @@
 package com.intellij.openapi.project;
 
 import com.intellij.openapi.module.Module;
+import com.intellij.util.Function;
 
 import java.util.List;
 
@@ -32,6 +33,12 @@ public abstract class ModuleAdapter implements ModuleListener {
   @Override
   public void moduleRemoved(Project project, Module module) { }
 
+  @SuppressWarnings("deprecation")
   @Override
+  public void modulesRenamed(Project project, List<Module> modules, Function<Module, String> oldNameProvider) {
+    modulesRenamed(project, modules);
+  }
+
+  /** @deprecated implement {@link #modulesRenamed(Project, List, Function)} (to remove in IDEA 14) */
   public void modulesRenamed(Project project, List<Module> modules) { }
 }
index 3197143e22f7c93e8b823dc12de69f47369a4367..79f978f0302cf71020537a04d9f5822b151f029a 100644 (file)
@@ -16,7 +16,7 @@
 package com.intellij.openapi.project;
 
 import com.intellij.openapi.module.Module;
-import com.intellij.openapi.util.Key;
+import com.intellij.util.Function;
 
 import java.util.EventListener;
 import java.util.List;
@@ -25,13 +25,11 @@ 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);
 
   void moduleRemoved(Project project, Module module);
 
-  void modulesRenamed(Project project, List<Module> modules);
+  void modulesRenamed(Project project, List<Module> modules, Function<Module, String> oldNameProvider);
 }
index 1f58278c07274c7c2397991e03763824f512c14d..c1e860cd29e314ed0408488ec888056ada467b77 100644 (file)
@@ -26,7 +26,6 @@ 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;
@@ -39,6 +38,8 @@ import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vfs.StandardFileSystems;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.openapi.vfs.VirtualFileManager;
+import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.containers.HashMap;
 import com.intellij.util.containers.HashSet;
 import com.intellij.util.containers.StringInterner;
@@ -303,12 +304,14 @@ public abstract class ModuleManagerImpl extends ModuleManager implements Project
     myMessageBus.syncPublisher(ProjectTopics.MODULES).beforeModuleRemoved(myProject, module);
   }
 
-  protected void fireModulesRenamed(List<Module> modules) {
+  protected void fireModulesRenamed(List<Module> modules, final Map<Module, String> oldNames) {
     if (!modules.isEmpty()) {
-      myMessageBus.syncPublisher(ProjectTopics.MODULES).modulesRenamed(myProject, modules);
-      for (Module module : modules) {
-        module.putUserData(ModuleListener.OLD_NAME_KEY, null);
-      }
+      myMessageBus.syncPublisher(ProjectTopics.MODULES).modulesRenamed(myProject, modules, new Function<Module, String>() {
+        @Override
+        public String fun(Module module) {
+          return oldNames.get(module);
+        }
+      });
     }
   }
 
@@ -970,9 +973,11 @@ public abstract class ModuleManagerImpl extends ModuleManager implements Project
         final Map<Module, String> modulesToNewNamesMap = moduleModel.myModuleToNewName;
         final Set<Module> modulesToBeRenamed = modulesToNewNamesMap.keySet();
         modulesToBeRenamed.removeAll(moduleModel.myModulesToDispose);
-        final List<Module> modules = new ArrayList<Module>();
+
+        List<Module> modules = new ArrayList<Module>();
+        Map<Module, String> oldNames = ContainerUtil.newHashMap();
         for (final Module module : modulesToBeRenamed) {
-          module.putUserData(ModuleListener.OLD_NAME_KEY, module.getName());
+          oldNames.put(module, module.getName());
           moduleModel.myPathToModule.remove(module.getModuleFilePath());
           modules.add(module);
           ((ModuleEx)module).rename(modulesToNewNamesMap.get(module));
@@ -996,17 +1001,17 @@ public abstract class ModuleManagerImpl extends ModuleManager implements Project
           cleanCachedStuff();
         }
         cleanCachedStuff();
-        fireModulesRenamed(modules);
+        fireModulesRenamed(modules, oldNames);
         cleanCachedStuff();
       }
     }, false, true);
   }
 
-  void fireModuleRenamedByVfsEvent(@NotNull final Module module) {
+  void fireModuleRenamedByVfsEvent(@NotNull final Module module, @NotNull final String oldName) {
     ProjectRootManagerEx.getInstanceEx(myProject).makeRootsChange(new Runnable() {
       @Override
       public void run() {
-        fireModulesRenamed(Collections.singletonList(module));
+        fireModulesRenamed(Collections.singletonList(module), Collections.singletonMap(module, oldName));
       }
     }, false, true);
   }
index c1d6acb079810059a06b1c9c279749b3c56104bd..ad37bab51e7a8cfad40a056fa99be8d4872babda 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.
@@ -24,6 +24,7 @@ import com.intellij.openapi.module.ModulePointerManager;
 import com.intellij.openapi.project.ModuleAdapter;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Disposer;
+import com.intellij.util.Function;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.HashMap;
@@ -52,7 +53,7 @@ public class ModulePointerManagerImpl extends ModulePointerManager {
       }
 
       @Override
-      public void modulesRenamed(Project project, List<Module> modules) {
+      public void modulesRenamed(Project project, List<Module> modules, Function<Module, String> oldNameProvider) {
         for (Module module : modules) {
           moduleAppears(module);
         }