diff --git a/platform/lang-api/src/com/intellij/openapi/project/ModuleNameTracker.java b/platform/lang-api/src/com/intellij/openapi/project/ModuleNameTracker.java index b606e6c17c1b..b5331bfc6b49 100644 --- a/platform/lang-api/src/com/intellij/openapi/project/ModuleNameTracker.java +++ b/platform/lang-api/src/com/intellij/openapi/project/ModuleNameTracker.java @@ -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 myModulesNames = new HashMap(); diff --git a/platform/lang-impl/src/com/intellij/facet/impl/pointers/FacetPointersManagerImpl.java b/platform/lang-impl/src/com/intellij/facet/impl/pointers/FacetPointersManagerImpl.java index 31554199b515..789f0136e326 100644 --- a/platform/lang-impl/src/com/intellij/facet/impl/pointers/FacetPointersManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/facet/impl/pointers/FacetPointersManagerImpl.java @@ -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 modules) { + public void modulesRenamed(Project project, List modules, Function oldNameProvider) { for (Module module : modules) { refreshPointers(module); } diff --git a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleImpl.java b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleImpl.java index 421b75d26675..3391d4ce478c 100644 --- a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleImpl.java @@ -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); } } diff --git a/platform/projectModel-api/src/com/intellij/openapi/project/ModuleAdapter.java b/platform/projectModel-api/src/com/intellij/openapi/project/ModuleAdapter.java index 1230d1ed7764..5058eddfd912 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/project/ModuleAdapter.java +++ b/platform/projectModel-api/src/com/intellij/openapi/project/ModuleAdapter.java @@ -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 modules, Function oldNameProvider) { + modulesRenamed(project, modules); + } + + /** @deprecated implement {@link #modulesRenamed(Project, List, Function)} (to remove in IDEA 14) */ public void modulesRenamed(Project project, List modules) { } } diff --git a/platform/projectModel-api/src/com/intellij/openapi/project/ModuleListener.java b/platform/projectModel-api/src/com/intellij/openapi/project/ModuleListener.java index 3197143e22f7..79f978f0302c 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/project/ModuleListener.java +++ b/platform/projectModel-api/src/com/intellij/openapi/project/ModuleListener.java @@ -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 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 modules); + void modulesRenamed(Project project, List modules, Function oldNameProvider); } diff --git a/platform/projectModel-impl/src/com/intellij/openapi/module/impl/ModuleManagerImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/module/impl/ModuleManagerImpl.java index 1f58278c0727..c1e860cd29e3 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/module/impl/ModuleManagerImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/module/impl/ModuleManagerImpl.java @@ -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 modules) { + protected void fireModulesRenamed(List modules, final Map 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() { + @Override + public String fun(Module module) { + return oldNames.get(module); + } + }); } } @@ -970,9 +973,11 @@ public abstract class ModuleManagerImpl extends ModuleManager implements Project final Map modulesToNewNamesMap = moduleModel.myModuleToNewName; final Set modulesToBeRenamed = modulesToNewNamesMap.keySet(); modulesToBeRenamed.removeAll(moduleModel.myModulesToDispose); - final List modules = new ArrayList(); + + List modules = new ArrayList(); + Map 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); } diff --git a/platform/projectModel-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java index c1d6acb07981..ad37bab51e7a 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java @@ -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 modules) { + public void modulesRenamed(Project project, List modules, Function oldNameProvider) { for (Module module : modules) { moduleAppears(module); }