CR-IC-1832 (explicit API)

This commit is contained in:
Roman Shevchenko
2013-08-05 13:46:05 +02:00
parent f495a90e2a
commit 0301435334
7 changed files with 34 additions and 23 deletions
@@ -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>();
@@ -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);
}
@@ -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);
}
}
@@ -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) { }
}
@@ -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);
}
@@ -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);
}
@@ -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);
}