From c61da8239237e0291b7a2e3525d42f45b66b7721 Mon Sep 17 00:00:00 2001 From: Sergey Vasiliev Date: Thu, 10 Jul 2008 14:00:02 +0400 Subject: [PATCH] peter: dom extender work around --- .../impl/AbstractCollectionChildDescription.java | 1 + .../impl/AddToCompositeCollectionInvocation.java | 1 + .../xml/impl/AttributeChildInvocationHandler.java | 1 + .../xml/impl/CustomDomChildrenDescriptionImpl.java | 1 + .../intellij/util/xml/impl/DomGenericInfoEx.java | 1 + .../util/xml/impl/DomRootInvocationHandler.java | 1 + .../com/intellij/util/xml/impl/DomServiceImpl.java | 6 +++++ .../util/xml/impl/DummyEvaluatedXmlName.java | 3 ++- .../util/xml/impl/EvaluatedXmlNameImpl.java | 1 + .../xml/impl/IndexedElementInvocationHandler.java | 1 + .../src/com/intellij/util/xml/DomService.java | 6 ++++- .../com/intellij/util/xml}/EvaluatedXmlName.java | 7 +++--- .../xml/impl/dom/DomElementXmlDescriptor.java | 27 ++++++++++++++++++---- 13 files changed, 46 insertions(+), 11 deletions(-) rename dom/{impl/src/com/intellij/util/xml/impl => openapi/src/com/intellij/util/xml}/EvaluatedXmlName.java (88%) diff --git a/dom/impl/src/com/intellij/util/xml/impl/AbstractCollectionChildDescription.java b/dom/impl/src/com/intellij/util/xml/impl/AbstractCollectionChildDescription.java index f7fa2cc61c..86ba48067b 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/AbstractCollectionChildDescription.java +++ b/dom/impl/src/com/intellij/util/xml/impl/AbstractCollectionChildDescription.java @@ -6,6 +6,7 @@ package com.intellij.util.xml.impl; import com.intellij.psi.xml.XmlTag; import com.intellij.psi.xml.XmlFile; import com.intellij.util.xml.reflect.AbstractDomChildrenDescription; +import com.intellij.util.xml.EvaluatedXmlName; import java.util.List; diff --git a/dom/impl/src/com/intellij/util/xml/impl/AddToCompositeCollectionInvocation.java b/dom/impl/src/com/intellij/util/xml/impl/AddToCompositeCollectionInvocation.java index 2d8afbdbf7..06239b8789 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/AddToCompositeCollectionInvocation.java +++ b/dom/impl/src/com/intellij/util/xml/impl/AddToCompositeCollectionInvocation.java @@ -5,6 +5,7 @@ package com.intellij.util.xml.impl; import com.intellij.psi.xml.XmlTag; +import com.intellij.util.xml.EvaluatedXmlName; import java.lang.reflect.Type; import java.util.Set; diff --git a/dom/impl/src/com/intellij/util/xml/impl/AttributeChildInvocationHandler.java b/dom/impl/src/com/intellij/util/xml/impl/AttributeChildInvocationHandler.java index c2fc53df87..b005b2fafc 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/AttributeChildInvocationHandler.java +++ b/dom/impl/src/com/intellij/util/xml/impl/AttributeChildInvocationHandler.java @@ -12,6 +12,7 @@ import com.intellij.util.IncorrectOperationException; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomElementVisitor; import com.intellij.util.xml.GenericAttributeValue; +import com.intellij.util.xml.EvaluatedXmlName; import com.intellij.util.xml.events.ElementChangedEvent; import com.intellij.util.xml.events.ElementDefinedEvent; import com.intellij.xml.util.XmlStringUtil; diff --git a/dom/impl/src/com/intellij/util/xml/impl/CustomDomChildrenDescriptionImpl.java b/dom/impl/src/com/intellij/util/xml/impl/CustomDomChildrenDescriptionImpl.java index 8eda46a0cb..67a4fa8e92 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/CustomDomChildrenDescriptionImpl.java +++ b/dom/impl/src/com/intellij/util/xml/impl/CustomDomChildrenDescriptionImpl.java @@ -10,6 +10,7 @@ import com.intellij.util.NotNullFunction; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomReflectionUtil; import com.intellij.util.xml.JavaMethod; +import com.intellij.util.xml.EvaluatedXmlName; import com.intellij.util.xml.reflect.CustomDomChildrenDescription; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/dom/impl/src/com/intellij/util/xml/impl/DomGenericInfoEx.java b/dom/impl/src/com/intellij/util/xml/impl/DomGenericInfoEx.java index 993872db20..5e1f08e346 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/DomGenericInfoEx.java +++ b/dom/impl/src/com/intellij/util/xml/impl/DomGenericInfoEx.java @@ -6,6 +6,7 @@ package com.intellij.util.xml.impl; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.xml.JavaMethod; import com.intellij.util.xml.XmlName; +import com.intellij.util.xml.EvaluatedXmlName; import com.intellij.util.xml.reflect.AbstractDomChildrenDescription; import com.intellij.util.xml.reflect.DomGenericInfo; import org.jetbrains.annotations.NotNull; diff --git a/dom/impl/src/com/intellij/util/xml/impl/DomRootInvocationHandler.java b/dom/impl/src/com/intellij/util/xml/impl/DomRootInvocationHandler.java index 269a804357..164e8cf1d5 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/DomRootInvocationHandler.java +++ b/dom/impl/src/com/intellij/util/xml/impl/DomRootInvocationHandler.java @@ -14,6 +14,7 @@ import com.intellij.util.IncorrectOperationException; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomFileElement; import com.intellij.util.xml.DomNameStrategy; +import com.intellij.util.xml.EvaluatedXmlName; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; diff --git a/dom/impl/src/com/intellij/util/xml/impl/DomServiceImpl.java b/dom/impl/src/com/intellij/util/xml/impl/DomServiceImpl.java index c1d60cce46..1e3a9712c0 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/DomServiceImpl.java +++ b/dom/impl/src/com/intellij/util/xml/impl/DomServiceImpl.java @@ -17,6 +17,7 @@ import com.intellij.util.indexing.FileBasedIndex; import com.intellij.util.xml.*; import com.intellij.util.xml.structure.DomStructureViewBuilder; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collection; @@ -31,6 +32,11 @@ public class DomServiceImpl extends DomService { return new ModelMergerImpl(); } + @NotNull + public EvaluatedXmlName getEvaluatedXmlName(@NotNull final DomElement element) { + return DomManagerImpl.getDomInvocationHandler(element).getXmlName(); + } + public Collection getDomFileCandidates(Class description, Project project) { return FileBasedIndex.getInstance().getContainingFiles(DomFileIndex.NAME, description.getName(), VirtualFileFilter.ALL); } diff --git a/dom/impl/src/com/intellij/util/xml/impl/DummyEvaluatedXmlName.java b/dom/impl/src/com/intellij/util/xml/impl/DummyEvaluatedXmlName.java index 46ba78196a..773d0c9eda 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/DummyEvaluatedXmlName.java +++ b/dom/impl/src/com/intellij/util/xml/impl/DummyEvaluatedXmlName.java @@ -6,13 +6,14 @@ package com.intellij.util.xml.impl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NonNls; import com.intellij.util.xml.XmlName; +import com.intellij.util.xml.EvaluatedXmlName; import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlFile; /** * @author peter */ -public class DummyEvaluatedXmlName implements EvaluatedXmlName{ +public class DummyEvaluatedXmlName implements EvaluatedXmlName { private final XmlName myXmlName; private final String myNamespace; diff --git a/dom/impl/src/com/intellij/util/xml/impl/EvaluatedXmlNameImpl.java b/dom/impl/src/com/intellij/util/xml/impl/EvaluatedXmlNameImpl.java index bc62db7da4..961600823f 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/EvaluatedXmlNameImpl.java +++ b/dom/impl/src/com/intellij/util/xml/impl/EvaluatedXmlNameImpl.java @@ -14,6 +14,7 @@ import com.intellij.util.containers.ConcurrentHashMap; import com.intellij.util.containers.FactoryMap; import com.intellij.util.xml.DomFileDescription; import com.intellij.util.xml.XmlName; +import com.intellij.util.xml.EvaluatedXmlName; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/dom/impl/src/com/intellij/util/xml/impl/IndexedElementInvocationHandler.java b/dom/impl/src/com/intellij/util/xml/impl/IndexedElementInvocationHandler.java index 7a253774ea..43ed0dff84 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/IndexedElementInvocationHandler.java +++ b/dom/impl/src/com/intellij/util/xml/impl/IndexedElementInvocationHandler.java @@ -10,6 +10,7 @@ import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; import com.intellij.util.IncorrectOperationException; import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.EvaluatedXmlName; import com.intellij.util.xml.reflect.DomFixedChildDescription; import org.jetbrains.annotations.NotNull; diff --git a/dom/openapi/src/com/intellij/util/xml/DomService.java b/dom/openapi/src/com/intellij/util/xml/DomService.java index 289d69eeb9..12ccfd3ab5 100644 --- a/dom/openapi/src/com/intellij/util/xml/DomService.java +++ b/dom/openapi/src/com/intellij/util/xml/DomService.java @@ -25,10 +25,11 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.xml.XmlFile; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.List; import java.util.Collection; +import java.util.List; /** * @author Gregory.Shrago @@ -53,6 +54,9 @@ public abstract class DomService { public abstract ModelMerger createModelMerger(); + @NotNull + public abstract EvaluatedXmlName getEvaluatedXmlName(@NotNull DomElement element); + public enum StructureViewMode { SHOW, SHOW_CHILDREN, SKIP } diff --git a/dom/impl/src/com/intellij/util/xml/impl/EvaluatedXmlName.java b/dom/openapi/src/com/intellij/util/xml/EvaluatedXmlName.java similarity index 88% rename from dom/impl/src/com/intellij/util/xml/impl/EvaluatedXmlName.java rename to dom/openapi/src/com/intellij/util/xml/EvaluatedXmlName.java index 299eeb08d6..1c299d14b4 100644 --- a/dom/impl/src/com/intellij/util/xml/impl/EvaluatedXmlName.java +++ b/dom/openapi/src/com/intellij/util/xml/EvaluatedXmlName.java @@ -1,13 +1,12 @@ /* * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved. */ -package com.intellij.util.xml.impl; +package com.intellij.util.xml; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.NonNls; -import com.intellij.util.xml.XmlName; import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlFile; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; /** * @author peter diff --git a/xml/impl/src/com/intellij/xml/impl/dom/DomElementXmlDescriptor.java b/xml/impl/src/com/intellij/xml/impl/dom/DomElementXmlDescriptor.java index 540a7306f5..3b03c262c0 100644 --- a/xml/impl/src/com/intellij/xml/impl/dom/DomElementXmlDescriptor.java +++ b/xml/impl/src/com/intellij/xml/impl/dom/DomElementXmlDescriptor.java @@ -1,6 +1,7 @@ package com.intellij.xml.impl.dom; import com.intellij.openapi.util.Key; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; @@ -9,10 +10,7 @@ import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlDocument; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; -import com.intellij.util.xml.DomElement; -import com.intellij.util.xml.DomManager; -import com.intellij.util.xml.DomNameStrategy; -import com.intellij.util.xml.XmlName; +import com.intellij.util.xml.*; import com.intellij.util.xml.reflect.*; import com.intellij.xml.XmlAttributeDescriptor; import com.intellij.xml.XmlElementDescriptor; @@ -206,7 +204,26 @@ public class DomElementXmlDescriptor implements XmlElementDescriptor { @NonNls public String getName(final PsiElement context) { - return getDefaultName(); + final String name = getDefaultName(); + if (context instanceof XmlTag) { + XmlTag tag = (XmlTag)context; + final PsiFile file = tag.getContainingFile(); + DomElement element = myManager.getDomElement(tag); + if (element == null && tag.getParentTag() != null) { + element = myManager.getDomElement(tag.getParentTag()); + } + if (element != null && file instanceof XmlFile) { + final String namespace = DomService.getInstance().getEvaluatedXmlName(element).evaluateChildName(myChildrenDescription.getXmlName()).getNamespace(tag, (XmlFile)file); + if (!tag.getNamespaceByPrefix("").equals(namespace)) { + final String s = tag.getPrefixByNamespace(namespace); + if (StringUtil.isNotEmpty(s)) { + return s + ":" + name; + } + } + } + } + + return name; } @NonNls -- 2.11.4.GIT