diff --git a/platform/util/src/com/intellij/util/ArrayUtil.java b/platform/util/src/com/intellij/util/ArrayUtil.java index af1a4fe9e302..ee278f1fb5b7 100644 --- a/platform/util/src/com/intellij/util/ArrayUtil.java +++ b/platform/util/src/com/intellij/util/ArrayUtil.java @@ -553,4 +553,11 @@ public class ArrayUtil { public static T getLastElement(T[] array) { return array.length > 0 ? array[array.length -1] : null; } + + public static T[] join(T[] array1, T[] array2) { + final T[] newArray = (T[])Array.newInstance(array1.getClass().getComponentType(), array1.length + array2.length); + System.arraycopy(array1, 0, newArray, 0, array1.length); + System.arraycopy(array2, 0, newArray, array1.length, array2.length); + return newArray; + } } diff --git a/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URLReference.java b/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URLReference.java index b326395f7f99..2c0a8eb54d39 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URLReference.java +++ b/xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URLReference.java @@ -132,6 +132,14 @@ public class URLReference implements PsiReference, QuickFixProvider, EmptyResolv result[0] = t; return false; } + for (XmlTag anImport : t.findSubTags("import", t.getNamespace())) { + if (canonicalText.equals(anImport.getAttributeValue("namespace"))) { + final XmlAttribute location = anImport.getAttribute("schemaLocation"); + if (location != null) { + result[0] = FileReferenceUtil.findFile(location.getValueElement()); + } + } + } return true; } }); @@ -233,12 +241,11 @@ public class URLReference implements PsiReference, QuickFixProvider, EmptyResolv final XmlTag subTag = rootTag.findFirstSubTag(types); if (subTag != null) { - XmlTag[] tags = subTag.findSubTags("xsd:schema"); - if (tags.length == 0) { - tags = subTag.findSubTags("schema"); - } - for(XmlTag t:tags) { - if (!processor.process(t)) return; + for (int i = 0; i < XmlUtil.SCHEMA_URIS.length; i++) { + final XmlTag[] tags = subTag.findSubTags("schema", XmlUtil.SCHEMA_URIS[i]); + for (XmlTag t : tags) { + if (!processor.process(t)) return; + } } } }