From b5ef5dbd0906eb258e062c7d463eed89ebb11f6b Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 7 May 2013 16:25:45 +0400 Subject: [PATCH] move some methods from lang-impl to ClassPathUtil --- .../ui/configuration/ClasspathEditor.java | 5 ++- .../impl/ModuleRootManagerComponent.java | 7 ++-- .../roots/impl/storage/ClasspathStorage.java | 37 ++++++++----------- .../impl/storage/ClassPathStorageUtil.java | 37 +++++++++++++++++++ .../EclipseClasspathStorageProvider.java | 17 +++++++-- .../config/EclipseModuleManagerImpl.java | 4 +- .../importWizard/EclipseImportBuilder.java | 5 ++- 7 files changed, 79 insertions(+), 33 deletions(-) create mode 100644 platform/projectModel-impl/src/com/intellij/openapi/roots/impl/storage/ClassPathStorageUtil.java diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathEditor.java index 19bb9be438aa..89cc49eb820a 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathEditor.java @@ -24,6 +24,7 @@ import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootEvent; import com.intellij.openapi.roots.ModuleRootListener; import com.intellij.openapi.roots.OrderEntry; +import com.intellij.openapi.roots.impl.storage.ClassPathStorageUtil; import com.intellij.openapi.roots.impl.storage.ClasspathStorage; import com.intellij.openapi.roots.impl.storage.ClasspathStorageProvider; import com.intellij.openapi.roots.ui.configuration.classpath.ClasspathPanelImpl; @@ -53,7 +54,7 @@ public class ClasspathEditor extends ModuleElementsEditor implements ModuleRootL super(state); final Disposable disposable = Disposer.newDisposable(); - + state.getProject().getMessageBus().connect(disposable).subscribe(ProjectTopics.PROJECT_ROOTS, this); registerDisposable(disposable); } @@ -211,7 +212,7 @@ public class ClasspathEditor extends ModuleElementsEditor implements ModuleRootL @NotNull private String getModuleClasspathFormat() { - return ClasspathStorage.getStorageType(getModel().getModule()); + return ClassPathStorageUtil.getStorageType(getModel().getModule()); } boolean isModified() { diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ModuleRootManagerComponent.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ModuleRootManagerComponent.java index 0acd89eccfcb..c9211cc95436 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ModuleRootManagerComponent.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ModuleRootManagerComponent.java @@ -17,6 +17,7 @@ package com.intellij.openapi.roots.impl; import com.intellij.openapi.components.*; import com.intellij.openapi.module.Module; +import com.intellij.openapi.roots.impl.storage.ClassPathStorageUtil; import com.intellij.openapi.roots.impl.storage.ClasspathStorage; import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager; @@ -27,7 +28,7 @@ import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager; name = "NewModuleRootManager", storages = { @Storage( - id = ClasspathStorage.DEFAULT_STORAGE, + id = ClassPathStorageUtil.DEFAULT_STORAGE, file = "$MODULE_FILE$" ), @@ -50,8 +51,8 @@ public class ModuleRootManagerComponent extends ModuleRootManagerImpl implements public static class StorageChooser implements StateStorageChooser { @Override public Storage[] selectStorages(Storage[] storages, ModuleRootManagerImpl moduleRootManager, final StateStorageOperation operation) { - final String storageType = ClasspathStorage.getStorageType(moduleRootManager.getModule()); - final String id = storageType.equals(ClasspathStorage.DEFAULT_STORAGE)? ClasspathStorage.DEFAULT_STORAGE: ClasspathStorage.SPECIAL_STORAGE; + final boolean isDefaultStorageType = ClassPathStorageUtil.isDefaultStorage(moduleRootManager.getModule()); + final String id = isDefaultStorageType ? ClassPathStorageUtil.DEFAULT_STORAGE: ClasspathStorage.SPECIAL_STORAGE; for (Storage storage : storages) { if (storage.id().equals(id)) return new Storage[]{storage}; } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/storage/ClasspathStorage.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/storage/ClasspathStorage.java index f3f3fa8e091a..047a5ab4cc66 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/storage/ClasspathStorage.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/storage/ClasspathStorage.java @@ -62,12 +62,10 @@ import java.util.*; public class ClasspathStorage implements StateStorage { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.roots.impl.storage.ClasspathStorage"); - @NonNls public static final String DEFAULT_STORAGE = "default"; @NonNls public static final String SPECIAL_STORAGE = "special"; public static final String DEFAULT_STORAGE_DESCR = ProjectBundle.message("project.roots.classpath.format.default.descr"); - @NonNls public static final String CLASSPATH_OPTION = JpsProjectLoader.CLASSPATH_ATTRIBUTE; @NonNls public static final String CLASSPATH_DIR_OPTION = JpsProjectLoader.CLASSPATH_DIR_ATTRIBUTE; @NonNls private static final String COMPONENT_TAG = "component"; @@ -76,7 +74,7 @@ public class ClasspathStorage implements StateStorage { public ClasspathStorage(Module module) { - myConverter = getProvider(getStorageType(module)).createConverter(module); + myConverter = getProvider(ClassPathStorageUtil.getStorageType(module)).createConverter(module); final MessageBus messageBus = module.getMessageBus(); final VirtualFileTracker virtualFileTracker = (VirtualFileTracker)module.getPicoContainer().getComponentInstanceOfType(VirtualFileTracker.class); @@ -185,7 +183,7 @@ public class ClasspathStorage implements StateStorage { @Override @NotNull - public SaveSession startSave(final ExternalizationSession externalizationSession) { + public SaveSession startSave(@NotNull final ExternalizationSession externalizationSession) { assert mySession == externalizationSession; final SaveSession session = new MySaveSession(); @@ -202,7 +200,7 @@ public class ClasspathStorage implements StateStorage { } @Override - public void finishSave(final SaveSession saveSession) { + public void finishSave(@NotNull final SaveSession saveSession) { try { LOG.assertTrue(mySession == saveSession); } @@ -212,7 +210,7 @@ public class ClasspathStorage implements StateStorage { } @Override - public void reload(final Set changedComponents) throws StateStorageException { + public void reload(@NotNull final Set changedComponents) throws StateStorageException { } public boolean needsSave() throws StateStorageException { @@ -238,7 +236,8 @@ public class ClasspathStorage implements StateStorage { } } - public static ClasspathStorageProvider getProvider(final String type) { + @NotNull + public static ClasspathStorageProvider getProvider(@NotNull String type) { for (ClasspathStorageProvider provider : getProviders()) { if (type.equals(provider.getID())) { return provider; @@ -247,6 +246,7 @@ public class ClasspathStorage implements StateStorage { return new UnsupportedStorageProvider(type); } + @NotNull public static List getProviders() { final List list = new ArrayList(); list.add(new DefaultStorageProvider()); @@ -255,12 +255,7 @@ public class ClasspathStorage implements StateStorage { } @NotNull - public static String getStorageType(final Module module) { - final String id = module.getOptionValue(CLASSPATH_OPTION); - return id != null ? id : DEFAULT_STORAGE; - } - - public static String getModuleDir(final Module module) { + public static String getModuleDir(@NotNull Module module) { return new File(module.getModuleFilePath()).getParent(); } @@ -278,38 +273,38 @@ public class ClasspathStorage implements StateStorage { } } - public static void setStorageType(final ModuleRootModel model, final String storageID) { + public static void setStorageType(@NotNull ModuleRootModel model, @NotNull String storageID) { final Module module = model.getModule(); - final String oldStorageType = getStorageType(module); + final String oldStorageType = ClassPathStorageUtil.getStorageType(module); if (oldStorageType.equals(storageID)) { return; } getProvider(oldStorageType).detach(module); - if (storageID.equals(DEFAULT_STORAGE)) { - module.clearOption(CLASSPATH_OPTION); + if (storageID.equals(ClassPathStorageUtil.DEFAULT_STORAGE)) { + module.clearOption(ClassPathStorageUtil.CLASSPATH_OPTION); module.clearOption(CLASSPATH_DIR_OPTION); } else { - module.setOption(CLASSPATH_OPTION, storageID); + module.setOption(ClassPathStorageUtil.CLASSPATH_OPTION, storageID); module.setOption(CLASSPATH_DIR_OPTION, getProvider(storageID).getContentRoot(model)); } } public static void moduleRenamed(Module module, String newName) { - getProvider(getStorageType(module)).moduleRenamed(module, newName); + getProvider(ClassPathStorageUtil.getStorageType(module)).moduleRenamed(module, newName); } public static void modulePathChanged(Module module, String path) { - getProvider(getStorageType(module)).modulePathChanged(module, path); + getProvider(ClassPathStorageUtil.getStorageType(module)).modulePathChanged(module, path); } private static class DefaultStorageProvider implements ClasspathStorageProvider { @Override @NonNls public String getID() { - return DEFAULT_STORAGE; + return ClassPathStorageUtil.DEFAULT_STORAGE; } @Override diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/storage/ClassPathStorageUtil.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/storage/ClassPathStorageUtil.java new file mode 100644 index 000000000000..a2d9c7572019 --- /dev/null +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/storage/ClassPathStorageUtil.java @@ -0,0 +1,37 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.roots.impl.storage; + +import com.intellij.openapi.module.Module; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jps.model.serialization.JpsProjectLoader; + +public class ClassPathStorageUtil { + @NonNls public static final String DEFAULT_STORAGE = "default"; + @NonNls public static final String CLASSPATH_OPTION = JpsProjectLoader.CLASSPATH_ATTRIBUTE; + + public static boolean isDefaultStorage(@NotNull Module module) { + final String storageType = getStorageType(module); + return storageType.equals(DEFAULT_STORAGE); + } + + @NotNull + public static String getStorageType(@NotNull Module module) { + final String id = module.getOptionValue(CLASSPATH_OPTION); + return id == null ? DEFAULT_STORAGE : id; + } +} diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseClasspathStorageProvider.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseClasspathStorageProvider.java index e458970c8823..6787a9c448cd 100644 --- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseClasspathStorageProvider.java +++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseClasspathStorageProvider.java @@ -21,6 +21,7 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.roots.*; import com.intellij.openapi.roots.impl.RootModelImpl; +import com.intellij.openapi.roots.impl.storage.ClassPathStorageUtil; import com.intellij.openapi.roots.impl.storage.ClasspathStorage; import com.intellij.openapi.roots.impl.storage.ClasspathStorageProvider; import com.intellij.openapi.roots.libraries.Library; @@ -29,7 +30,7 @@ import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import org.jdom.Document; import org.jdom.Element; @@ -55,16 +56,19 @@ import java.util.Set; public class EclipseClasspathStorageProvider implements ClasspathStorageProvider { public static final String DESCR = EclipseBundle.message("eclipse.classpath.storage.description"); + @Override @NonNls public String getID() { return JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID; } + @Override @Nls public String getDescription() { return DESCR; } + @Override public void assertCompatible(final ModuleRootModel model) throws ConfigurationException { final String moduleName = model.getModule().getName(); for (OrderEntry entry : model.getOrderEntries()) { @@ -91,7 +95,7 @@ public class EclipseClasspathStorageProvider implements ClasspathStorageProvider final String output = model.getModuleExtension(CompilerModuleExtension.class).getCompilerOutputUrl(); final String contentRoot = getContentRoot(model); if (output == null || - !StringUtil.startsWith(VfsUtil.urlToPath(output), contentRoot) && + !StringUtil.startsWith(VfsUtilCore.urlToPath(output), contentRoot) && PathMacroManager.getInstance(model.getModule()).collapsePath(output).equals(output)) { throw new ConfigurationException("Module \'" + moduleName + @@ -99,14 +103,17 @@ public class EclipseClasspathStorageProvider implements ClasspathStorageProvider } } + @Override public void detach(Module module) { EclipseModuleManagerImpl.getInstance(module).setDocumentSet(null); } + @Override public ClasspathConverter createConverter(Module module) { return new EclipseClasspathConverter(module); } + @Override public String getContentRoot(ModuleRootModel model) { final VirtualFile contentRoot = EPathUtil.getContentRoot(model); if (contentRoot != null) return contentRoot.getPath(); @@ -145,8 +152,9 @@ public class EclipseClasspathStorageProvider implements ClasspathStorageProvider return fileCache; } + @Override public void moduleRenamed(final Module module, String newName) { - if (ClasspathStorage.getStorageType(module).equals(JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID)) { + if (ClassPathStorageUtil.getStorageType(module).equals(JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID)) { try { final CachedXmlDocumentSet documentSet = getFileCache(module); @@ -184,10 +192,12 @@ public class EclipseClasspathStorageProvider implements ClasspathStorageProvider this.module = module; } + @Override public CachedXmlDocumentSet getFileSet() { return getFileCache(module); } + @Override public Set getClasspath(ModifiableRootModel model, final Element element) throws IOException, InvalidDataException { try { final HashSet usedVariables = new HashSet(); @@ -225,6 +235,7 @@ public class EclipseClasspathStorageProvider implements ClasspathStorageProvider } } + @Override public void setClasspath(final ModuleRootModel model) throws IOException, WriteExternalException { try { final Element classpathElement = new Element(EclipseXml.CLASSPATH_TAG); diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseModuleManagerImpl.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseModuleManagerImpl.java index 0450e375ab64..30147f28f02d 100644 --- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseModuleManagerImpl.java +++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseModuleManagerImpl.java @@ -21,7 +21,7 @@ import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleServiceManager; -import com.intellij.openapi.roots.impl.storage.ClasspathStorage; +import com.intellij.openapi.roots.impl.storage.ClassPathStorageUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.ArrayUtil; import org.jdom.Element; @@ -174,7 +174,7 @@ public class EclipseModuleManagerImpl implements EclipseModuleManager, Persisten @Override public Element getState() { - if (!ClasspathStorage.getStorageType(myModule).equals(JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID)) { + if (!ClassPathStorageUtil.getStorageType(myModule).equals(JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID)) { if (!myEclipseUrls.isEmpty() || !myEclipseVariablePaths.isEmpty() || myForceConfigureJDK || !myUnknownCons.isEmpty()) { Element root = new Element("EclipseModuleSettings"); for (String eclipseUrl : myEclipseUrls) { diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseImportBuilder.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseImportBuilder.java index fdbea3cafb7b..93304b6db0c8 100644 --- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseImportBuilder.java +++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseImportBuilder.java @@ -36,6 +36,7 @@ import com.intellij.openapi.project.impl.ProjectMacrosUtil; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.impl.ModifiableModelCommitter; +import com.intellij.openapi.roots.impl.storage.ClassPathStorageUtil; import com.intellij.openapi.roots.impl.storage.ClasspathStorage; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.LibraryTable; @@ -173,7 +174,7 @@ public class EclipseImportBuilder extends ProjectImportBuilder implement public boolean validate(final Project currentProject, final Project dstProject) { final Ref refEx = new Ref(); final HashSet variables = new HashSet(); - final Map naturesNames = new HashMap(); + final Map naturesNames = new HashMap(); final List projectsToConvert = getParameters().projectsToConvert; final boolean oneProjectToConvert = projectsToConvert.size() == 1; final String separator = oneProjectToConvert ? "
" : ", "; @@ -333,7 +334,7 @@ public class EclipseImportBuilder extends ProjectImportBuilder implement EclipseClasspathReader.setOutputUrl(rootModel, path + "/bin"); } ClasspathStorage.setStorageType(rootModel, - getParameters().linkConverted ? JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID : ClasspathStorage.DEFAULT_STORAGE); + getParameters().linkConverted ? JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID : ClassPathStorageUtil.DEFAULT_STORAGE); if (model != null) { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() {