diff --git a/platform/core-api/src/com/intellij/psi/ElementManipulators.java b/platform/core-api/src/com/intellij/psi/ElementManipulators.java index 9f91e0e671cc..098a204c17cc 100644 --- a/platform/core-api/src/com/intellij/psi/ElementManipulators.java +++ b/platform/core-api/src/com/intellij/psi/ElementManipulators.java @@ -60,6 +60,7 @@ public class ElementManipulators extends ClassExtension { return manipulator == null ? TextRange.from(0, element.getTextLength()) : manipulator.getRangeInElement(element); } + @NotNull public static String getValueText(final PsiElement element) { final TextRange valueTextRange = getValueTextRange(element); if (valueTextRange.isEmpty()) return ""; diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java index 60d7a433d421..37488f345330 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyAttributeDescriptor.java @@ -8,6 +8,7 @@ import com.intellij.util.ArrayUtil; import com.intellij.xml.XmlAttributeDescriptor; import com.intellij.xml.XmlElementDescriptor; import com.intellij.xml.impl.BasicXmlAttributeDescriptor; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.javaFX.fxml.FxmlConstants; import org.jetbrains.plugins.javaFX.fxml.JavaFxCommonClassNames; @@ -209,9 +210,8 @@ public class JavaFxPropertyAttributeDescriptor extends BasicXmlAttributeDescript } @Override - public PsiReference[] getValueReferences(XmlAttributeValue value) { - String s = value.getValue(); - return s != null && !s.startsWith("${") ? super.getValueReferences(value) : PsiReference.EMPTY_ARRAY; + public PsiReference[] getValueReferences(XmlElement element, @NotNull String text) { + return !text.startsWith("${") ? super.getValueReferences(element, text) : PsiReference.EMPTY_ARRAY; } @Override diff --git a/xml/impl/src/com/intellij/xml/util/XmlEnumeratedValueReferenceProvider.java b/xml/impl/src/com/intellij/xml/util/XmlEnumeratedValueReferenceProvider.java index 590ae534eaa6..c1309a54f1d2 100644 --- a/xml/impl/src/com/intellij/xml/util/XmlEnumeratedValueReferenceProvider.java +++ b/xml/impl/src/com/intellij/xml/util/XmlEnumeratedValueReferenceProvider.java @@ -17,15 +17,11 @@ package com.intellij.xml.util; import com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightVisitor; import com.intellij.openapi.util.Key; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiLanguageInjectionHost; -import com.intellij.psi.PsiReference; -import com.intellij.psi.PsiReferenceProvider; +import com.intellij.psi.*; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; -import com.intellij.psi.xml.XmlAttribute; -import com.intellij.psi.xml.XmlAttributeValue; +import com.intellij.psi.xml.*; +import com.intellij.util.ArrayUtil; import com.intellij.util.ProcessingContext; -import com.intellij.xml.XmlAttributeDescriptor; import com.intellij.xml.impl.XmlEnumerationDescriptor; import com.intellij.xml.impl.schema.XmlSchemaTagsProcessor; import org.jetbrains.annotations.NotNull; @@ -34,7 +30,7 @@ import org.jetbrains.annotations.NotNull; * @author Dmitry Avdeev * Date: 15.08.13 */ -public class XmlEnumeratedValueReferenceProvider extends PsiReferenceProvider { +public class XmlEnumeratedValueReferenceProvider extends PsiReferenceProvider { public final static Key SUPPRESS = Key.create("suppress attribute value references"); @@ -45,22 +41,49 @@ public class XmlEnumeratedValueReferenceProvider extends PsiReferenceProvider { if (XmlSchemaTagsProcessor.PROCESSING_FLAG.get() != null || context.get(SUPPRESS) != null) { return PsiReference.EMPTY_ARRAY; } - XmlAttributeValue value = (XmlAttributeValue)element; - if (value instanceof PsiLanguageInjectionHost && InjectedLanguageUtil.hasInjections((PsiLanguageInjectionHost)value)) { + @SuppressWarnings("unchecked") PsiElement host = getHost((T)element); + if (host instanceof PsiLanguageInjectionHost && InjectedLanguageUtil.hasInjections((PsiLanguageInjectionHost)host)) { return PsiReference.EMPTY_ARRAY; } - String unquotedValue = value.getValue(); - if (unquotedValue == null || XmlHighlightVisitor.skipValidation(value) || !XmlUtil.isSimpleXmlAttributeValue(unquotedValue, value)) { + String unquotedValue = ElementManipulators.getValueText(element); + if (XmlHighlightVisitor.skipValidation(element) || !XmlUtil.isSimpleValue(unquotedValue, element)) { return PsiReference.EMPTY_ARRAY; } - PsiElement parent = value.getParent(); - if (parent instanceof XmlAttribute) { - final XmlAttributeDescriptor descriptor = ((XmlAttribute)parent).getDescriptor(); - if (descriptor instanceof XmlEnumerationDescriptor && - (descriptor.isFixed() || descriptor.isEnumerated() || unquotedValue.equals(descriptor.getDefaultValue()))) { // todo case insensitive - return ((XmlEnumerationDescriptor)descriptor).getValueReferences(value); + @SuppressWarnings("unchecked") final Object descriptor = getDescriptor((T)element); + if (descriptor instanceof XmlEnumerationDescriptor) { + XmlEnumerationDescriptor enumerationDescriptor = (XmlEnumerationDescriptor)descriptor; + if (enumerationDescriptor.isFixed() || + enumerationDescriptor.isEnumerated((XmlElement)element) || + unquotedValue.equals(enumerationDescriptor.getDefaultValue())) { // todo case insensitive + //noinspection unchecked + return enumerationDescriptor.getValueReferences((XmlElement)element, unquotedValue); } } return PsiReference.EMPTY_ARRAY; } + + protected PsiElement getHost(T element) { + return element; + } + + protected Object getDescriptor(T element) { + PsiElement parent = element.getParent(); + return parent instanceof XmlAttribute ? ((XmlAttribute)parent).getDescriptor() : null; + } + + public static XmlEnumeratedValueReferenceProvider forTags() { + return new XmlEnumeratedValueReferenceProvider() { + + @Override + protected Object getDescriptor(XmlTag element) { + return element.getDescriptor(); + } + + @Override + protected PsiElement getHost(XmlTag element) { + XmlText[] textElements = element.getValue().getTextElements(); + return ArrayUtil.getFirstElement(textElements); + } + }; + } } diff --git a/xml/impl/src/com/intellij/xml/util/XmlInvalidIdInspection.java b/xml/impl/src/com/intellij/xml/util/XmlInvalidIdInspection.java index afe28eda4b4d..6f8a17a6ff35 100644 --- a/xml/impl/src/com/intellij/xml/util/XmlInvalidIdInspection.java +++ b/xml/impl/src/com/intellij/xml/util/XmlInvalidIdInspection.java @@ -40,7 +40,7 @@ public class XmlInvalidIdInspection extends XmlDuplicatedIdInspection { idRef = idRef.toLowerCase(); } - if (XmlUtil.isSimpleXmlAttributeValue(idRef, value) && refHolder.isIdReferenceValue(value)) { + if (XmlUtil.isSimpleValue(idRef, value) && refHolder.isIdReferenceValue(value)) { boolean hasIdDeclaration = refHolder.hasIdDeclaration(idRef); if (!hasIdDeclaration && tag instanceof HtmlTag) { hasIdDeclaration = refHolder.hasIdDeclaration(value.getValue()); diff --git a/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java b/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java index 023e3a97c441..3d475498870d 100644 --- a/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java +++ b/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java @@ -266,7 +266,7 @@ public class XmlRefCountHolder { private void updateMap(@NotNull final XmlAttribute attribute, @NotNull final XmlAttributeValue value, final boolean soft) { final String id = XmlHighlightVisitor.getUnquotedValue(value, attribute.getParent()); - if (XmlUtil.isSimpleXmlAttributeValue(id, value) && + if (XmlUtil.isSimpleValue(id, value) && PsiTreeUtil.getChildOfType(value, OuterLanguageElement.class) == null) { myHolder.registerId(id, value, soft); } diff --git a/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java b/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java index ae588622794a..5f5315efbe8e 100644 --- a/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java +++ b/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java @@ -90,5 +90,6 @@ public class XmlReferenceContributor extends PsiReferenceContributor { registrar.registerReferenceProvider(xmlAttributeValue(), new XmlPrefixReferenceProvider()); registrar.registerReferenceProvider(xmlAttributeValue(), new XmlEnumeratedValueReferenceProvider(), PsiReferenceRegistrar.LOWER_PRIORITY); + registrar.registerReferenceProvider(xmlTag(), XmlEnumeratedValueReferenceProvider.forTags(), PsiReferenceRegistrar.LOWER_PRIORITY); } } diff --git a/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RngXmlAttributeDescriptor.java b/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RngXmlAttributeDescriptor.java index f9d9f7cbe23e..b05794e92320 100644 --- a/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RngXmlAttributeDescriptor.java +++ b/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RngXmlAttributeDescriptor.java @@ -21,7 +21,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; @@ -32,6 +31,7 @@ import com.intellij.xml.util.XmlEnumeratedValueReference; import gnu.trove.THashSet; import gnu.trove.TObjectHashingStrategy; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.kohsuke.rngom.digested.DAttributePattern; import org.xml.sax.Locator; @@ -206,10 +206,8 @@ public class RngXmlAttributeDescriptor extends BasicXmlAttributeDescriptor { } @Override - public PsiReference[] getValueReferences(final XmlAttributeValue value) { - String text = value.getValue(); - if (text == null) return PsiReference.EMPTY_ARRAY; - return new PsiReference[] { new XmlEnumeratedValueReference(value, this) { + public PsiReference[] getValueReferences(final XmlElement element, @NotNull String text) { + return new PsiReference[] { new XmlEnumeratedValueReference(element, this) { @Nullable @Override public PsiElement resolve() { diff --git a/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java b/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java index b054b7f9a2a5..7d6df70ec21e 100644 --- a/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java +++ b/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java @@ -670,5 +670,11 @@ public class XmlCompletionTest extends LightCodeInsightFixtureTestCase { myFixture.configureByFiles("Substitute/schema-a.xsd", "Substitute/schema-b.xsd"); myFixture.testCompletionVariants("Substitute/test.xml", "b:instance", "instance"); } + + public void testEnumeratedTagValue() throws Exception { + myFixture.configureByFile("tagValue/enumerated.xsd"); + myFixture.testCompletionVariants("tagValue/completeEnum.xml", "none", "standard"); + myFixture.testCompletionVariants("tagValue/completeBoolean.xml", "false", "true"); + } } diff --git a/xml/tests/testData/completion/tagValue/completeBoolean.xml b/xml/tests/testData/completion/tagValue/completeBoolean.xml new file mode 100644 index 000000000000..7e8479f9147f --- /dev/null +++ b/xml/tests/testData/completion/tagValue/completeBoolean.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xml/tests/testData/completion/tagValue/completeEnum.xml b/xml/tests/testData/completion/tagValue/completeEnum.xml new file mode 100644 index 000000000000..4926a63a2837 --- /dev/null +++ b/xml/tests/testData/completion/tagValue/completeEnum.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xml/tests/testData/completion/tagValue/enumerated.xsd b/xml/tests/testData/completion/tagValue/enumerated.xsd new file mode 100644 index 000000000000..fc0a4d86fa33 --- /dev/null +++ b/xml/tests/testData/completion/tagValue/enumerated.xsd @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/xml/xml-psi-impl/resources/messages/XmlErrorMessages.properties b/xml/xml-psi-impl/resources/messages/XmlErrorMessages.properties index 8ab43e2f5311..166a0b84f123 100644 --- a/xml/xml-psi-impl/resources/messages/XmlErrorMessages.properties +++ b/xml/xml-psi-impl/resources/messages/XmlErrorMessages.properties @@ -20,7 +20,7 @@ duplicate.id.reference=Duplicate id reference invalid.id.reference=Invalid id reference uri.is.not.registered=URI is not registered (Settings | Project Settings | Schemas and DTDs) registered.resource.is.not.recognized=Resource registered by this uri is not recognized (Settings | Project Settings | Schemas and DTDs) -attribute.should.have.fixed.value=Attribute should have fixed value {0} +should.have.fixed.value={0} should have fixed value {1} #quickfixes insert.required.attribute.quickfix.text=Insert Required Attribute {0} @@ -44,7 +44,7 @@ tag.start.is.not.closed=Tag start is not closed unescaped.ampersand.or.nonterminated.character.entity.reference=Unescaped \\& or nonterminated character/entity reference expected.prologue.tag.termination.expected='?>' expected expected.whitespace=Whitespace expected -wrong.attribute.value=Wrong attribute value +wrong.value=Wrong {0} value way.too.unbalanced=Way too unbalanced. Stopping attempt to balance tags properly at this point cannot.resolve.taglib.uri=Cannot resolve taglib with uri {0} diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java index fba46a2cec3d..4e2055d40fe7 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java @@ -44,6 +44,11 @@ public abstract class BasicXmlAttributeDescriptor extends XmlEnumerationDescript return getEnumeratedValues(); } + @Override + public boolean isEnumerated(XmlElement context) { + return isEnumerated(); + } + @Override public String toString() { return getName(); diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/XmlEnumerationDescriptor.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/XmlEnumerationDescriptor.java index bf7b988e899d..b77ed3a1b866 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/impl/XmlEnumerationDescriptor.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/XmlEnumerationDescriptor.java @@ -3,20 +3,23 @@ package com.intellij.xml.impl; import com.intellij.openapi.util.Comparing; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; -import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlElement; import com.intellij.xml.util.XmlEnumeratedValueReference; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Dmitry Avdeev * Date: 22.08.13 */ -public abstract class XmlEnumerationDescriptor { +public abstract class XmlEnumerationDescriptor { public abstract boolean isFixed(); public abstract String getDefaultValue(); + public abstract boolean isEnumerated(@Nullable XmlElement context); + public abstract String[] getEnumeratedValues(); public PsiElement getValueDeclaration(XmlElement attributeValue, String value) { @@ -31,8 +34,7 @@ public abstract class XmlEnumerationDescriptor { protected abstract PsiElement getDefaultValueDeclaration(); - public PsiReference[] getValueReferences(XmlAttributeValue value) { - return new PsiReference[] { new XmlEnumeratedValueReference(value, this)}; + public PsiReference[] getValueReferences(T element, @NotNull String text) { + return new PsiReference[] { new XmlEnumeratedValueReference(element, this)}; } - } diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java index 61c33c09cafc..3d3cab737a27 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java @@ -16,14 +16,17 @@ package com.intellij.xml.impl.schema; import com.intellij.codeInsight.daemon.Validator; +import com.intellij.psi.ElementManipulators; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiReference; import com.intellij.psi.meta.PsiWritableMetaData; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.xml.*; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.xml.*; +import com.intellij.xml.util.XmlEnumeratedValueReference; import com.intellij.xml.util.XmlUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -36,7 +39,7 @@ import java.util.List; /** * @author Mike */ -public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor +public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor implements XmlElementDescriptor, PsiWritableMetaData, Validator, XmlElementDescriptorAwareAboutChildren { protected XmlTag myDescriptorTag; @@ -473,8 +476,9 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor } public String getQualifiedName() { - if (!"".equals(getNS())) { - return getNS() + ":" + getName(); + String ns = getNS(); + if (ns != null && !ns.isEmpty()) { + return ns + ":" + getName(); } return getName(); @@ -519,6 +523,16 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor } } + @Override + public PsiReference[] getValueReferences(XmlTag xmlTag, @NotNull String text) { + XmlTagValue value = xmlTag.getValue(); + XmlText[] elements = value.getTextElements(); + if (elements.length == 0 || xmlTag.getSubTags().length > 0) return PsiReference.EMPTY_ARRAY; + return new PsiReference[] { + new XmlEnumeratedValueReference(xmlTag, this, ElementManipulators.getValueTextRange(xmlTag)) + }; + } + public boolean allowElementsFromNamespace(final String namespace, final XmlTag context) { final TypeDescriptor type = getType(context); diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XsdEnumerationDescriptor.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XsdEnumerationDescriptor.java index 0a1c341f6825..26600b7795bd 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XsdEnumerationDescriptor.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XsdEnumerationDescriptor.java @@ -21,7 +21,7 @@ import java.util.List; * @author Dmitry Avdeev * Date: 22.08.13 */ -public abstract class XsdEnumerationDescriptor extends XmlEnumerationDescriptor { +public abstract class XsdEnumerationDescriptor extends XmlEnumerationDescriptor { private boolean myExhaustiveEnum; @@ -60,7 +60,7 @@ public abstract class XsdEnumerationDescriptor extends XmlEnumerationDescriptor } private boolean processEnumeration(XmlElement context, PairProcessor processor) { - XmlTag contextTag = context != null ? PsiTreeUtil.getContextOfType(context, XmlTag.class, true) : null; + XmlTag contextTag = context != null ? PsiTreeUtil.getContextOfType(context, XmlTag.class, false) : null; final XmlElementDescriptorImpl elementDescriptor = (XmlElementDescriptorImpl)XmlUtil.findXmlDescriptorByType(getDeclaration(), contextTag); if (elementDescriptor!=null && elementDescriptor.getType() instanceof ComplexTypeDescriptor) { diff --git a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java index 5cf994a2deac..6b1bdf47bc2f 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java @@ -17,9 +17,12 @@ package com.intellij.xml.util; import com.intellij.codeInsight.daemon.EmptyResolveMessageProvider; import com.intellij.codeInsight.daemon.XmlErrorMessages; +import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReferenceBase; -import com.intellij.psi.xml.XmlAttributeValue; +import com.intellij.psi.xml.XmlElement; +import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; import com.intellij.xml.impl.XmlEnumerationDescriptor; import org.jetbrains.annotations.NotNull; @@ -29,14 +32,19 @@ import org.jetbrains.annotations.Nullable; * @author Dmitry Avdeev * Date: 16.08.13 */ -public class XmlEnumeratedValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider { +public class XmlEnumeratedValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider { private final XmlEnumerationDescriptor myDescriptor; - public XmlEnumeratedValueReference(XmlAttributeValue value, XmlEnumerationDescriptor descriptor) { + public XmlEnumeratedValueReference(XmlElement value, XmlEnumerationDescriptor descriptor) { super(value); myDescriptor = descriptor; } + public XmlEnumeratedValueReference(XmlElement value, XmlEnumerationDescriptor descriptor, TextRange range) { + super(value, range); + myDescriptor = descriptor; + } + @Nullable @Override public PsiElement resolve() { @@ -59,8 +67,9 @@ public class XmlEnumeratedValueReference extends PsiReferenceBase doNotVisitTags = new HashSet(Arrays.asList("annotation", "element", "attribute")); + /** * @return true if enumeration is exhaustive */ @@ -954,7 +956,7 @@ public class XmlUtil { exhaustiveEnum = false; processEnumerationValues(tag, tagProcessor); } - else if (!localName.equals("annotation")) { + else if (!doNotVisitTags.contains(localName)) { // don't go into annotation exhaustiveEnum &= processEnumerationValues(tag, tagProcessor); } @@ -1070,7 +1072,7 @@ public class XmlUtil { return new Pair(first, last); } - public static boolean isSimpleXmlAttributeValue(@NotNull final String unquotedValue, final XmlAttributeValue context) { + public static boolean isSimpleValue(@NotNull final String unquotedValue, final PsiElement context) { for (int i = 0; i < unquotedValue.length(); ++i) { final char ch = unquotedValue.charAt(i); if (!Character.isJavaIdentifierPart(ch) && ch != ':' && ch != '-') {