From 26eb68f6fcb0981c1c35c66772cff1eadcaf3330 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 30 Jan 2015 22:23:50 +0300 Subject: [PATCH] Cleanup (formatting; collection-based API added) --- .../roots/impl/ModifiableModelCommitter.java | 133 +++++++++--------- 1 file changed, 64 insertions(+), 69 deletions(-) diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModifiableModelCommitter.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModifiableModelCommitter.java index 38a767abb756..b39ba50001e5 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModifiableModelCommitter.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModifiableModelCommitter.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -20,120 +20,115 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.ModifiableModuleModel; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.impl.ModuleManagerImpl; -import com.intellij.openapi.roots.ModifiableRootModel; -import com.intellij.openapi.roots.ModuleOrderEntry; -import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.roots.RootPolicy; +import com.intellij.openapi.roots.*; import com.intellij.util.ArrayUtil; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.graph.CachingSemiGraph; import com.intellij.util.graph.DFSTBuilder; import com.intellij.util.graph.GraphGenerator; +import org.jetbrains.annotations.NotNull; import java.util.*; public class ModifiableModelCommitter { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.module.impl.ModifiableModelCommitter"); - public static void multiCommit(ModifiableRootModel[] rootModels, ModifiableModuleModel moduleModel) { + public static void multiCommit(@NotNull ModifiableRootModel[] rootModels, @NotNull ModifiableModuleModel moduleModel) { + multiCommit(Arrays.asList(rootModels), moduleModel); + } + + public static void multiCommit(@NotNull Collection rootModels, @NotNull ModifiableModuleModel moduleModel) { ApplicationManager.getApplication().assertWriteAccessAllowed(); final List modelsToCommit = getSortedChangedModels(rootModels, moduleModel); - final List modelsToDispose = new ArrayList(Arrays.asList(rootModels)); + final List modelsToDispose = ContainerUtil.newArrayList(rootModels); modelsToDispose.removeAll(modelsToCommit); - Runnable runnable = new Runnable() { + ModuleManagerImpl.commitModelWithRunnable(moduleModel, new Runnable() { @Override public void run() { - for (RootModelImpl rootModel : modelsToCommit) { - commitModelWithoutEvents(rootModel); + for (RootModelImpl model : modelsToCommit) { + ModuleRootManagerImpl.doCommit(model); } - for (ModifiableRootModel model : modelsToDispose) { model.dispose(); } } - }; - ModuleManagerImpl.commitModelWithRunnable(moduleModel, runnable); - + }); } - private static void commitModelWithoutEvents(RootModelImpl rootModel) { - ModuleRootManagerImpl.doCommit(rootModel); - } + private static List getSortedChangedModels(Collection rootModels, ModifiableModuleModel moduleModel) { + List result = ContainerUtil.newArrayListWithCapacity(rootModels.size()); - private static List getSortedChangedModels(ModifiableRootModel[] _rootModels, - final ModifiableModuleModel moduleModel) { - List rootModels = new ArrayList(); - for (ModifiableRootModel _rootModel : _rootModels) { - RootModelImpl rootModel = (RootModelImpl)_rootModel; + for (ModifiableRootModel model : rootModels) { + RootModelImpl rootModel = (RootModelImpl)model; if (rootModel.isChanged()) { - rootModels.add(rootModel); + result.add(rootModel); } } - sortRootModels(rootModels, moduleModel); - return rootModels; - } + DFSTBuilder builder = createDFSTBuilder(result, moduleModel); + Collections.sort(result, builder.comparator()); - private static void sortRootModels(List rootModels, final ModifiableModuleModel moduleModel) { - DFSTBuilder builder = createDFSTBuilder(rootModels, moduleModel); - - final Comparator comparator = builder.comparator(); - Collections.sort(rootModels, comparator); + return result; } private static DFSTBuilder createDFSTBuilder(List rootModels, final ModifiableModuleModel moduleModel) { - final Map nameToModel = new com.intellij.util.containers.HashMap(); - for (final RootModelImpl rootModel : rootModels) { - final String name = rootModel.getModule().getName(); + final Map nameToModel = ContainerUtil.newHashMap(); + for (RootModelImpl rootModel : rootModels) { + String name = rootModel.getModule().getName(); LOG.assertTrue(!nameToModel.containsKey(name), name); nameToModel.put(name, rootModel); } - final Module[] modules = moduleModel.getModules(); - for (final Module module : modules) { - final String name = module.getName(); + + Module[] modules = moduleModel.getModules(); + for (Module module : modules) { + String name = module.getName(); if (!nameToModel.containsKey(name)) { - final RootModelImpl rootModel = ((ModuleRootManagerImpl)ModuleRootManager.getInstance(module)).getRootModel(); + RootModelImpl rootModel = ((ModuleRootManagerImpl)ModuleRootManager.getInstance(module)).getRootModel(); nameToModel.put(name, rootModel); } } + final Collection allRootModels = nameToModel.values(); - return new DFSTBuilder(new GraphGenerator(new CachingSemiGraph(new GraphGenerator.SemiGraph() { - @Override - public Collection getNodes() { - return allRootModels; - } + GraphGenerator.SemiGraph graph = new GraphGenerator.SemiGraph() { + @Override + public Collection getNodes() { + return allRootModels; + } + @Override + public Iterator getIn(RootModelImpl rootModel) { + OrderEnumerator entries = rootModel.orderEntries().withoutSdk().withoutLibraries().withoutModuleSourceEntries(); + List namesList = entries.process(new RootPolicy>() { @Override - public Iterator getIn(RootModelImpl rootModel) { - final List namesList = rootModel.orderEntries().withoutSdk().withoutLibraries().withoutModuleSourceEntries() - .process(new RootPolicy>() { - @Override - public ArrayList visitModuleOrderEntry(ModuleOrderEntry moduleOrderEntry, ArrayList strings) { - final Module module = moduleOrderEntry.getModule(); - if (module != null && !module.isDisposed()) { - strings.add(module.getName()); - } else { - final Module moduleToBeRenamed = moduleModel.getModuleToBeRenamed(moduleOrderEntry.getModuleName()); - if (moduleToBeRenamed != null && !moduleToBeRenamed.isDisposed()) { - strings.add(moduleToBeRenamed.getName()); - } - } - return strings; - } - }, new ArrayList()); - - final String[] names = ArrayUtil.toStringArray(namesList); - List result = new ArrayList(); - for (String name : names) { - final RootModelImpl depRootModel = nameToModel.get(name); - if (depRootModel != null) { // it is ok not to find one - result.add(depRootModel); + public List visitModuleOrderEntry(ModuleOrderEntry moduleOrderEntry, List strings) { + Module module = moduleOrderEntry.getModule(); + if (module != null && !module.isDisposed()) { + strings.add(module.getName()); + } + else { + final Module moduleToBeRenamed = moduleModel.getModuleToBeRenamed(moduleOrderEntry.getModuleName()); + if (moduleToBeRenamed != null && !moduleToBeRenamed.isDisposed()) { + strings.add(moduleToBeRenamed.getName()); } } - return result.iterator(); + return strings; } - }))); + }, new ArrayList()); + + String[] names = ArrayUtil.toStringArray(namesList); + List result = new ArrayList(); + for (String name : names) { + RootModelImpl depRootModel = nameToModel.get(name); + if (depRootModel != null) { // it is ok not to find one + result.add(depRootModel); + } + } + return result.iterator(); + } + }; + return new DFSTBuilder(new GraphGenerator(new CachingSemiGraph(graph))); } }