From c334f3e8ed43c830ead0844e40be97c2802eb519 Mon Sep 17 00:00:00 2001 From: Sergey Vasiliev Date: Tue, 3 Jul 2007 14:17:07 +0400 Subject: [PATCH] spring structure view --- .../impl/xml/XmlStructureViewBuilderProvider.java | 14 +++++++++++++ .../impl/xml/XmlStructureViewElementProvider.java | 10 --------- .../impl/xml/XmlStructureViewTreeModel.java | 22 +++----------------- .../src/com/intellij/lang/xml/XMLLanguage.java | 24 +++++++++++++++++----- 4 files changed, 36 insertions(+), 34 deletions(-) create mode 100644 source/com/intellij/ide/structureView/impl/xml/XmlStructureViewBuilderProvider.java diff --git a/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewBuilderProvider.java b/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewBuilderProvider.java new file mode 100644 index 0000000000..5c04d74290 --- /dev/null +++ b/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewBuilderProvider.java @@ -0,0 +1,14 @@ +package com.intellij.ide.structureView.impl.xml; + +import com.intellij.ide.structureView.StructureViewBuilder; +import com.intellij.psi.xml.XmlFile; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public interface XmlStructureViewBuilderProvider { + @NonNls String EXTENSION_POINT_NAME = "com.intellij.xmlStructureViewBuilderProvider"; + + @Nullable + StructureViewBuilder createStructureViewBuilder(@NotNull XmlFile file); +} diff --git a/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewElementProvider.java b/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewElementProvider.java index 1b96300b3a..ae6dc990c5 100644 --- a/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewElementProvider.java +++ b/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewElementProvider.java @@ -4,10 +4,6 @@ package com.intellij.ide.structureView.impl.xml; import com.intellij.ide.structureView.StructureViewTreeElement; -import com.intellij.ide.util.treeView.smartTree.Filter; -import com.intellij.ide.util.treeView.smartTree.Grouper; -import com.intellij.ide.util.treeView.smartTree.Sorter; -import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -21,10 +17,4 @@ public interface XmlStructureViewElementProvider { @Nullable StructureViewTreeElement createCustomXmlTagTreeElement(@NotNull XmlTag tag); - - Sorter[] getSorters(@NotNull final XmlFile file); - - Grouper[] getGroupers(@NotNull final XmlFile file); - - Filter[] getFilters(@NotNull final XmlFile file); } diff --git a/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewTreeModel.java b/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewTreeModel.java index e7f16210c6..7a699fea93 100644 --- a/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewTreeModel.java +++ b/source/com/intellij/ide/structureView/impl/xml/XmlStructureViewTreeModel.java @@ -42,10 +42,6 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.xml.*; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - public class XmlStructureViewTreeModel extends TextEditorBasedStructureViewModel{ private final XmlFile myFile; private static final Class[] myClasses = new Class[]{XmlTag.class, XmlFile.class, XmlEntityDecl.class, XmlElementDecl.class, XmlAttlistDecl.class, XmlConditionalSection.class}; @@ -63,11 +59,7 @@ public class XmlStructureViewTreeModel extends TextEditorBasedStructureViewModel @NotNull public Grouper[] getGroupers() { - List groupers = new ArrayList(); - for (XmlStructureViewElementProvider provider : getProviders()) { - groupers.addAll(Arrays.asList(provider.getGroupers(myFile))); - } - return groupers.toArray(new Grouper[groupers.size()]); + return Grouper.EMPTY_ARRAY; } private static XmlStructureViewElementProvider[] getProviders() { @@ -76,20 +68,12 @@ public class XmlStructureViewTreeModel extends TextEditorBasedStructureViewModel @NotNull public Sorter[] getSorters() { - List sorters = new ArrayList(); - for (XmlStructureViewElementProvider provider : getProviders()) { - sorters.addAll(Arrays.asList(provider.getSorters(myFile))); - } - return sorters.toArray(new Sorter[sorters.size()]); + return Sorter.EMPTY_ARRAY; } @NotNull public Filter[] getFilters() { - List filters = new ArrayList(); - for (XmlStructureViewElementProvider provider : getProviders()) { - filters.addAll(Arrays.asList(provider.getFilters(myFile))); - } - return filters.toArray(new Filter[filters.size()]); + return Filter.EMPTY_ARRAY; } protected PsiFile getPsiFile() { diff --git a/xml/impl/src/com/intellij/lang/xml/XMLLanguage.java b/xml/impl/src/com/intellij/lang/xml/XMLLanguage.java index 754d59838b..061e718363 100644 --- a/xml/impl/src/com/intellij/lang/xml/XMLLanguage.java +++ b/xml/impl/src/com/intellij/lang/xml/XMLLanguage.java @@ -6,6 +6,7 @@ import com.intellij.ide.highlighter.XmlFileHighlighter; import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.ide.structureView.StructureViewModel; import com.intellij.ide.structureView.TreeBasedStructureViewBuilder; +import com.intellij.ide.structureView.impl.xml.XmlStructureViewBuilderProvider; import com.intellij.ide.structureView.impl.xml.XmlStructureViewTreeModel; import com.intellij.lang.*; import com.intellij.lang.annotation.ExternalAnnotator; @@ -13,6 +14,7 @@ import com.intellij.lang.documentation.DocumentationProvider; import com.intellij.lang.findUsages.FindUsagesProvider; import com.intellij.lang.folding.FoldingBuilder; import com.intellij.lang.surroundWith.SurroundDescriptor; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileTypes.SyntaxHighlighter; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; @@ -116,10 +118,18 @@ public class XMLLanguage extends CompositeLanguage { @Nullable public StructureViewBuilder getStructureViewBuilder(final PsiFile psiFile) { if (psiFile instanceof XmlFile) { - StructureViewBuilder builder = getStructureViewBuilderForExtensions( psiFile ); - if ( builder != null ) { + StructureViewBuilder builder = getStructureViewBuilderForExtensions(psiFile); + if (builder != null) { return builder; } + + for (XmlStructureViewBuilderProvider xmlStructureViewBuilderProvider : getStructureViewBuilderProviders()) { + final StructureViewBuilder structureViewBuilder = xmlStructureViewBuilderProvider.createStructureViewBuilder((XmlFile)psiFile); + if (structureViewBuilder != null) { + return structureViewBuilder; + } + } + return new TreeBasedStructureViewBuilder() { @NotNull public StructureViewModel createStructureViewModel() { @@ -132,11 +142,15 @@ public class XMLLanguage extends CompositeLanguage { } } + private static XmlStructureViewBuilderProvider[] getStructureViewBuilderProviders() { + return (XmlStructureViewBuilderProvider[])Extensions.getExtensions(XmlStructureViewBuilderProvider.EXTENSION_POINT_NAME); + } + private StructureViewBuilder getStructureViewBuilderForExtensions(final PsiFile psiFile) { - for ( Language language : getLanguageExtensionsForFile ( psiFile ) ) { + for (Language language : getLanguageExtensionsForFile(psiFile)) { final StructureViewBuilder builder = language.getStructureViewBuilder(psiFile); - if ( builder != null ) { - return builder; + if (builder != null) { + return builder; } } return null; -- 2.11.4.GIT