[441901] Non-default type mapping ecore:type is not taken into account
in xs:list mapping
diff --git a/plugins/org.eclipse.xsd/src/org/eclipse/xsd/ecore/XSDEcoreBuilder.java b/plugins/org.eclipse.xsd/src/org/eclipse/xsd/ecore/XSDEcoreBuilder.java
index f7ebe85..a66c98b 100644
--- a/plugins/org.eclipse.xsd/src/org/eclipse/xsd/ecore/XSDEcoreBuilder.java
+++ b/plugins/org.eclipse.xsd/src/org/eclipse/xsd/ecore/XSDEcoreBuilder.java
@@ -427,7 +427,11 @@
           {
             if (xsdSimpleTypeDefinition.getVariety() == XSDVariety.LIST_LITERAL)
             {
-              EDataType itemEDataType = getEDataType(xsdSimpleTypeDefinition.getItemTypeDefinition());
+              EDataType itemEDataType = getExplicitType(xsdSimpleTypeDefinition, eDataType);
+              if (itemEDataType == null)
+              {
+                itemEDataType = getEDataType(xsdSimpleTypeDefinition.getItemTypeDefinition());
+              }
               extendedMetaData.setItemType(eDataType, itemEDataType);
               eDataType.setInstanceTypeName("java.util.List");
             }
@@ -459,7 +463,12 @@
           }
           else
           {
-            EDataType baseEDataType = getEDataType(baseTypeDefinition);
+            EDataType baseEDataType = getExplicitType(xsdSimpleTypeDefinition, eDataType);
+            if (baseEDataType == null)
+            {
+              baseEDataType = getEDataType(baseTypeDefinition);
+            }
+
             String instanceClassName = getInstanceClassName(xsdSimpleTypeDefinition, baseEDataType);
 
             // Don't set up circular inheritance.
@@ -1591,6 +1600,38 @@
     return result;
   }
 
+  private EDataType getExplicitType(XSDSimpleTypeDefinition xsdSimpleTypeDefinition, EModelElement context)
+  {
+    Element element = xsdSimpleTypeDefinition.getElement();
+    if (element != null)
+    {
+      for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling())
+      {
+        if (node.getNodeType() == Node.ELEMENT_NODE)
+        {
+          int nodeType = XSDConstants.nodeType(node);
+          if (nodeType == XSDConstants.RESTRICTION_ELEMENT || nodeType == XSDConstants.LIST_ELEMENT)
+          {
+            String explicitType = getEcoreAttribute((Element)node, "type");
+            if (explicitType != null)
+            {
+              EGenericType explicitGenericType = getGenericType(xsdSimpleTypeDefinition, xsdSimpleTypeDefinition.getElement(), context, explicitType);
+              if (explicitGenericType != null)
+              {
+                EClassifier eClassifier = explicitGenericType.getEClassifier();
+                if (eClassifier instanceof EDataType && explicitGenericType.getETypeArguments().isEmpty() && explicitGenericType.getELowerBound() == null && explicitGenericType.getELowerBound() == null)
+                {
+                  return (EDataType)eClassifier;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    return null;
+  }
+
   protected boolean useSortedAttributes()
   {
     return true;