From 0daa08c24b58cf4ac1e844a318e0e1effa623f18 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Thu, 7 Jun 2012 17:50:26 +0400 Subject: [PATCH] generic structure view for dom --- xml/dom-impl/src/META-INF/DomPlugin.xml | 1 + .../structure/DomStructureTreeElement.java | 1 + .../DomStructureViewBuilderProvider.java | 48 +++++++++++++++++++ .../xml/XmlStructureViewBuilderFactory.java | 40 ++++++++-------- 4 files changed, 69 insertions(+), 21 deletions(-) create mode 100644 xml/dom-impl/src/com/intellij/util/xml/structure/DomStructureViewBuilderProvider.java diff --git a/xml/dom-impl/src/META-INF/DomPlugin.xml b/xml/dom-impl/src/META-INF/DomPlugin.xml index 02f04bb99ed9..c7afb8b3901e 100644 --- a/xml/dom-impl/src/META-INF/DomPlugin.xml +++ b/xml/dom-impl/src/META-INF/DomPlugin.xml @@ -74,5 +74,6 @@ + diff --git a/xml/dom-impl/src/com/intellij/util/xml/structure/DomStructureTreeElement.java b/xml/dom-impl/src/com/intellij/util/xml/structure/DomStructureTreeElement.java index dab3f07d68f9..09430b024beb 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/structure/DomStructureTreeElement.java +++ b/xml/dom-impl/src/com/intellij/util/xml/structure/DomStructureTreeElement.java @@ -64,6 +64,7 @@ public class DomStructureTreeElement implements StructureViewTreeElement, ItemPr final ArrayList result = new ArrayList(); final DomElementVisitor elementVisitor = new DomElementVisitor() { public void visitDomElement(final DomElement element) { + if (element instanceof GenericDomValue) return; final DomService.StructureViewMode viewMode = myDescriptor.fun(element); switch (viewMode) { case SHOW: diff --git a/xml/dom-impl/src/com/intellij/util/xml/structure/DomStructureViewBuilderProvider.java b/xml/dom-impl/src/com/intellij/util/xml/structure/DomStructureViewBuilderProvider.java new file mode 100644 index 000000000000..bc5d6c65c39e --- /dev/null +++ b/xml/dom-impl/src/com/intellij/util/xml/structure/DomStructureViewBuilderProvider.java @@ -0,0 +1,48 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.util.xml.structure; + +import com.intellij.ide.structureView.StructureViewBuilder; +import com.intellij.ide.structureView.xml.XmlStructureViewBuilderProvider; +import com.intellij.psi.xml.XmlFile; +import com.intellij.util.Function; +import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.DomManager; +import com.intellij.util.xml.DomService; +import org.jetbrains.annotations.NotNull; + +/** + * @author Dmitry Avdeev + * Date: 6/7/12 + */ +public class DomStructureViewBuilderProvider implements XmlStructureViewBuilderProvider { + + @Override + public StructureViewBuilder createStructureViewBuilder(@NotNull XmlFile file) { + if (DomManager.getDomManager(file.getProject()).getDomFileDescription(file) != null) { + return new DomStructureViewBuilder(file, DESCRIPTOR); + } + return null; + } + + private static final Function DESCRIPTOR = + new Function() { + @Override + public DomService.StructureViewMode fun(DomElement element) { + return DomService.StructureViewMode.SHOW; + } + }; +} diff --git a/xml/impl/src/com/intellij/lang/xml/XmlStructureViewBuilderFactory.java b/xml/impl/src/com/intellij/lang/xml/XmlStructureViewBuilderFactory.java index 90bc5696ba6f..2282b1787cdc 100644 --- a/xml/impl/src/com/intellij/lang/xml/XmlStructureViewBuilderFactory.java +++ b/xml/impl/src/com/intellij/lang/xml/XmlStructureViewBuilderFactory.java @@ -36,29 +36,27 @@ import org.jetbrains.annotations.Nullable; public class XmlStructureViewBuilderFactory implements PsiStructureViewFactory { @Nullable public StructureViewBuilder getStructureViewBuilder(final PsiFile psiFile) { - if (psiFile instanceof XmlFile) { - 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() { - return new XmlStructureViewTreeModel((XmlFile)psiFile); - } - }; - } - else { + if (!(psiFile instanceof XmlFile)) { return 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() { + return new XmlStructureViewTreeModel((XmlFile)psiFile); + } + }; } private static XmlStructureViewBuilderProvider[] getStructureViewBuilderProviders() {