diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DefaultLibraryRootsComponentDescriptor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DefaultLibraryRootsComponentDescriptor.java index 0e01a37bf8a8..db5f76353b1c 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DefaultLibraryRootsComponentDescriptor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/DefaultLibraryRootsComponentDescriptor.java @@ -20,7 +20,7 @@ import com.intellij.openapi.roots.AnnotationOrderRootType; import com.intellij.openapi.roots.JavadocOrderRootType; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.libraries.ui.AttachRootButtonDescriptor; -import com.intellij.openapi.roots.libraries.ui.AttachRootButtonDescriptorBase; +import com.intellij.openapi.roots.libraries.ui.ChooserBasedAttachRootButtonDescriptor; import com.intellij.openapi.roots.libraries.ui.LibraryRootsComponentDescriptor; import com.intellij.openapi.roots.libraries.ui.OrderRootTypePresentation; import com.intellij.openapi.roots.ui.configuration.OrderRootTypeUIFactory; @@ -46,8 +46,8 @@ public class DefaultLibraryRootsComponentDescriptor extends LibraryRootsComponen @NotNull @Override public List createAttachButtons() { - return Arrays.asList(new AttachClassesAction(), new AttachJarDirectoriesAction(), new AttachSourcesAction(), - new AttachAnnotationsAction(), new AttachJavadocAction(), new AttachUrlJavadocAction()); + return Arrays.asList(new AttachClassesDescriptor(), new AttachJarDirectoriesDescriptor(), new AttachSourcesDescriptor(), + new AttachAnnotationsDescriptor(), new AttachJavadocDescriptor(), new AttachUrlJavadocDescriptor()); } public static OrderRootTypePresentation getDefaultPresentation(OrderRootType type) { @@ -55,8 +55,8 @@ public class DefaultLibraryRootsComponentDescriptor extends LibraryRootsComponen return new OrderRootTypePresentation(factory.getNodeText(), factory.getIcon()); } - private static class AttachClassesAction extends AttachRootButtonDescriptorBase { - private AttachClassesAction() { + private static class AttachClassesDescriptor extends ChooserBasedAttachRootButtonDescriptor { + private AttachClassesDescriptor() { super(OrderRootType.CLASSES, ProjectBundle.message("module.libraries.attach.classes.button")); } @@ -78,8 +78,8 @@ public class DefaultLibraryRootsComponentDescriptor extends LibraryRootsComponen } } - private static class AttachJarDirectoriesAction extends AttachRootButtonDescriptorBase { - private AttachJarDirectoriesAction() { + private static class AttachJarDirectoriesDescriptor extends ChooserBasedAttachRootButtonDescriptor { + private AttachJarDirectoriesDescriptor() { super(OrderRootType.CLASSES, ProjectBundle.message("module.libraries.attach.jar.directories.button")); } @@ -105,8 +105,8 @@ public class DefaultLibraryRootsComponentDescriptor extends LibraryRootsComponen } } - private class AttachSourcesAction extends AttachRootButtonDescriptorBase { - private AttachSourcesAction() { + private class AttachSourcesDescriptor extends ChooserBasedAttachRootButtonDescriptor { + private AttachSourcesDescriptor() { super(OrderRootType.SOURCES, ProjectBundle.message("module.libraries.attach.sources.button")); } @@ -124,8 +124,8 @@ public class DefaultLibraryRootsComponentDescriptor extends LibraryRootsComponen } } - private static class AttachAnnotationsAction extends AttachRootButtonDescriptorBase { - private AttachAnnotationsAction() { + private static class AttachAnnotationsDescriptor extends ChooserBasedAttachRootButtonDescriptor { + private AttachAnnotationsDescriptor() { super(AnnotationOrderRootType.getInstance(), ProjectBundle.message("attach.annotations.button")); } @@ -143,8 +143,8 @@ public class DefaultLibraryRootsComponentDescriptor extends LibraryRootsComponen } } - private static class AttachJavadocAction extends AttachRootButtonDescriptorBase { - private AttachJavadocAction() { + private static class AttachJavadocDescriptor extends ChooserBasedAttachRootButtonDescriptor { + private AttachJavadocDescriptor() { super(JavadocOrderRootType.getInstance(), ProjectBundle.message("module.libraries.javadoc.attach.button")); } @@ -157,8 +157,8 @@ public class DefaultLibraryRootsComponentDescriptor extends LibraryRootsComponen } } - private static class AttachUrlJavadocAction extends AttachRootButtonDescriptor { - private AttachUrlJavadocAction() { + private static class AttachUrlJavadocDescriptor extends AttachRootButtonDescriptor { + private AttachUrlJavadocDescriptor() { super(JavadocOrderRootType.getInstance(), ProjectBundle.message("module.libraries.javadoc.url.button")); } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryType.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryType.java index fc1f2c0a4f07..f0b622d4329d 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryType.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/LibraryType.java @@ -19,10 +19,19 @@ import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.roots.libraries.ui.LibraryEditorComponent; import com.intellij.openapi.roots.libraries.ui.LibraryPropertiesEditor; import com.intellij.openapi.roots.libraries.ui.LibraryRootsComponentDescriptor; +import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + /** + * Override this class to provide custom library type. The implementation should be registered in plugin.xml: + *

+ * <extensions defaultExtensionNs="com.intellij">
+ *   <library.type implementation="qualified-class-name"/>
+ * </extensions> + * * @author nik */ public abstract class LibraryType

extends LibraryPresentationProvider

{ @@ -32,12 +41,19 @@ public abstract class LibraryType

extends LibraryPr super(libraryKind); } + /** + * @return text to show in 'New Library' popup + */ @NotNull public abstract String getCreateActionName(); @NotNull public abstract P createDefaultProperties(); + /** + * Override this method to customize the library roots editor + * @return {@link com.intellij.openapi.roots.libraries.ui.LibraryRootsComponentDescriptor} instance + */ @Nullable public LibraryRootsComponentDescriptor createLibraryRootsComponentDescriptor() { return null; @@ -45,4 +61,9 @@ public abstract class LibraryType

extends LibraryPr @Nullable public abstract LibraryPropertiesEditor createPropertiesEditor(@NotNull LibraryEditorComponent

properties); + + @Override + public P detect(@NotNull List classesRoots) { + return null; + } } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/AttachRootButtonDescriptor.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/AttachRootButtonDescriptor.java index 29cadc4f31da..755dd308e19e 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/AttachRootButtonDescriptor.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/AttachRootButtonDescriptor.java @@ -21,6 +21,9 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; /** + * Describes an 'attach' button in the library roots component. + * + * @see ChooserBasedAttachRootButtonDescriptor * @author nik */ public abstract class AttachRootButtonDescriptor { diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/AttachRootButtonDescriptorBase.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/ChooserBasedAttachRootButtonDescriptor.java similarity index 90% rename from platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/AttachRootButtonDescriptorBase.java rename to platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/ChooserBasedAttachRootButtonDescriptor.java index c08e182cdb4d..1a33d06e4555 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/AttachRootButtonDescriptorBase.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/ChooserBasedAttachRootButtonDescriptor.java @@ -26,8 +26,8 @@ import javax.swing.*; /** * @author nik */ -public abstract class AttachRootButtonDescriptorBase extends AttachRootButtonDescriptor { - public AttachRootButtonDescriptorBase(@NotNull OrderRootType rootType, @NotNull String buttonText) { +public abstract class ChooserBasedAttachRootButtonDescriptor extends AttachRootButtonDescriptor { + public ChooserBasedAttachRootButtonDescriptor(@NotNull OrderRootType rootType, @NotNull String buttonText) { super(rootType, buttonText); } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/LibraryRootsComponentDescriptor.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/LibraryRootsComponentDescriptor.java index cdd490d139de..4ae4fdf79a03 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/LibraryRootsComponentDescriptor.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/LibraryRootsComponentDescriptor.java @@ -14,6 +14,7 @@ package com.intellij.openapi.roots.libraries.ui; import com.intellij.openapi.roots.OrderRootType; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -21,8 +22,16 @@ import java.util.List; * @author nik */ public abstract class LibraryRootsComponentDescriptor { + /** + * Defines presentation for root type nodes in the library roots editor + * @return custom presentation or {@code null} if default presentation should be used + */ + @Nullable public abstract OrderRootTypePresentation getRootTypePresentation(@NotNull OrderRootType type); + /** + * @return descriptors for 'Attach' buttons in the library roots editor + */ @NotNull public abstract List createAttachButtons(); }