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 e208cefad6f1..2be30baf2073 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 @@ -934,10 +934,21 @@ public abstract class ModuleManagerImpl extends ModuleManager implements Project ApplicationManager.getApplication().assertWriteAccessAllowed(); final Collection oldModules = myModuleModel.myModules.values(); final Collection newModules = moduleModel.myModules.values(); - final List removedModules = new ArrayList<>(oldModules); - removedModules.removeAll(newModules); - final List addedModules = new ArrayList<>(newModules); - addedModules.removeAll(oldModules); + + final Collection addedModules; + final Collection removedModules; + if (oldModules.isEmpty()) { + // create immutable copy + addedModules = new ArrayList<>(newModules); + removedModules = Collections.emptyList(); + } + else { + addedModules = new THashSet<>(newModules); + addedModules.removeAll(oldModules); + + removedModules = new THashSet<>(oldModules); + removedModules.removeAll(newModules); + } ProjectRootManagerEx.getInstanceEx(myProject).makeRootsChange(() -> { for (Module removedModule : removedModules) { @@ -945,11 +956,13 @@ public abstract class ModuleManagerImpl extends ModuleManager implements Project cleanCachedStuff(); } - List neverAddedModules = new ArrayList<>(moduleModel.myModulesToDispose); - neverAddedModules.removeAll(myModuleModel.myModules.values()); - for (final Module neverAddedModule : neverAddedModules) { - neverAddedModule.putUserData(DISPOSED_MODULE_NAME, neverAddedModule.getName()); - Disposer.dispose(neverAddedModule); + if (!moduleModel.myModulesToDispose.isEmpty()) { + List neverAddedModules = new ArrayList<>(moduleModel.myModulesToDispose); + neverAddedModules.removeAll(myModuleModel.myModules.values()); + for (final Module neverAddedModule : neverAddedModules) { + neverAddedModule.putUserData(DISPOSED_MODULE_NAME, neverAddedModule.getName()); + Disposer.dispose(neverAddedModule); + } } if (runnable != null) {