From f7725fbf1f600ed3778a2a941c2e7385b10f66c3 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 21 Aug 2013 13:50:33 +0400 Subject: [PATCH] IDEA-64561 Provide navigation for XSD enum values --- .../codeInsight/completion/XmlCompletionData.java | 2 +- .../util/XmlAttributeValueReferenceProvider.java | 3 ++- .../xml/impl/BasicXmlAttributeDescriptor.java | 13 ++++++------- .../xml/impl/schema/XmlAttributeDescriptorImpl.java | 4 ++++ 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionData.java b/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionData.java index cdd9608bfaad..bf87f35c9411 100644 --- a/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionData.java +++ b/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionData.java @@ -127,7 +127,7 @@ public class XmlCompletionData extends CompletionData { } protected XmlAttributeValueGetter getAttributeValueGetter() { - return null; + return new XmlAttributeValueGetter(); } protected ElementFilter createAttributeCompletionFilter() { diff --git a/xml/impl/src/com/intellij/xml/util/XmlAttributeValueReferenceProvider.java b/xml/impl/src/com/intellij/xml/util/XmlAttributeValueReferenceProvider.java index 2423d4ec906d..33d72010189d 100644 --- a/xml/impl/src/com/intellij/xml/util/XmlAttributeValueReferenceProvider.java +++ b/xml/impl/src/com/intellij/xml/util/XmlAttributeValueReferenceProvider.java @@ -51,7 +51,8 @@ public class XmlAttributeValueReferenceProvider extends PsiReferenceProvider { PsiElement parent = value.getParent(); if (parent instanceof XmlAttribute) { final XmlAttributeDescriptor descriptor = ((XmlAttribute)parent).getDescriptor(); - if (descriptor instanceof BasicXmlAttributeDescriptor && (descriptor.isFixed() || descriptor.isEnumerated())) { + if (descriptor instanceof BasicXmlAttributeDescriptor && + (descriptor.isFixed() || descriptor.isEnumerated() || unquotedValue.equals(descriptor.getDefaultValue()))) { // todo case insensitive return ((BasicXmlAttributeDescriptor)descriptor).getValueReferences(value); } } 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 c6b6cad003db..83cf70f5ff37 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 @@ -58,18 +58,17 @@ public abstract class BasicXmlAttributeDescriptor implements XmlAttributeDescrip } public PsiElement getValueDeclaration(XmlAttributeValue attributeValue, String value) { - if (isFixed()) { - String defaultValue = getDefaultValue(); - return Comparing.equal(defaultValue, value) ? getDefaultValueDeclaration() : null; - } - else { - return getEnumeratedValueDeclaration(attributeValue, value); + String defaultValue = getDefaultValue(); + if (Comparing.equal(defaultValue, value)) { + return getDefaultValueDeclaration(); } + return isFixed() ? null : getEnumeratedValueDeclaration(attributeValue, value); } protected PsiElement getEnumeratedValueDeclaration(XmlAttributeValue attributeValue, String value) { String[] values = getEnumeratedValues(); - return values != null && ArrayUtilRt.find(values, value) != -1 ? getDeclaration() : null; + if (values == null || values.length == 0) return getDeclaration(); + return ArrayUtilRt.find(values, value) != -1 ? getDeclaration() : null; } protected PsiElement getDefaultValueDeclaration() { diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java index 4a4e57cdc675..41468b4c82e6 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java @@ -134,6 +134,10 @@ public class XmlAttributeDescriptorImpl extends BasicXmlAttributeDescriptor impl return true; } }); + String defaultValue = getDefaultValue(); + if (defaultValue != null) { + list.add(defaultValue); + } return ArrayUtil.toStringArray(list); }