From 0434983f0f3bbb2ff57980a85aca387047ff261a Mon Sep 17 00:00:00 2001 From: Gregory Shrago Date: Thu, 3 Dec 2009 18:44:09 +0300 Subject: [PATCH] IDEADEV-41816 DOM doesn't handle XML &EntityRefs; right --- .../com/intellij/util/xml/impl/DomSemContributor.java | 5 +++-- .../src/com/intellij/patterns/XmlElementPattern.java | 11 +++++++++++ .../src/com/intellij/patterns/XmlPatterns.java | 4 ++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/DomSemContributor.java b/xml/dom-impl/src/com/intellij/util/xml/impl/DomSemContributor.java index 6926d071978b..459eec27c0f6 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/DomSemContributor.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/DomSemContributor.java @@ -19,7 +19,6 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.text.StringUtil; import com.intellij.patterns.ElementPattern; -import static com.intellij.patterns.XmlPatterns.*; import com.intellij.psi.PsiElement; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlDocument; @@ -43,6 +42,8 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Set; +import static com.intellij.patterns.XmlPatterns.*; + /** * @author peter */ @@ -80,7 +81,7 @@ public class DomSemContributor extends SemContributor { } }); - final ElementPattern nonRootTag = xmlTag().withParent(xmlTag()); + final ElementPattern nonRootTag = xmlTag().withParent(or(xmlTag(), xmlEntityRef().withParent(xmlTag()))); registrar.registerSemElementProvider(DomManagerImpl.DOM_INDEXED_HANDLER_KEY, nonRootTag, new NullableFunction() { public IndexedElementInvocationHandler fun(XmlTag tag) { final XmlTag parentTag = PhysicalDomParentStrategy.getParentTag(tag); diff --git a/xml/openapi/src/com/intellij/patterns/XmlElementPattern.java b/xml/openapi/src/com/intellij/patterns/XmlElementPattern.java index 2a921406a987..611bb40c5e96 100644 --- a/xml/openapi/src/com/intellij/patterns/XmlElementPattern.java +++ b/xml/openapi/src/com/intellij/patterns/XmlElementPattern.java @@ -16,6 +16,7 @@ package com.intellij.patterns; import com.intellij.psi.xml.XmlElement; +import com.intellij.psi.xml.XmlEntityRef; import com.intellij.psi.xml.XmlText; import com.intellij.util.ProcessingContext; import org.jetbrains.annotations.NotNull; @@ -53,4 +54,14 @@ public class XmlElementPattern { + public XmlEntityRefPattern() { + super(new InitialPatternCondition(XmlEntityRef.class) { + public boolean accepts(@Nullable final Object o, final ProcessingContext context) { + return o instanceof XmlEntityRef; + } + }); + } + } + } diff --git a/xml/openapi/src/com/intellij/patterns/XmlPatterns.java b/xml/openapi/src/com/intellij/patterns/XmlPatterns.java index a675bc410c6c..5f449f26bc83 100644 --- a/xml/openapi/src/com/intellij/patterns/XmlPatterns.java +++ b/xml/openapi/src/com/intellij/patterns/XmlPatterns.java @@ -49,4 +49,8 @@ public class XmlPatterns extends PlatformPatterns { public static XmlElementPattern.XmlTextPattern xmlText() { return new XmlElementPattern.XmlTextPattern(); } + + public static XmlElementPattern.XmlEntityRefPattern xmlEntityRef() { + return new XmlElementPattern.XmlEntityRefPattern(); + } }