summaryrefslogtreecommitdiff
path: root/xml/xml-psi-impl/src/com/intellij
diff options
context:
space:
mode:
Diffstat (limited to 'xml/xml-psi-impl/src/com/intellij')
-rw-r--r--xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java5
-rw-r--r--xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java9
-rw-r--r--xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java2
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java5
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/impl/XmlEnumerationDescriptor.java12
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java20
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XsdEnumerationDescriptor.java4
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java3
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java19
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/util/XmlUtil.java6
10 files changed, 61 insertions, 24 deletions
diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java
index 674ad163c0b2..7204bf720403 100644
--- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java
+++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java
@@ -20,6 +20,7 @@ import com.intellij.psi.xml.XmlElement;
import com.intellij.util.ArrayUtil;
import com.intellij.xml.XmlAttributeDescriptor;
import com.intellij.xml.impl.BasicXmlAttributeDescriptor;
+import com.intellij.xml.impl.XmlEnumerationDescriptor;
/**
* @author Maxim.Mossienko
@@ -95,8 +96,8 @@ public class HtmlAttributeDescriptorImpl extends BasicXmlAttributeDescriptor {
@Override
public PsiElement getValueDeclaration(XmlElement attributeValue, String value) {
String s = myCaseSensitive ? value : value.toLowerCase();
- return delegate instanceof BasicXmlAttributeDescriptor ?
- ((BasicXmlAttributeDescriptor)delegate).getValueDeclaration(attributeValue, s) :
+ return delegate instanceof XmlEnumerationDescriptor ?
+ ((XmlEnumerationDescriptor)delegate).getValueDeclaration(attributeValue, s) :
super.getValueDeclaration(attributeValue, value);
}
}
diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java
index 8862ac892f0e..cd1f672d8819 100644
--- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java
+++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java
@@ -410,7 +410,11 @@ public class SchemaReferencesProvider extends PsiReferenceProvider {
class CompletionProcessor implements PsiElementProcessor<XmlTag> {
List<String> myElements = new ArrayList<String>(1);
String namespace;
- XmlTag tag;
+ final XmlTag tag;
+
+ CompletionProcessor(XmlTag tag) {
+ this.tag = tag;
+ }
public boolean execute(@NotNull final XmlTag element) {
String name = element.getAttributeValue(NAME_ATTR_NAME);
@@ -448,8 +452,7 @@ public class SchemaReferencesProvider extends PsiReferenceProvider {
break;
}
- CompletionProcessor processor = new CompletionProcessor();
- processor.tag = tag;
+ CompletionProcessor processor = new CompletionProcessor(tag);
final XmlElement context = PsiTreeUtil.getContextOfType(myElement, XmlElement.class, false);
if (context == null) {
diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java
index 2c963a95bd80..4d4c3aa60187 100644
--- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java
+++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java
@@ -47,7 +47,7 @@ public class SchemaPrefixReference extends PsiReferenceBase<XmlElement> implemen
* @param name
* @param reference
*/
- public SchemaPrefixReference(XmlElement element, TextRange range, String name, TagNameReference reference) {
+ public SchemaPrefixReference(XmlElement element, TextRange range, String name, @Nullable TagNameReference reference) {
super(element, range);
myName = name;
myTagNameReference = reference;
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
@@ -45,6 +45,11 @@ public abstract class BasicXmlAttributeDescriptor extends XmlEnumerationDescript
}
@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<T extends XmlElement> {
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<XmlTag>
implements XmlElementDescriptor, PsiWritableMetaData, Validator<XmlTag>,
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<T extends XmlElement> extends XmlEnumerationDescriptor<T> {
private boolean myExhaustiveEnum;
@@ -60,7 +60,7 @@ public abstract class XsdEnumerationDescriptor extends XmlEnumerationDescriptor
}
private boolean processEnumeration(XmlElement context, PairProcessor<PsiElement, String> 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/HtmlUtil.java b/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java
index a25f60550e1f..ac01d81a2f77 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java
@@ -139,7 +139,8 @@ public class HtmlUtil {
@NonNls private static final String[] HTML5_TAGS = {
"article", "aside", "audio", "canvas", "command", "datalist", "details", "embed", "figcaption", "figure", "footer", "header", "hgroup",
- "keygen", "mark", "meter", "nav", "output", "progress", "rp", "rt", "ruby", "section", "source", "summary", "time", "video", "wbr"
+ "keygen", "mark", "meter", "nav", "output", "progress", "rp", "rt", "ruby", "section", "source", "summary", "time", "video", "wbr",
+ "main"
};
private static final Set<String> HTML5_TAGS_SET = new THashSet<String>();
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<XmlAttributeValue> implements EmptyResolveMessageProvider {
+public class XmlEnumeratedValueReference extends PsiReferenceBase<XmlElement> 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<XmlAttributeVa
@NotNull
@Override
public String getUnresolvedMessagePattern() {
+ String name = getElement() instanceof XmlTag ? "tag" : "attribute";
return myDescriptor.isFixed()
- ? XmlErrorMessages.message("attribute.should.have.fixed.value", myDescriptor.getDefaultValue())
- : XmlErrorMessages.message("wrong.attribute.value");
+ ? XmlErrorMessages.message("should.have.fixed.value", StringUtil.capitalize(name), myDescriptor.getDefaultValue())
+ : XmlErrorMessages.message("wrong.value", name);
}
}
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlUtil.java b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlUtil.java
index e8bb8f4c6f41..abbddfcf654c 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlUtil.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlUtil.java
@@ -933,6 +933,8 @@ public class XmlUtil {
});
}
+ private final static Set<String> doNotVisitTags = new HashSet<String>(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<XmlTagChild, XmlTagChild>(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 != '-') {