move some methods from lang-impl to ClassPathUtil

This commit is contained in:
Alexey Kudravtsev
2013-05-08 11:43:47 +04:00
parent 1b6b70f32d
commit b5ef5dbd09
7 changed files with 79 additions and 33 deletions
@@ -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() {
@@ -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<ModuleRootManagerImpl> {
@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};
}
@@ -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<String> changedComponents) throws StateStorageException {
public void reload(@NotNull final Set<String> 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<ClasspathStorageProvider> getProviders() {
final List<ClasspathStorageProvider> list = new ArrayList<ClasspathStorageProvider>();
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
@@ -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;
}
}
@@ -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<String> getClasspath(ModifiableRootModel model, final Element element) throws IOException, InvalidDataException {
try {
final HashSet<String> usedVariables = new HashSet<String>();
@@ -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);
@@ -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) {
@@ -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<String> implement
public boolean validate(final Project currentProject, final Project dstProject) {
final Ref<Exception> refEx = new Ref<Exception>();
final HashSet<String> variables = new HashSet<String>();
final Map<String, String> naturesNames = new HashMap<String, String>();
final Map<String, String> naturesNames = new HashMap<String, String>();
final List<String> projectsToConvert = getParameters().projectsToConvert;
final boolean oneProjectToConvert = projectsToConvert.size() == 1;
final String separator = oneProjectToConvert ? "<br>" : ", ";
@@ -333,7 +334,7 @@ public class EclipseImportBuilder extends ProjectImportBuilder<String> 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() {