From 24123c452a0517283c335f3ead53d38df6347e0d Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Mon, 27 Sep 2010 20:41:52 +0400 Subject: [PATCH 1/3] UI: layout in Update info dialog (IDEA-58279) --- .../updateSettings/impl/NoUpdatesPanel.form | 33 +++++++------------ 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/NoUpdatesPanel.form b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/NoUpdatesPanel.form index 3630f21980a5..d5da892ed764 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/NoUpdatesPanel.form +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/NoUpdatesPanel.form @@ -1,36 +1,35 @@
- + + - + - + - - + - + + - - + - + - @@ -45,25 +44,17 @@ - - + - - - - - - - + - - + From d82d2b46c324b659a7993c0690fe5d4136962115 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Tue, 28 Sep 2010 11:36:39 +0400 Subject: [PATCH 2/3] maven: npe fix in 'add dependency' action + notnulls --- .../generate/GenerateDependencyAction.java | 13 +++- .../GenerateManagedDependencyAction.java | 2 +- .../dom/generate/GenerateParentAction.java | 3 +- .../dom/generate/MavenGenerateProvider.java | 4 +- .../AddMavenDependencyQuickFix.java | 6 +- .../maven/project/MavenEmbeddersManager.java | 4 +- .../maven/project/MavenProjectsManager.java | 70 +++++++++++-------- .../idea/maven/project/MavenProjectsTree.java | 67 +++++++++--------- 8 files changed, 99 insertions(+), 70 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateDependencyAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateDependencyAction.java index 709f220af210..287e745ff927 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateDependencyAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateDependencyAction.java @@ -18,26 +18,33 @@ package org.jetbrains.idea.maven.dom.generate; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiDocumentManager; import com.intellij.util.xml.ui.actions.generate.GenerateDomElementAction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.dom.MavenDomBundle; import org.jetbrains.idea.maven.dom.model.MavenDomDependency; import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel; import org.jetbrains.idea.maven.indices.MavenArtifactSearchDialog; import org.jetbrains.idea.maven.model.MavenId; +import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.project.MavenProjectsManager; import org.jetbrains.idea.maven.utils.MavenIcons; public class GenerateDependencyAction extends GenerateDomElementAction { public GenerateDependencyAction() { super(new MavenGenerateProvider(MavenDomBundle.message("generate.dependency"), MavenDomDependency.class) { + @Nullable @Override - protected MavenDomDependency doGenerate(MavenDomProjectModel mavenModel, Editor editor) { + protected MavenDomDependency doGenerate(@NotNull MavenDomProjectModel mavenModel, Editor editor) { + MavenProjectsManager manager = MavenProjectsManager.getInstance(editor.getProject()); + MavenProject project = manager.findProject(mavenModel.getModule()); + if (project == null) return null; + MavenId id = MavenArtifactSearchDialog.searchForArtifact(editor.getProject()); if (id == null) return null; PsiDocumentManager.getInstance(mavenModel.getManager().getProject()).commitAllDocuments(); - MavenProjectsManager manager = MavenProjectsManager.getInstance(editor.getProject()); - return manager.addDependency(manager.findProject(mavenModel.getModule()), id); + return manager.addDependency(project, id); } }, MavenIcons.DEPENDENCY_ICON); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateManagedDependencyAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateManagedDependencyAction.java index 1ada0f64cb42..e195d5dc1646 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateManagedDependencyAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateManagedDependencyAction.java @@ -50,7 +50,7 @@ public class GenerateManagedDependencyAction extends GenerateDomElementAction { } @Override - protected MavenDomDependency doGenerate(final MavenDomProjectModel mavenModel, final Editor editor) { + protected MavenDomDependency doGenerate(@NotNull final MavenDomProjectModel mavenModel, final Editor editor) { Set managingDependencies = collectManagingDependencies(mavenModel); List dependenciesToOverride = diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateParentAction.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateParentAction.java index 3d4bb7b4aaa8..a0314d4de3f6 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateParentAction.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/GenerateParentAction.java @@ -20,6 +20,7 @@ import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Editor; import com.intellij.util.xml.DomUtil; import com.intellij.util.xml.ui.actions.generate.GenerateDomElementAction; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.dom.MavenDomBundle; import org.jetbrains.idea.maven.dom.MavenDomUtil; import org.jetbrains.idea.maven.dom.model.MavenDomParent; @@ -31,7 +32,7 @@ import org.jetbrains.idea.maven.utils.MavenIcons; public class GenerateParentAction extends GenerateDomElementAction { public GenerateParentAction() { super(new MavenGenerateProvider(MavenDomBundle.message("generate.parent"), MavenDomParent.class) { - protected MavenDomParent doGenerate(final MavenDomProjectModel mavenModel, Editor editor) { + protected MavenDomParent doGenerate(@NotNull final MavenDomProjectModel mavenModel, Editor editor) { SelectMavenProjectDialog d = new SelectMavenProjectDialog(editor.getProject(), null); d.show(); if (!d.isOK()) return null; diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/MavenGenerateProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/MavenGenerateProvider.java index 0ba866addb53..0f72abeda034 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/MavenGenerateProvider.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/generate/MavenGenerateProvider.java @@ -37,10 +37,12 @@ public abstract class MavenGenerateProvider ext @Override public ELEMENT_TYPE generate(@Nullable DomElement parent, Editor editor) { + if (parent == null) return null; return doGenerate((MavenDomProjectModel)parent, editor); } - protected abstract ELEMENT_TYPE doGenerate(MavenDomProjectModel mavenModel, Editor editor); + @Nullable + protected abstract ELEMENT_TYPE doGenerate(@NotNull MavenDomProjectModel mavenModel, Editor editor); @Override public boolean isAvailableForElement(@NotNull DomElement el) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/intentions/AddMavenDependencyQuickFix.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/intentions/AddMavenDependencyQuickFix.java index f54784386e4d..9633e031f5a7 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/intentions/AddMavenDependencyQuickFix.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/intentions/AddMavenDependencyQuickFix.java @@ -49,14 +49,16 @@ public class AddMavenDependencyQuickFix implements IntentionAction, LowPriorityA } public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { - return MavenDomUtil.findContainingMavenizedModule(file) != null; + return MavenDomUtil.findContainingProject(file) != null; } public void invoke(@NotNull final Project project, Editor editor, final PsiFile file) throws IncorrectOperationException { + MavenProject mavenProject = MavenDomUtil.findContainingProject(file); + if (mavenProject == null) return; + MavenId dependency = MavenArtifactSearchDialog.searchForClass(project, getReferenceText()); if (dependency == null) return; - MavenProject mavenProject = MavenProjectsManager.getInstance(project).findProject(MavenDomUtil.findContainingMavenizedModule(file)); MavenProjectsManager.getInstance(project).addDependency(mavenProject, dependency); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenEmbeddersManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenEmbeddersManager.java index 0edc23fdf45e..b21dc1267344 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenEmbeddersManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenEmbeddersManager.java @@ -20,6 +20,7 @@ import com.intellij.openapi.util.Key; import com.intellij.util.Function; import com.intellij.util.containers.SoftValueHashMap; import gnu.trove.THashSet; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.facade.MavenEmbedderWrapper; import org.jetbrains.idea.maven.facade.MavenFacadeManager; import org.jetbrains.idea.maven.utils.MavenLog; @@ -58,6 +59,7 @@ public class MavenEmbeddersManager { myEmbeddersToClear.addAll(myEmbeddersInUse); } + @NotNull public synchronized MavenEmbedderWrapper getEmbedder(Key kind) { MavenEmbedderWrapper result = myPool.get(kind); if (result == null) { @@ -74,7 +76,7 @@ public class MavenEmbeddersManager { return result; } - public synchronized void release(MavenEmbedderWrapper embedder) { + public synchronized void release(@NotNull MavenEmbedderWrapper embedder) { if (!myEmbeddersInUse.contains(embedder)) { embedder.release(); myEmbeddersToClear.remove(embedder); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java index 1a50739f30e6..bbd5cf340319 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java @@ -455,33 +455,36 @@ public class MavenProjectsManager extends SimpleProjectComponent } } - public void addManagedFiles(List files) { + public void addManagedFiles(@NotNull List files) { addManagedFilesWithProfiles(files, Collections.emptyList()); } - public void removeManagedFiles(List files) { + public void removeManagedFiles(@NotNull List files) { myWatcher.removeManagedFiles(files); } - public boolean isManagedFile(VirtualFile f) { + public boolean isManagedFile(@NotNull VirtualFile f) { if (!isInitialized()) return false; return myProjectsTree.isManagedFile(f); } + @NotNull public Collection getExplicitProfiles() { if (!isInitialized()) return Collections.emptyList(); return myProjectsTree.getExplicitProfiles(); } - public void setExplicitProfiles(Collection profiles) { + public void setExplicitProfiles(@NotNull Collection profiles) { myWatcher.setExplicitProfiles(profiles); } + @NotNull public Collection getAvailableProfiles() { if (!isInitialized()) return Collections.emptyList(); return myProjectsTree.getAvailableProfiles(); } + @NotNull public Collection> getProfilesWithStates() { if (!isInitialized()) return Collections.emptyList(); return myProjectsTree.getProfilesWithStates(); @@ -492,37 +495,44 @@ public class MavenProjectsManager extends SimpleProjectComponent return myProjectsTree.hasProjects(); } + @NotNull public List getProjects() { if (!isInitialized()) return Collections.emptyList(); return myProjectsTree.getProjects(); } + @NotNull public List getNonIgnoredProjects() { if (!isInitialized()) return Collections.emptyList(); return myProjectsTree.getNonIgnoredProjects(); } + @NotNull public List getProjectsFiles() { if (!isInitialized()) return Collections.emptyList(); return myProjectsTree.getProjectsFiles(); } - public MavenProject findProject(VirtualFile f) { + @Nullable + public MavenProject findProject(@NotNull VirtualFile f) { if (!isInitialized()) return null; return myProjectsTree.findProject(f); } - public MavenProject findProject(MavenId id) { + @Nullable + public MavenProject findProject(@NotNull MavenId id) { if (!isInitialized()) return null; return myProjectsTree.findProject(id); } - public MavenProject findProject(MavenArtifact artifact) { + @Nullable + public MavenProject findProject(@NotNull MavenArtifact artifact) { if (!isInitialized()) return null; return myProjectsTree.findProject(artifact); } - public MavenProject findProject(Module module) { + @Nullable + public MavenProject findProject(@NotNull Module module) { VirtualFile f = findPomFile(module, new MavenModelsProvider() { public Module[] getModules() { throw new UnsupportedOperationException(); @@ -536,7 +546,7 @@ public class MavenProjectsManager extends SimpleProjectComponent } @Nullable - public Module findModule(MavenProject project) { + public Module findModule(@NotNull MavenProject project) { if (!isInitialized()) return null; return ProjectRootManager.getInstance(myProject).getFileIndex().getModuleForFile(project.getFile()); } @@ -547,13 +557,15 @@ public class MavenProjectsManager extends SimpleProjectComponent return myProjectsTree.findInheritors(parent); } - public MavenProject findContainingProject(VirtualFile file) { + @Nullable + public MavenProject findContainingProject(@NotNull VirtualFile file) { if (!isInitialized()) return null; Module module = ProjectRootManager.getInstance(myProject).getFileIndex().getModuleForFile(file); return module == null ? null : findProject(module); } - private static VirtualFile findPomFile(Module module, MavenModelsProvider modelsProvider) { + @Nullable + private static VirtualFile findPomFile(@NotNull Module module, @NotNull MavenModelsProvider modelsProvider) { for (VirtualFile root : modelsProvider.getContentRoots(module)) { final VirtualFile virtualFile = root.findChild(MavenConstants.POM_XML); if (virtualFile != null) { @@ -563,47 +575,51 @@ public class MavenProjectsManager extends SimpleProjectComponent return null; } - public MavenProject findAggregator(MavenProject module) { + @Nullable + public MavenProject findAggregator(@NotNull MavenProject module) { if (!isInitialized()) return null; return myProjectsTree.findAggregator(module); } - public List getModules(MavenProject aggregator) { + @NotNull + public List getModules(@NotNull MavenProject aggregator) { if (!isInitialized()) return Collections.emptyList(); return myProjectsTree.getModules(aggregator); } + @NotNull public List getIgnoredFilesPaths() { if (!isInitialized()) return Collections.emptyList(); return myProjectsTree.getIgnoredFilesPaths(); } - public void setIgnoredFilesPaths(List paths) { + public void setIgnoredFilesPaths(@NotNull List paths) { if (!isInitialized()) return; myProjectsTree.setIgnoredFilesPaths(paths); } - public boolean getIgnoredState(MavenProject project) { + public boolean getIgnoredState(@NotNull MavenProject project) { if (!isInitialized()) return false; return myProjectsTree.getIgnoredState(project); } - public void setIgnoredState(List projects, boolean ignored) { + public void setIgnoredState(@NotNull List projects, boolean ignored) { if (!isInitialized()) return; myProjectsTree.setIgnoredState(projects, ignored); } + @NotNull public List getIgnoredFilesPatterns() { if (!isInitialized()) return Collections.emptyList(); return myProjectsTree.getIgnoredFilesPatterns(); } - public void setIgnoredFilesPatterns(List patterns) { + public void setIgnoredFilesPatterns(@NotNull List patterns) { if (!isInitialized()) return; myProjectsTree.setIgnoredFilesPatterns(patterns); } - public boolean isIgnored(MavenProject project) { + public boolean isIgnored(@NotNull MavenProject project) { if (!isInitialized()) return false; return myProjectsTree.isIgnored(project); } @@ -627,7 +643,7 @@ public class MavenProjectsManager extends SimpleProjectComponent doScheduleUpdateProjects(null, false, forceImport); } - public void forceUpdateProjects(Collection projects) { + public void forceUpdateProjects(@NotNull Collection projects) { doScheduleUpdateProjects(projects, true, true); } @@ -945,8 +961,9 @@ public class MavenProjectsManager extends SimpleProjectComponent VirtualFileManager.getInstance().refresh(isNormalProject()); - if (postTasks.get() != null /*may be null if importing is cancelled*/) + if (postTasks.get() != null /*may be null if importing is cancelled*/) { schedulePostImportTasks(postTasks.get()); + } // do not block user too often myImportingQueue.restartTimer(); @@ -972,16 +989,13 @@ public class MavenProjectsManager extends SimpleProjectComponent return result; } - public MavenDomDependency addOverridenDependency(final MavenProject mavenProject, final MavenId id) { - return addDependency(mavenProject, id, true); - } - - - public MavenDomDependency addDependency(final MavenProject mavenProject, final MavenId id) { + public MavenDomDependency addDependency(@NotNull MavenProject mavenProject, @NotNull MavenId id) { return addDependency(mavenProject, id, false); } - public MavenDomDependency addDependency(final MavenProject mavenProject, final MavenId id, final boolean overridden) { + public MavenDomDependency addDependency(@NotNull final MavenProject mavenProject, + @NotNull final MavenId id, + final boolean overridden) { final MavenArtifact[] artifact = new MavenArtifact[1]; try { @@ -1019,7 +1033,7 @@ public class MavenProjectsManager extends SimpleProjectComponent return FileEditorManager.getInstance(myProject).getSelectedTextEditor(); } - public void addManagerListener(Listener listener) { + public void addManagerListener(Listener listener) { myManagerListeners.add(listener); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java index 88647d1b8d02..e0dfcb9af82b 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java @@ -30,6 +30,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.Stack; import gnu.trove.THashMap; import gnu.trove.THashSet; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import org.jetbrains.idea.maven.facade.MavenEmbedderWrapper; @@ -981,12 +982,12 @@ public class MavenProjectsTree { return result; } - public void resolve(MavenProject mavenProject, - MavenGeneralSettings generalSettings, - MavenEmbeddersManager embeddersManager, - MavenConsole console, - MavenProgressIndicator process, - Object message) throws MavenProcessCanceledException { + public void resolve(@NotNull MavenProject mavenProject, + @NotNull MavenGeneralSettings generalSettings, + @NotNull MavenEmbeddersManager embeddersManager, + @NotNull MavenConsole console, + @NotNull MavenProgressIndicator process, + @Nullable Object message) throws MavenProcessCanceledException { MavenEmbedderWrapper embedder = embeddersManager.getEmbedder(MavenEmbeddersManager.FOR_DEPENDENCIES_RESOLVE); embedder.customizeForResolve(getProjectIdToFileMapping(), console, process); @@ -1006,11 +1007,11 @@ public class MavenProjectsTree { } } - public void resolvePlugins(MavenProject mavenProject, - NativeMavenProjectHolder nativeMavenProject, - MavenEmbeddersManager embeddersManager, - MavenConsole console, - MavenProgressIndicator process) throws MavenProcessCanceledException { + public void resolvePlugins(@NotNull MavenProject mavenProject, + @NotNull NativeMavenProjectHolder nativeMavenProject, + @NotNull MavenEmbeddersManager embeddersManager, + @NotNull MavenConsole console, + @NotNull MavenProgressIndicator process) throws MavenProcessCanceledException { MavenEmbedderWrapper embedder = embeddersManager.getEmbedder(MavenEmbeddersManager.FOR_PLUGINS_RESOLVE); embedder.customizeForResolve(console, process); embedder.clearCachesFor(mavenProject.getMavenId()); @@ -1029,12 +1030,12 @@ public class MavenProjectsTree { } } - public void resolveFolders(final MavenProject mavenProject, - final MavenImportingSettings importingSettings, - final MavenEmbeddersManager embeddersManager, - final MavenConsole console, - final MavenProgressIndicator process, - final Object message) throws MavenProcessCanceledException { + public void resolveFolders(@NotNull final MavenProject mavenProject, + @NotNull final MavenImportingSettings importingSettings, + @NotNull final MavenEmbeddersManager embeddersManager, + @NotNull final MavenConsole console, + @NotNull final MavenProgressIndicator process, + @Nullable final Object message) throws MavenProcessCanceledException { executeWithEmbedder(mavenProject, embeddersManager, MavenEmbeddersManager.FOR_FOLDERS_RESOLVE, @@ -1060,13 +1061,13 @@ public class MavenProjectsTree { /** * @return list of unresolved artifacts */ - public MavenArtifactDownloader.DownloadResult downloadArtifacts(Collection projects, + public MavenArtifactDownloader.DownloadResult downloadArtifacts(@NotNull Collection projects, @Nullable Collection artifacts, boolean downloadSources, boolean downloadDocs, - MavenEmbeddersManager embeddersManager, - MavenConsole console, - MavenProgressIndicator process) + @NotNull MavenEmbeddersManager embeddersManager, + @NotNull MavenConsole console, + @NotNull MavenProgressIndicator process) throws MavenProcessCanceledException { MavenEmbedderWrapper embedder = embeddersManager.getEmbedder(MavenEmbeddersManager.FOR_DOWNLOAD); embedder.customizeForResolve(console, process); @@ -1085,16 +1086,16 @@ public class MavenProjectsTree { } } - public static MavenArtifact downloadArtifact(MavenProject mavenProject, - MavenId id, - MavenEmbeddersManager embeddersManager, - MavenConsole console, - MavenProgressIndicator process) throws MavenProcessCanceledException { + public static MavenArtifact downloadArtifact(@NotNull MavenProject mavenProject, + @NotNull MavenId id, + @NotNull MavenEmbeddersManager embeddersManager, + @NotNull MavenConsole console, + @NotNull MavenProgressIndicator process) throws MavenProcessCanceledException { MavenEmbedderWrapper embedder = embeddersManager.getEmbedder(MavenEmbeddersManager.FOR_DOWNLOAD); embedder.customizeForResolve(console, process); try { - MavenArtifact result = embedder.resolve(new MavenArtifactInfo(id, MavenConstants.TYPE_JAR, null), + MavenArtifact result = embedder.resolve(new MavenArtifactInfo(id, MavenConstants.TYPE_JAR, null), mavenProject.getRemoteRepositories()); result.setScope(MavenConstants.SCOPE_COMPILE); return result; @@ -1104,12 +1105,12 @@ public class MavenProjectsTree { } } - public void executeWithEmbedder(MavenProject mavenProject, - MavenEmbeddersManager embeddersManager, - Key embedderKind, - MavenConsole console, - MavenProgressIndicator process, - EmbedderTask task) throws MavenProcessCanceledException { + public void executeWithEmbedder(@NotNull MavenProject mavenProject, + @NotNull MavenEmbeddersManager embeddersManager, + @NotNull Key embedderKind, + @NotNull MavenConsole console, + @NotNull MavenProgressIndicator process, + @NotNull EmbedderTask task) throws MavenProcessCanceledException { MavenEmbedderWrapper embedder = embeddersManager.getEmbedder(embedderKind); embedder.customizeForStrictResolve(getProjectIdToFileMapping(), console, process); embedder.clearCachesFor(mavenProject.getMavenId()); From 19c076a590c3a2e378851d8c0a23f206c832ca05 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 28 Sep 2010 11:56:29 +0400 Subject: [PATCH 3/3] only fully compatible libraries are shown in framework support dialog and option to use existing library is selected by default --- .../LibraryCompositionOptionsPanel.form | 29 +---- .../LibraryCompositionOptionsPanel.java | 52 --------- .../libraries/LibraryCompositionSettings.java | 24 ++-- .../ui/libraries/LibraryOptionsPanel.form | 46 ++++---- .../ui/libraries/LibraryOptionsPanel.java | 103 +++++++++--------- 5 files changed, 92 insertions(+), 162 deletions(-) diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.form b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.form index 80b2cf41add5..5508344c68a6 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.form +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.form @@ -1,6 +1,6 @@ - + @@ -38,7 +38,7 @@ - + @@ -179,32 +179,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java index 4d9f99ef272c..70a78ebb15ca 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java @@ -23,8 +23,6 @@ import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.project.ProjectBundle; -import com.intellij.openapi.roots.OrderRootType; -import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.ui.VerticalFlowLayout; @@ -53,7 +51,6 @@ import java.util.Set; public class LibraryCompositionOptionsPanel { private final MutualMap myLibraryLevels = new MutualMap(true); private JPanel myMainPanel; - private JButton myAddLibraryButton; private JButton myAddJarsButton; private JCheckBox myDownloadMissingJarsCheckBox; private TextFieldWithBrowseButton myDirectoryField; @@ -66,10 +63,7 @@ public class LibraryCompositionOptionsPanel { private JLabel myMissingLibrariesLabel; private JLabel myHiddenLabel; private final List myAddedJars = new ArrayList(); - private final List myUsedLibraries = new ArrayList(); - private final LibrariesContainer myLibrariesContainer; private final LibraryCompositionSettings myLibraryCompositionSettings; - private final List mySuitableLibraries; private final LibraryDownloadingMirrorsMap myMirrorsMap; private List myMirrorPanelsList; @@ -77,7 +71,6 @@ public class LibraryCompositionOptionsPanel { final @NotNull LibraryCompositionSettings libraryCompositionSettings, final @NotNull LibraryDownloadingMirrorsMap mirrorsMap) { - myLibrariesContainer = librariesContainer; myLibraryCompositionSettings = libraryCompositionSettings; myMirrorsMap = mirrorsMap; addMirrorsPanels(); @@ -85,17 +78,11 @@ public class LibraryCompositionOptionsPanel { myDirectoryField.addBrowseFolderListener(ProjectBundle.message("file.chooser.directory.for.downloaded.libraries.title"), ProjectBundle.message("file.chooser.directory.for.downloaded.libraries.description"), null, FileChooserDescriptorFactory.createSingleFolderDescriptor()); - myUsedLibraries.addAll(myLibraryCompositionSettings.getUsedLibraries()); myAddJarsButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { showFileChooser(); } }); - myAddLibraryButton.addActionListener(new ActionListener() { - public void actionPerformed(final ActionEvent e) { - showLibrariesChooser(); - } - }); myDownloadMissingJarsCheckBox.setSelected(myLibraryCompositionSettings.isDownloadLibraries()); myDownloadMissingJarsCheckBox.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { @@ -103,9 +90,6 @@ public class LibraryCompositionOptionsPanel { } }); - mySuitableLibraries = calculateSuitableLibraries(); - myAddLibraryButton.setEnabled(!mySuitableLibraries.isEmpty()); - myLibraryLevels.put(LibrariesContainer.LibraryLevel.GLOBAL, ProjectBundle.message("combobox.item.global.library")); myLibraryLevels.put(LibrariesContainer.LibraryLevel.PROJECT, ProjectBundle.message("combobox.item.project.library")); myLibraryLevels.put(LibrariesContainer.LibraryLevel.MODULE, ProjectBundle.message("combobox.item.module.library")); @@ -147,32 +131,6 @@ public class LibraryCompositionOptionsPanel { } } - private List calculateSuitableLibraries() { - LibraryInfo[] libraryInfos = myLibraryCompositionSettings.getLibraryInfos(); - RequiredLibrariesInfo requiredLibraries = new RequiredLibrariesInfo(libraryInfos); - List suitableLibraries = new ArrayList(); - Library[] libraries = myLibrariesContainer.getAllLibraries(); - for (Library library : libraries) { - RequiredLibrariesInfo.RequiredClassesNotFoundInfo info = - requiredLibraries.checkLibraries(myLibrariesContainer.getLibraryFiles(library, OrderRootType.CLASSES), false); - if (info == null || info.getLibraryInfos().length < libraryInfos.length) { - suitableLibraries.add(library); - } - } - return suitableLibraries; - } - - private void showLibrariesChooser() { - ChooseLibrariesDialog dialog = new ChooseLibrariesDialog(myMainPanel, mySuitableLibraries); - dialog.markElements(myUsedLibraries); - dialog.show(); - if (dialog.isOK()) { - myUsedLibraries.clear(); - myUsedLibraries.addAll(dialog.getMarkedLibraries()); - updateAll(); - } - } - private void showFileChooser() { final FileChooserDescriptor descriptor = new FileChooserDescriptor(false, false, true, false, false, true); descriptor.setTitle(IdeBundle.message("file.chooser.select.paths.title")); @@ -197,9 +155,6 @@ public class LibraryCompositionOptionsPanel { String missingJarsText; List roots = new ArrayList(); roots.addAll(myAddedJars); - for (Library library : myUsedLibraries) { - ContainerUtil.addAll(roots, myLibrariesContainer.getLibraryFiles(library, OrderRootType.CLASSES)); - } RequiredLibrariesInfo.RequiredClassesNotFoundInfo info = new RequiredLibrariesInfo(myLibraryCompositionSettings.getLibraryInfos()).checkLibraries( VfsUtil.toVirtualFileArray(roots), false); if (info != null) { @@ -222,12 +177,6 @@ public class LibraryCompositionOptionsPanel { UIUtil.setEnabled(myMirrorsPanel, myDownloadMissingJarsCheckBox.isSelected(), true); } - public void updateRepositoriesMirrors(final LibraryDownloadingMirrorsMap mirrorsMap) { - for (RemoteRepositoryMirrorPanel mirrorPanel : myMirrorPanelsList) { - mirrorPanel.updateComboBox(mirrorsMap); - } - } - public void saveSelectedRepositoriesMirrors(final LibraryDownloadingMirrorsMap mirrorsMap) { for (RemoteRepositoryMirrorPanel mirrorPanel : myMirrorPanelsList) { mirrorsMap.setMirror(mirrorPanel.getRemoteRepository(), mirrorPanel.getSelectedMirror()); @@ -243,7 +192,6 @@ public class LibraryCompositionOptionsPanel { else { myLibraryCompositionSettings.setDownloadLibraries(false); } - myLibraryCompositionSettings.setUsedLibraries(myUsedLibraries); myLibraryCompositionSettings.setLibraryLevel(myLibraryLevels.getKey((String)myLibraryLevelComboBox.getSelectedItem())); myLibraryCompositionSettings.setLibraryName(myLibraryNameField.getText()); } diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java index 6f906880b72c..0dbdaefd1e94 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java @@ -26,13 +26,13 @@ import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContaine import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.util.*; +import java.util.ArrayList; +import java.util.List; /** * @author nik @@ -45,13 +45,13 @@ public class LibraryCompositionSettings implements Disposable { private final String myTitle; private String myDirectoryForDownloadedLibrariesPath; private boolean myDownloadLibraries = true; - private final Set myUsedLibraries = new LinkedHashSet(); private LibrariesContainer.LibraryLevel myLibraryLevel = LibrariesContainer.LibraryLevel.PROJECT; private String myLibraryName; private final Icon myIcon; private boolean myDownloadSources = true; private boolean myDownloadJavadocs = true; private NewLibraryEditor myLibraryEditor; + private Library mySelectedLibrary; public LibraryCompositionSettings(final @NotNull LibraryInfo[] libraryInfos, final @NotNull String defaultLibraryName, @@ -93,9 +93,8 @@ public class LibraryCompositionSettings implements Disposable { myDownloadLibraries = downloadLibraries; } - public void setUsedLibraries(Collection addedLibraries) { - myUsedLibraries.clear(); - myUsedLibraries.addAll(addedLibraries); + public void setSelectedExistingLibrary(Library library) { + mySelectedLibrary = library; } public void setLibraryLevel(final LibrariesContainer.LibraryLevel libraryLevel) { @@ -124,9 +123,6 @@ public class LibraryCompositionSettings implements Disposable { RequiredLibrariesInfo requiredLibraries = new RequiredLibrariesInfo(getLibraryInfos()); List roots = new ArrayList(); - for (Library library : myUsedLibraries) { - ContainerUtil.addAll(roots, librariesContainer.getLibraryFiles(library, OrderRootType.CLASSES)); - } VirtualFile[] jars = VfsUtil.toVirtualFileArray(roots); RequiredLibrariesInfo.RequiredClassesNotFoundInfo info = requiredLibraries.checkLibraries(jars, all); if (info != null) { @@ -165,10 +161,6 @@ public class LibraryCompositionSettings implements Disposable { return myLibraryName; } - public Collection getUsedLibraries() { - return Collections.unmodifiableCollection(myUsedLibraries); - } - public Icon getIcon() { return myIcon; } @@ -185,9 +177,9 @@ public class LibraryCompositionSettings implements Disposable { rootModel.addLibraryEntry(library); } } - for (Library usedLibrary : getUsedLibraries()) { - addedLibraries.add(usedLibrary); - rootModel.addLibraryEntry(usedLibrary); + if (mySelectedLibrary != null) { + addedLibraries.add(mySelectedLibrary); + rootModel.addLibraryEntry(mySelectedLibrary); } return library; } diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.form b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.form index 9fafa7145819..987a5032f8f9 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.form +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.form @@ -1,6 +1,6 @@ - + @@ -12,20 +12,18 @@ - + - + - - - + @@ -33,7 +31,7 @@ - + @@ -47,7 +45,7 @@ - + @@ -71,36 +69,46 @@ - - + - + + + + + + + - + - + - + + - + - + - - - + + + + + + + diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java index fe5e8ce01fbb..7ebe3c2edaa7 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java @@ -17,17 +17,20 @@ package com.intellij.facet.impl.ui.libraries; import com.intellij.facet.ui.libraries.LibraryInfo; import com.intellij.ide.IdeBundle; -import com.intellij.ide.util.ElementsChooser; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.roots.ui.configuration.LibrariesAlphaComparator; +import com.intellij.openapi.roots.ui.configuration.ProjectStructureDialogCellAppearanceUtils; import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; -import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.openapi.util.Computable; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.ui.ColoredListCellRenderer; +import com.intellij.ui.SortedComboBoxModel; +import com.intellij.util.PathUtil; import com.intellij.util.ui.RadioButtonEnumModel; import org.jetbrains.annotations.Nullable; @@ -35,6 +38,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.File; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; @@ -43,20 +47,19 @@ import java.util.List; * @author Dmitry Avdeev */ public class LibraryOptionsPanel { - - private JLabel myMessage; + private JLabel myMessageLabel; private JPanel myPanel; private JButton myConfigureButton; - private JPanel myExistingLibrariesPanel; - private JLabel myExistingLibrariesLabel; + private JComboBox myExistingLibraryComboBox; + private JRadioButton myUseExistingLibraryRadioButton; private ButtonGroup myButtonGroup; - private ElementsChooser myLibrariesChooser; private LibraryCompositionSettings mySettings; private LibrariesContainer myLibrariesContainer; - + private List myLibraries; private enum Choice { + USE_EXISTING, DOWNLOAD, PICK_FILES, DO_NOT_CREATE @@ -65,19 +68,9 @@ public class LibraryOptionsPanel { private RadioButtonEnumModel myButtonEnumModel; public LibraryOptionsPanel(LibraryCompositionSettings settings, LibrariesContainer librariesContainer) { - mySettings = settings; myLibrariesContainer = librariesContainer; - - List suitableLibraries = calculateSuitableLibraries(); - if (!suitableLibraries.isEmpty()) { - mySettings.setUsedLibraries(suitableLibraries); - } - - myLibrariesChooser = new ChooseLibrariesDialog.LibraryElementChooser(suitableLibraries); - myLibrariesChooser.getComponents()[0].setPreferredSize(new Dimension(10, 10)); // this makes scrollbars to work - myExistingLibrariesPanel.add(myLibrariesChooser); - myExistingLibrariesLabel.setLabelFor(myLibrariesChooser.getComponent()); + myLibraries = calculateSuitableLibraries(); myButtonEnumModel = RadioButtonEnumModel.bindEnum(Choice.class, myButtonGroup); myButtonEnumModel.addActionListener(new ActionListener() { @@ -87,11 +80,30 @@ public class LibraryOptionsPanel { } }); + final boolean librariesFound = !myLibraries.isEmpty(); + myUseExistingLibraryRadioButton.setVisible(librariesFound); + myExistingLibraryComboBox.setVisible(librariesFound); + if (librariesFound) { + final SortedComboBoxModel model = new SortedComboBoxModel(LibrariesAlphaComparator.INSTANCE); + model.addAll(myLibraries); + myExistingLibraryComboBox.setModel(model); + myExistingLibraryComboBox.setSelectedIndex(0); + myExistingLibraryComboBox.setRenderer(new ColoredListCellRenderer() { + @Override + protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) { + if (value instanceof Library) { + ProjectStructureDialogCellAppearanceUtils.forLibrary((Library)value, null).customize(this); + } + } + }); + } + myButtonEnumModel.setSelected(librariesFound ? Choice.USE_EXISTING : Choice.DOWNLOAD); + myConfigureButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { switch (myButtonEnumModel.getSelected()) { case DOWNLOAD: - showDialog(new DownloadingOptionsDialog(myConfigureButton, mySettings)); + new DownloadingOptionsDialog(myConfigureButton, mySettings).show(); break; case PICK_FILES: if (mySettings.getLibraryEditor() == null) { @@ -99,9 +111,9 @@ public class LibraryOptionsPanel { mySettings.addFilesToLibrary(files, OrderRootType.CLASSES); } EditLibraryDialog dialog = new EditLibraryDialog(myConfigureButton, mySettings); - showDialog(dialog); + dialog.show(); break; - case DO_NOT_CREATE: + default: break; } updateState(); @@ -111,18 +123,6 @@ public class LibraryOptionsPanel { updateState(); } - private void showDialog(final DialogWrapper dialog) { - dialog.setInitialLocationCallback(new Computable() { - @Override - public Point compute() { - Point point = myConfigureButton.getLocationOnScreen(); - point.translate(- 50, - dialog.getSize().height - 20); - return point; - } - }); - dialog.show(); - } - private List calculateSuitableLibraries() { LibraryInfo[] libraryInfos = mySettings.getLibraryInfos(); RequiredLibrariesInfo requiredLibraries = new RequiredLibrariesInfo(libraryInfos); @@ -131,7 +131,7 @@ public class LibraryOptionsPanel { for (Library library : libraries) { RequiredLibrariesInfo.RequiredClassesNotFoundInfo info = requiredLibraries.checkLibraries(myLibrariesContainer.getLibraryFiles(library, OrderRootType.CLASSES), false); - if (info == null || info.getLibraryInfos().length < libraryInfos.length) { + if (info == null) { suitableLibraries.add(library); } } @@ -157,17 +157,23 @@ public class LibraryOptionsPanel { } private void updateState() { - if (myMessage.isEnabled()) { - myMessage.setForeground(Color.black); - } - myConfigureButton.setEnabled(true); + myMessageLabel.setForeground(Color.black); + myMessageLabel.setVisible(true); + myConfigureButton.setVisible(true); String message = ""; switch (myButtonEnumModel.getSelected()) { case DOWNLOAD: - String path = mySettings.getDirectoryForDownloadedLibrariesPath() - .substring(mySettings.getBaseDirectoryForDownloadedFiles().length()); + final String downloadPath = mySettings.getDirectoryForDownloadedLibrariesPath(); + final String basePath = mySettings.getBaseDirectoryForDownloadedFiles(); + String path; + if (FileUtil.startsWith(downloadPath, basePath)) { + path = FileUtil.getRelativePath(basePath, downloadPath, File.separatorChar); + } + else { + path = PathUtil.getFileName(downloadPath); + } message = MessageFormat.format("{0} jar(s) will be downloaded into {1} directory
" + "{2} library {3} will be created", mySettings.getLibraryInfos().length, @@ -178,7 +184,7 @@ public class LibraryOptionsPanel { case PICK_FILES: NewLibraryEditor libraryEditor = mySettings.getLibraryEditor(); if (libraryEditor == null) { - myMessage.setForeground(Color.red); + myMessageLabel.setForeground(Color.red); message = "Press Configure button to add classes to the library"; } else { @@ -189,13 +195,12 @@ public class LibraryOptionsPanel { libraryEditor.getFiles(OrderRootType.CLASSES).length); } break; - case DO_NOT_CREATE: - message = "No new library will be created"; - myConfigureButton.setEnabled(false); - break; + default: + myMessageLabel.setVisible(false); + myConfigureButton.setVisible(false); } - myMessage.setText("" + message + ""); + myMessageLabel.setText("" + message + ""); } public LibraryCompositionSettings getSettings() { @@ -204,7 +209,7 @@ public class LibraryOptionsPanel { public void apply() { - mySettings.setUsedLibraries(myLibrariesChooser.getMarkedElements()); + mySettings.setSelectedExistingLibrary((Library)myExistingLibraryComboBox.getSelectedItem()); mySettings.setDownloadLibraries(myButtonEnumModel.getSelected() == Choice.DOWNLOAD); }