diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java index e4cba45840a5..49ffc3032a4e 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/IdeaProjectSettingsService.java @@ -47,18 +47,38 @@ public class IdeaProjectSettingsService extends ProjectSettingsService { }); } + @Override + public boolean canOpenModuleSettings() { + return true; + } + public void openModuleSettings(final Module module) { ModulesConfigurator.showDialog(myProject, module.getName(), null, false); } + @Override + public boolean canOpenModuleLibrarySettings() { + return true; + } + public void openModuleLibrarySettings(final Module module) { ModulesConfigurator.showDialog(myProject, module.getName(), ClasspathEditor.NAME, false); } + @Override + public boolean canOpenContentEntriesSettings() { + return true; + } + public void openContentEntriesSettings(final Module module) { ModulesConfigurator.showDialog(myProject, module.getName(), ContentEntriesEditor.NAME, false); } + @Override + public boolean canOpenProjectLibrarySettings(NamedLibraryElement value) { + return true; + } + public void openProjectLibrarySettings(final NamedLibraryElement element) { final ProjectStructureConfigurable config = ProjectStructureConfigurable.getInstance(myProject); ShowSettingsUtil.getInstance().editConfigurable(myProject, config, new Runnable() { diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/AbstractModuleNode.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/AbstractModuleNode.java index 2009d454eb16..6b41c6e41baf 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/AbstractModuleNode.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/AbstractModuleNode.java @@ -91,7 +91,7 @@ public abstract class AbstractModuleNode extends ProjectViewNode impleme } public boolean canNavigate() { - return true; + return ProjectSettingsService.getInstance(myProject).canOpenModuleSettings(); } public boolean canNavigateToSource() { diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/LibraryGroupNode.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/LibraryGroupNode.java index 838f34094ce6..0726bc0c818e 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/LibraryGroupNode.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/LibraryGroupNode.java @@ -117,7 +117,7 @@ public class LibraryGroupNode extends ProjectViewNode { } public boolean canNavigate() { - return true; + return ProjectSettingsService.getInstance(myProject).canOpenModuleLibrarySettings(); } public boolean canNavigateToSource() { diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/NamedLibraryElementNode.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/NamedLibraryElementNode.java index 0014de0dd56c..1e40d20d0334 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/NamedLibraryElementNode.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/NamedLibraryElementNode.java @@ -122,7 +122,7 @@ public class NamedLibraryElementNode extends ProjectViewNode implements Navig VirtualFile file = getVirtualFile(); Project project = getProject(); - return file != null && (ProjectRootsUtil.isModuleContentRoot(file, project) || - ProjectRootsUtil.isSourceOrTestRoot(file, project) || - ProjectRootsUtil.isLibraryRoot(file, project)); + ProjectSettingsService service = ProjectSettingsService.getInstance(myProject); + return file != null && ((ProjectRootsUtil.isModuleContentRoot(file, project) && service.canOpenModuleSettings()) || + (ProjectRootsUtil.isSourceOrTestRoot(file, project) && service.canOpenContentEntriesSettings()) || + (ProjectRootsUtil.isLibraryRoot(file, project) && service.canOpenModuleLibrarySettings())); } public boolean canNavigateToSource() { @@ -193,14 +194,15 @@ public class PsiDirectoryNode extends BasePsiNode implements Navig if (module != null) { final VirtualFile file = getVirtualFile(); final Project project = getProject(); + ProjectSettingsService service = ProjectSettingsService.getInstance(myProject); if (ProjectRootsUtil.isModuleContentRoot(file, project)) { - ProjectSettingsService.getInstance(myProject).openModuleSettings(module); + service.openModuleSettings(module); } else if (ProjectRootsUtil.isLibraryRoot(file, project)) { - ProjectSettingsService.getInstance(myProject).openModuleLibrarySettings(module); + service.openModuleLibrarySettings(module); } else { - ProjectSettingsService.getInstance(myProject).openContentEntriesSettings(module); + service.openContentEntriesSettings(module); } } } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ProjectSettingsService.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ProjectSettingsService.java index b722e3c5b514..9b7986cec7f5 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ProjectSettingsService.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/ProjectSettingsService.java @@ -46,15 +46,40 @@ public class ProjectSettingsService { public void openModuleSettings(final Module module) { } + public boolean canOpenModuleSettings() { + return false; + } + public void openModuleLibrarySettings(final Module module) { } + public boolean canOpenModuleLibrarySettings() { + return false; + } + public void openContentEntriesSettings(final Module module) { } + public boolean canOpenContentEntriesSettings() { + return false; + } + public void openProjectLibrarySettings(final NamedLibraryElement value) { + Configurable additionalSettingsConfigurable = getLibrarySettingsConfigurable(value); + if (additionalSettingsConfigurable != null) { + LibraryOrderEntry entry = (LibraryOrderEntry) value.getOrderEntry(); + ShowSettingsUtil.getInstance().showSettingsDialog(entry.getOwnerModule().getProject(), additionalSettingsConfigurable); + } + } + + public boolean canOpenProjectLibrarySettings(final NamedLibraryElement value) { + return getLibrarySettingsConfigurable(value) != null; + } + + @Nullable + private static Configurable getLibrarySettingsConfigurable(NamedLibraryElement value) { OrderEntry orderEntry = value.getOrderEntry(); - if (!(orderEntry instanceof LibraryOrderEntry)) return; + if (!(orderEntry instanceof LibraryOrderEntry)) return null; LibraryOrderEntry libOrderEntry = (LibraryOrderEntry)orderEntry; Library lib = libOrderEntry.getLibrary(); if (lib instanceof LibraryEx) { @@ -63,14 +88,11 @@ public class ProjectSettingsService { if (libType != null) { LibraryRootsComponentDescriptor libComponentDescriptor = libType.createLibraryRootsComponentDescriptor(); if (libComponentDescriptor != null) { - Configurable additionalSettingsConfigurable = libComponentDescriptor.getAdditionalSettingsConfigurable(project); - if (additionalSettingsConfigurable != null) { - ShowSettingsUtil.getInstance().showSettingsDialog(project, additionalSettingsConfigurable); - return; - } + return libComponentDescriptor.getAdditionalSettingsConfigurable(project); } } } + return null; } public boolean processModulesMoved(final Module[] modules, @Nullable final ModuleGroup targetGroup) {