resolve namespaces declared as import in wsdl:types
authorKonstantin Bulenkov <kb@jetbrains.com>
Tue, 14 Sep 2010 12:37:02 +0000 (16:37 +0400)
committerKirill Likhodedov <kirill.likhodedov@jetbrains.com>
Wed, 15 Sep 2010 11:53:19 +0000 (15:53 +0400)
platform/util/src/com/intellij/util/ArrayUtil.java
xml/impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/URLReference.java

index af1a4fe9e302b0d7286d05a19d5cacd60103bdea..ee278f1fb5b7e53e38d582754d593d125fc4cb7d 100644 (file)
@@ -553,4 +553,11 @@ public class ArrayUtil {
   public static <T> T getLastElement(T[] array) {
     return array.length > 0 ? array[array.length -1] : null;
   }
+
+  public static <T> 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;
+  }
 }
index b326395f7f995fd030d9ca16cd9f8a1456963891..2c0a8eb54d39b0d090767b39a2093a2f7b3c7c6c 100644 (file)
@@ -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;
+          }
         }
       }
     }