From 571528992ed116da76412de2a8c85264d09b289b Mon Sep 17 00:00:00 2001 From: Serega Vasiliev Date: Mon, 3 Jun 2013 10:01:42 +0200 Subject: [PATCH] javaee7(JSR-344): supported new namespaces --- .../impl/providers/IdReferenceProvider.java | 4 +- .../src/com/intellij/xml/util/HtmlUtil.java | 31 ++++++++----- .../src/com/intellij/xml/util/XmlUtil.java | 46 +++++++++++++++---- 3 files changed, 59 insertions(+), 22 deletions(-) diff --git a/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/IdReferenceProvider.java b/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/IdReferenceProvider.java index 7446b7c0c42c..f7dd52aea37e 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/IdReferenceProvider.java +++ b/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/IdReferenceProvider.java @@ -32,6 +32,8 @@ import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; + /** * @author peter */ @@ -88,7 +90,7 @@ public class IdReferenceProvider extends PsiReferenceProvider { if (!(parentElement instanceof XmlAttribute)) return PsiReference.EMPTY_ARRAY; final String name = ((XmlAttribute)parentElement).getName(); final String ns = ((XmlAttribute)parentElement).getParent().getNamespace(); - final boolean jsfNs = XmlUtil.JSF_CORE_URI.equals(ns) || XmlUtil.JSF_HTML_URI.equals(ns); + final boolean jsfNs = Arrays.asList(XmlUtil.JSF_CORE_URIS).contains(ns) ||Arrays.asList(XmlUtil.JSF_HTML_URIS).contains(ns); if (FOR_ATTR_NAME.equals(name)) { return new PsiReference[]{ diff --git a/xml/impl/src/com/intellij/xml/util/HtmlUtil.java b/xml/impl/src/com/intellij/xml/util/HtmlUtil.java index 552f12794ec8..a30e87a22214 100644 --- a/xml/impl/src/com/intellij/xml/util/HtmlUtil.java +++ b/xml/impl/src/com/intellij/xml/util/HtmlUtil.java @@ -127,10 +127,11 @@ public class HtmlUtil { }; // flow elements are block or inline, so they shuld not close

for example - @NonNls private static final String[] POSSIBLY_INLINE_TAGS = {"a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br", "button", - "cite", "code", "del", "dfn", "em", "font", "i", "iframe", "img", "input", "ins", - "kbd", "label", "map", "object", "q", "s", "samp", "select", "small", "span", "strike", - "strong", "sub", "sup", "textarea", "tt", "u", "var"}; + @NonNls private static final String[] POSSIBLY_INLINE_TAGS = + {"a", "abbr", "acronym", "applet", "b", "basefont", "bdo", "big", "br", "button", + "cite", "code", "del", "dfn", "em", "font", "i", "iframe", "img", "input", "ins", + "kbd", "label", "map", "object", "q", "s", "samp", "select", "small", "span", "strike", + "strong", "sub", "sup", "textarea", "tt", "u", "var"}; private static final Set BLOCK_TAGS_MAP = new THashSet(); @@ -306,8 +307,9 @@ public class HtmlUtil { switch (type) { case XmlEntitiesInspection.UNKNOWN_TAG: - HtmlUnknownTagInspection unknownTagInspection = (HtmlUnknownTagInspection)profile.getUnwrappedTool(HtmlUnknownTagInspection.TAG_SHORT_NAME, - containingFile); + HtmlUnknownTagInspection unknownTagInspection = + (HtmlUnknownTagInspection)profile.getUnwrappedTool(HtmlUnknownTagInspection.TAG_SHORT_NAME, + containingFile); if (unknownTagInspection != null) { return unknownTagInspection.getAdditionalEntries(); } @@ -338,8 +340,16 @@ public class HtmlUtil { return descriptors; } - if (declarationTag.getPrefixByNamespace(XmlUtil.JSF_HTML_URI) != null && - declarationTag.getNSDescriptor(XmlUtil.XHTML_URI, true) != null && + + boolean isJsfHtmlNamespace = false; + for (String jsfHtmlUri : XmlUtil.JSF_HTML_URIS) { + if (declarationTag.getPrefixByNamespace(jsfHtmlUri) != null) { + isJsfHtmlNamespace = true; + break; + } + } + + if (isJsfHtmlNamespace && declarationTag.getNSDescriptor(XmlUtil.XHTML_URI, true) != null && !XmlUtil.JSP_URI.equals(declarationTag.getNamespace())) { descriptors = ArrayUtil.append( @@ -662,8 +672,7 @@ public class HtmlUtil { public static boolean isPureHtmlFile(@NotNull PsiFile file) { FileType fileTypeByName = FileTypeManager.getInstance().getFileTypeByFileName(file.getName()); return file.getLanguage() == HTMLLanguage.INSTANCE && - fileTypeByName == HtmlFileType.INSTANCE && - !(file.getViewProvider() instanceof MultiplePsiFilesPerDocumentFileViewProvider); + fileTypeByName == HtmlFileType.INSTANCE && + !(file.getViewProvider() instanceof MultiplePsiFilesPerDocumentFileViewProvider); } - } diff --git a/xml/impl/src/com/intellij/xml/util/XmlUtil.java b/xml/impl/src/com/intellij/xml/util/XmlUtil.java index ca79e8801a3d..3ad3492c1db3 100644 --- a/xml/impl/src/com/intellij/xml/util/XmlUtil.java +++ b/xml/impl/src/com/intellij/xml/util/XmlUtil.java @@ -108,10 +108,18 @@ public class XmlUtil { @NonNls public static final String JSTL_CORE_URI = "http://java.sun.com/jsp/jstl/core"; @NonNls public static final String JSTL_CORE_URI2 = "http://java.sun.com/jstl/core"; @NonNls public static final String JSTL_CORE_URI3 = "http://java.sun.com/jstl/core_rt"; - @NonNls public static final String[] JSTL_CORE_URIS = {JSTL_CORE_URI, JSTL_CORE_URI2, JSTL_CORE_URI3}; + @NonNls public static final String JSTL_CORE_URI_JAVAEE_7 = "http://xmlns.jcp.org/jsp/jstl/core"; + + @NonNls public static final String[] JSTL_CORE_URIS = {JSTL_CORE_URI, JSTL_CORE_URI2, JSTL_CORE_URI3, JSTL_CORE_URI_JAVAEE_7}; + @NonNls public static final String JSF_HTML_URI = "http://java.sun.com/jsf/html"; + @NonNls public static final String JSF_HTML_URI_JAVAEE_7 = "http://xmlns.jcp.org/jsf/html"; + @NonNls public static final String[] JSF_HTML_URIS = {JSF_HTML_URI, JSF_HTML_URI_JAVAEE_7}; + @NonNls public static final String JSF_CORE_URI = "http://java.sun.com/jsf/core"; + @NonNls public static final String JSF_CORE_URI_JAVAEE_7 = "http://xmlns.jcp.org/jsf/core"; + @NonNls public static final String[] JSF_CORE_URIS = {JSF_CORE_URI, JSF_CORE_URI_JAVAEE_7}; @NonNls public static final String JSTL_FORMAT_URI = "http://java.sun.com/jsp/jstl/fmt"; @NonNls public static final String JSTL_FORMAT_URI2 = "http://java.sun.com/jstl/fmt"; @@ -136,9 +144,16 @@ public class XmlUtil { @NonNls public static final String[] WEB_XML_URIS = {"http://java.sun.com/xml/ns/j2ee", "http://java.sun.com/xml/ns/javaee", "http://java.sun.com/dtd/web-app_2_3.dtd", "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"}; + @NonNls public static final String FACELETS_URI = "http://java.sun.com/jsf/facelets"; + @NonNls public static final String FACELETS_URI_JAVAEE_7 = "http://xmlns.jcp.org/jsf/facelets"; + @NonNls public static final String[] FACELETS_URIS = {FACELETS_URI, FACELETS_URI_JAVAEE_7}; + @NonNls public static final String JSTL_FUNCTIONS_URI = "http://java.sun.com/jsp/jstl/functions"; @NonNls public static final String JSTL_FUNCTIONS_URI2 = "http://java.sun.com/jstl/functions"; + @NonNls public static final String JSTL_FUNCTIONS_JAVAEE_7 = "http://xmlns.jcp.org/jsp/jstl/functions"; + @NonNls public static final String[] JSTL_FUNCTIONS_URIS = {JSTL_FUNCTIONS_URI, JSTL_FUNCTIONS_URI2, JSTL_FUNCTIONS_JAVAEE_7}; + @NonNls public static final String JSTL_FN_FACELET_URI = "com.sun.facelets.tag.jstl.fn.JstlFnLibrary"; @NonNls public static final String JSTL_CORE_FACELET_URI = "com.sun.facelets.tag.jstl.core.JstlCoreLibrary"; @NonNls public static final String TARGET_NAMESPACE_ATTR_NAME = "targetNamespace"; @@ -256,7 +271,7 @@ public class XmlUtil { } public static Collection findNSFilesByURI(String namespace, final Project project, Module module) { - final List> + final List> resources = XmlNamespaceIndex.getResourcesByNamespace(namespace, project, module); final PsiManager psiManager = PsiManager.getInstance(project); return ContainerUtil.mapNotNull(resources, new NullableFunction, XmlFile>() { @@ -380,7 +395,7 @@ public class XmlUtil { } public static boolean attributeFromTemplateFramework(@NonNls final String name, final XmlTag tag) { - return "jsfc".equals(name) && tag.getNSDescriptor(JSF_HTML_URI, true) != null; + return "jsfc".equals(name) && isJsfHtmlScheme(tag); } @Nullable @@ -488,6 +503,15 @@ public class XmlUtil { return false; } + private static boolean isJsfHtmlScheme(XmlTag tag) { + for (String jsfHtmlUri : JSF_HTML_URIS) { + if (tag.getNSDescriptor(jsfHtmlUri, true) != null) { + return true; + } + } + return false; + } + @Nullable public static PsiFile findRelativeFile(String uri, PsiElement base) { if (base instanceof PsiFile) { @@ -523,7 +547,7 @@ public class XmlUtil { @Nullable public static PsiElement findNamespaceDeclaration(XmlElement xmlElement, String nsName) { - while (! (xmlElement instanceof XmlTag) && xmlElement != null) { + while (!(xmlElement instanceof XmlTag) && xmlElement != null) { final PsiElement parent = xmlElement.getParent(); if (!(parent instanceof XmlElement)) return null; xmlElement = (XmlElement)parent; @@ -548,7 +572,8 @@ public class XmlUtil { CodeStyleManager.getInstance(tag.getProject()).reformat(tag); } else { - CodeStyleManager.getInstance(tag.getProject()).reformatRange(tag, tag.getTextRange().getStartOffset(), child.getTextRange().getEndOffset()); + CodeStyleManager.getInstance(tag.getProject()) + .reformatRange(tag, tag.getTextRange().getStartOffset(), child.getTextRange().getEndOffset()); } } @@ -722,8 +747,8 @@ public class XmlUtil { final Language language = file.getLanguage(); if (language == HTMLLanguage.INSTANCE || language == XHTMLLanguage.INSTANCE) { return new String[][]{new String[]{"", XHTML_URI}}; - } } + } return null; } @@ -732,7 +757,7 @@ public class XmlUtil { public static String getDtdUri(XmlDocument document) { XmlProlog prolog = document.getProlog(); if (prolog != null) { - return getDtdUri( prolog.getDoctype() ); + return getDtdUri(prolog.getDoctype()); } return null; } @@ -915,11 +940,10 @@ public class XmlUtil { } /** - * * @param xmlTag * @param localName * @param namespace - * @param bodyText pass null to create collapsed tag, empty string means creating expanded one + * @param bodyText pass null to create collapsed tag, empty string means creating expanded one * @param enforceNamespacesDeep * @return */ @@ -938,7 +962,9 @@ public class XmlUtil { } try { String tagStart = qname + (!StringUtil.isEmpty(namespace) && xmlTag.getPrefixByNamespace(namespace) == null && - !(StringUtil.isEmpty(xmlTag.getNamespacePrefix()) && namespace.equals(xmlTag.getNamespace()))? " xmlns=\"" + namespace + "\"" : ""); + !(StringUtil.isEmpty(xmlTag.getNamespacePrefix()) && namespace.equals(xmlTag.getNamespace())) + ? " xmlns=\"" + namespace + "\"" + : ""); Language language = xmlTag.getLanguage(); if (!(language instanceof HTMLLanguage)) language = StdFileTypes.XML.getLanguage(); XmlTag retTag;