From 02b8f9c71a237adb6ea93dcdad9909db0a33ff34 Mon Sep 17 00:00:00 2001 From: Fedor Korotkov Date: Thu, 11 Apr 2013 11:24:53 +0400 Subject: [PATCH] WEB-6592 Schemeless (protocol-relative) URLs in HTML documents are not recognized --- .../src/com/intellij/html/impl/util/MicrodataUtil.java | 10 ++-------- .../reference/impl/providers/URIReferenceProvider.java | 4 ++-- xml/impl/src/com/intellij/xml/util/HtmlUtil.java | 7 +++++++ 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/xml/impl/src/com/intellij/html/impl/util/MicrodataUtil.java b/xml/impl/src/com/intellij/html/impl/util/MicrodataUtil.java index 78fb7255d147..6435a1dd67e9 100644 --- a/xml/impl/src/com/intellij/html/impl/util/MicrodataUtil.java +++ b/xml/impl/src/com/intellij/html/impl/util/MicrodataUtil.java @@ -37,6 +37,7 @@ import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; import com.intellij.util.PairFunction; import com.intellij.util.text.StringTokenizer; +import com.intellij.xml.util.HtmlUtil; import gnu.trove.THashMap; import gnu.trove.THashSet; import org.jetbrains.annotations.Nls; @@ -56,9 +57,6 @@ public class MicrodataUtil { public static final String ITEM_PROP = "itemprop"; public static final String ITEM_ID = "itemid"; - @NonNls private static final String HTTP = "http://"; - @NonNls private static final String HTTPS = "https://"; - public static boolean hasScopeTag(@Nullable XmlTag tag) { return findScopeTag(tag) != null; } @@ -130,7 +128,7 @@ public class MicrodataUtil { @Nullable @Override public PsiReference fun(String token, Integer offset) { - if (isUrl(token)) { + if (HtmlUtil.hasHtmlPrefix(token)) { final TextRange range = TextRange.from(offset, token.length()); final URLReference urlReference = new URLReference(element, range, true); return new URIReferenceProvider.DependentNSReference(element, range, urlReference) { @@ -167,10 +165,6 @@ public class MicrodataUtil { return result.toArray(new PsiReference[result.size()]); } - private static boolean isUrl(String url) { - return url.startsWith(HTTP) || url.startsWith(HTTPS); - } - @Nullable public static String getStripedAttributeValue(@Nullable XmlTag tag, @Nls String attributeName) { String value = tag != null ? tag.getAttributeValue(attributeName) : null; diff --git a/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URIReferenceProvider.java b/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URIReferenceProvider.java index 23ab5613fe7b..25e048c3db2d 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URIReferenceProvider.java +++ b/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URIReferenceProvider.java @@ -34,6 +34,7 @@ import com.intellij.psi.xml.XmlAttribute; import com.intellij.util.ArrayUtil; import com.intellij.util.ProcessingContext; import com.intellij.util.containers.ContainerUtil; +import com.intellij.xml.util.HtmlUtil; import com.intellij.xml.util.XmlUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -62,7 +63,6 @@ public class URIReferenceProvider extends PsiReferenceProvider { return true; } }; - @NonNls private static final String HTTP = "http://"; @NonNls private static final String URN = "urn:"; @NonNls private static final String FILE = "file:"; @NonNls private static final String CLASSPATH = "classpath:/"; @@ -162,7 +162,7 @@ public class URIReferenceProvider extends PsiReferenceProvider { } static boolean isUrlText(final String s, Project project) { - final boolean surelyUrl = s.startsWith(HTTP) || s.startsWith(URN); + final boolean surelyUrl = HtmlUtil.hasHtmlPrefix(s) || s.startsWith(URN); if (surelyUrl) return surelyUrl; int protocolIndex = s.indexOf(":/"); if (protocolIndex > 1 && !s.regionMatches(0,"classpath",0,protocolIndex)) return true; diff --git a/xml/impl/src/com/intellij/xml/util/HtmlUtil.java b/xml/impl/src/com/intellij/xml/util/HtmlUtil.java index 86252c1d22f1..a52b879d90d4 100644 --- a/xml/impl/src/com/intellij/xml/util/HtmlUtil.java +++ b/xml/impl/src/com/intellij/xml/util/HtmlUtil.java @@ -597,6 +597,13 @@ public class HtmlUtil { return isHtmlFile(file) || file.getViewProvider() instanceof TemplateLanguageFileViewProvider; } + public static boolean hasHtmlPrefix(@NotNull String url) { + return url.startsWith("http://") || + url.startsWith("https://") || + url.startsWith("//") || //Protocol-relative URL + url.startsWith("ftp://"); + } + public static boolean isHtmlFile(PsiElement element) { Language language = element.getLanguage(); return language == HTMLLanguage.INSTANCE || language == XHTMLLanguage.INSTANCE;