diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/openapi/roots')
5 files changed, 31 insertions, 30 deletions
diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/ExportableApplicationLibraryTable.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/ExportableApplicationLibraryTable.java index 4be66eedde76..c3bed20a5052 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/ExportableApplicationLibraryTable.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/libraries/ExportableApplicationLibraryTable.java @@ -27,10 +27,7 @@ import java.io.File; */ @State( name = "libraryTable", - roamingType = RoamingType.DISABLED, - storages = { - @Storage( file = StoragePathMacros.APP_CONFIG + "/applicationLibraries.xml") - } + storages = {@Storage(file = StoragePathMacros.APP_CONFIG + "/applicationLibraries.xml", roamingType = RoamingType.DISABLED)} ) public class ExportableApplicationLibraryTable extends ApplicationLibraryTable implements ExportableComponent { @Override 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 b1f034d2dcb2..36e344ff0acc 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 @@ -39,8 +39,6 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.*; import com.intellij.openapi.vfs.tracker.VirtualFileTracker; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.io.fs.FileSystem; -import com.intellij.util.io.fs.IFile; import com.intellij.util.messages.MessageBus; import org.jdom.Element; import org.jetbrains.annotations.Nls; @@ -104,7 +102,7 @@ public class ClasspathStorage implements StateStorage { @Override @Nullable - public <T> T getState(final Object component, final String componentName, Class<T> stateClass, @Nullable T mergeInto) + public <T> T getState(final Object component, @NotNull final String componentName, Class<T> stateClass, @Nullable T mergeInto) throws StateStorageException { assert component instanceof ModuleRootManager; assert componentName.equals("NewModuleRootManager"); @@ -144,7 +142,7 @@ public class ClasspathStorage implements StateStorage { } @Override - public boolean hasState(final Object component, final String componentName, final Class<?> aClass, final boolean reloadData) + public boolean hasState(final Object component, @NotNull final String componentName, final Class<?> aClass, final boolean reloadData) throws StateStorageException { return true; } @@ -192,10 +190,9 @@ public class ClasspathStorage implements StateStorage { return session; } - private static void convert2Io(List<IFile> list, ArrayList<VirtualFile> virtualFiles) { + private static void convert2Io(List<File> list, ArrayList<VirtualFile> virtualFiles) { for (VirtualFile virtualFile : virtualFiles) { - final File ioFile = VfsUtilCore.virtualToIoFile(virtualFile); - list.add(FileSystem.FILE_SYSTEM.createFile(ioFile.getAbsolutePath())); + list.add(VfsUtilCore.virtualToIoFile(virtualFile)); } } @@ -384,12 +381,12 @@ public class ClasspathStorage implements StateStorage { } @Override - public Set<String> getClasspath(final ModifiableRootModel model, final Element element) throws IOException, InvalidDataException { + public Set<String> getClasspath(final ModifiableRootModel model, final Element element) throws InvalidDataException { throw new InvalidDataException(getDescription()); } @Override - public void setClasspath(ModuleRootModel model) throws IOException, WriteExternalException { + public void setClasspath(ModuleRootModel model) throws WriteExternalException { throw new WriteExternalException(getDescription()); } }; @@ -426,9 +423,9 @@ public class ClasspathStorage implements StateStorage { @NotNull @Override - public Collection<IFile> getStorageFilesToSave() throws StateStorageException { + public Collection<File> getStorageFilesToSave() throws StateStorageException { if (needsSave()) { - final List<IFile> list = new ArrayList<IFile>(); + final List<File> list = new ArrayList<File>(); final ArrayList<VirtualFile> virtualFiles = new ArrayList<VirtualFile>(); getFileSet().listModifiedFiles(virtualFiles); convert2Io(list, virtualFiles); @@ -441,9 +438,9 @@ public class ClasspathStorage implements StateStorage { @NotNull @Override - public List<IFile> getAllStorageFiles() { - final List<IFile> list = new ArrayList<IFile>(); - final ArrayList<VirtualFile> virtualFiles = new ArrayList<VirtualFile>(); + public List<File> getAllStorageFiles() { + List<File> list = new ArrayList<File>(); + ArrayList<VirtualFile> virtualFiles = new ArrayList<VirtualFile>(); getFileSet().listFiles(virtualFiles); convert2Io(list, virtualFiles); return list; diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/RootDetectionUtil.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/RootDetectionUtil.java index 5a3efe1a31b7..ca273ba2373d 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/RootDetectionUtil.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/impl/RootDetectionUtil.java @@ -70,7 +70,7 @@ public class RootDetectionUtil { try { for (VirtualFile rootCandidate : rootCandidates) { final Collection<DetectedLibraryRoot> roots = detector.detectRoots(rootCandidate, indicator); - if (!roots.isEmpty() && allRootsHaveOneTypeAndEqualTo(roots, rootCandidate)) { + if (!roots.isEmpty() && allRootsHaveOneTypeAndEqualToOrAreDirectParentOf(roots, rootCandidate)) { for (DetectedLibraryRoot root : roots) { final LibraryRootType libraryRootType = root.getTypes().get(0); result.add(new OrderRoot(root.getFile(), libraryRootType.getType(), libraryRootType.isJarDirectory())); @@ -81,7 +81,7 @@ public class RootDetectionUtil { final HashMap<LibraryRootType, String> names = new HashMap<LibraryRootType, String>(); for (LibraryRootType type : root.getTypes()) { final String typeName = detector.getRootTypeName(type); - LOG.assertTrue(typeName != null, "Unexpected root type " + type.getType().name() + (type.isJarDirectory() ? " (jar directory)" : "") + ", detectors: " + detector); + LOG.assertTrue(typeName != null, "Unexpected root type " + type.getType().name() + (type.isJarDirectory() ? " (JAR directory)" : "") + ", detectors: " + detector); names.put(type, typeName); } suggestedRoots.add(new SuggestedChildRootInfo(rootCandidate, root, names)); @@ -141,9 +141,9 @@ public class RootDetectionUtil { return result; } - private static boolean allRootsHaveOneTypeAndEqualTo(Collection<DetectedLibraryRoot> roots, VirtualFile candidate) { + private static boolean allRootsHaveOneTypeAndEqualToOrAreDirectParentOf(Collection<DetectedLibraryRoot> roots, VirtualFile candidate) { for (DetectedLibraryRoot root : roots) { - if (root.getTypes().size() > 1 || !root.getFile().equals(candidate)) { + if (root.getTypes().size() > 1 || !root.getFile().equals(candidate) && !root.getFile().equals(candidate.getParent())) { return false; } } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ModulesAlphaComparator.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ModulesAlphaComparator.java index 8a561e4003b4..61a5c71861c3 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ModulesAlphaComparator.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ModulesAlphaComparator.java @@ -29,8 +29,9 @@ public class ModulesAlphaComparator implements Comparator<Module>{ @Override public int compare(Module module1, Module module2) { - final String name1 = module1.getName(); - final String name2 = module2.getName(); - return name1.compareToIgnoreCase(name2); + if (module1 == null && module2 == null) return 0; + if (module1 == null && module2 != null) return -1; + if (module1 != null && module2 == null) return 1; + return module1.getName().compareToIgnoreCase(module2.getName()); } } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java index e4c690ec05ed..87df147a745f 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java @@ -86,6 +86,15 @@ public class ProjectSdksModel implements SdkModel { } public void reset(@Nullable Project project) { + resetSdkModel(); + if (project != null) { + myProjectSdk = findSdk(ProjectRootManager.getInstance(project).getProjectSdkName()); + } + myModified = false; + myInitialized = true; + } + + private void resetSdkModel() { myProjectSdks.clear(); final Sdk[] projectSdks = ProjectJdkTable.getInstance().getAllJdks(); for (Sdk sdk : projectSdks) { @@ -96,11 +105,6 @@ public class ProjectSdksModel implements SdkModel { LOG.error(e); } } - if (project != null) { - myProjectSdk = findSdk(ProjectRootManager.getInstance(project).getProjectSdkName()); - } - myModified = false; - myInitialized = true; } public void disposeUIResources() { @@ -154,6 +158,7 @@ public class ProjectSdksModel implements SdkModel { for (Sdk originalJdk : itemsInTable) { final Sdk modifiedJdk = myProjectSdks.get(originalJdk); LOG.assertTrue(modifiedJdk != null); + LOG.assertTrue(originalJdk != modifiedJdk); jdkTable.updateJdk(originalJdk, modifiedJdk); } // Add new items to table @@ -166,6 +171,7 @@ public class ProjectSdksModel implements SdkModel { } } }); + resetSdkModel(); myModified = false; } |