Remove redundant modifiers
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / SchemaContextUtil.java
index 25e4cab4ffbc069ac5e87c5a97e36cd7f3f331cc..2b7d5dc83b15ffecf400b6568fca3e2b96ced28a 100644 (file)
@@ -14,7 +14,7 @@ import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Iterables;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -631,23 +631,25 @@ public final class SchemaContextUtil {
         RevisionAwareXPath pathStatement = typeDefinition.getPathStatement();
         pathStatement = new RevisionAwareXPathImpl(stripConditionsFromXPathString(pathStatement), pathStatement.isAbsolute());
 
-        SchemaNode baseSchema = schema;
-        while (baseSchema instanceof DerivableSchemaNode) {
-            final Optional<? extends SchemaNode> basePotential = ((DerivableSchemaNode) baseSchema).getOriginal();
-            if (basePotential.isPresent()) {
-                baseSchema = basePotential.get();
-            } else {
-                break;
+        final DataSchemaNode dataSchemaNode;
+        if (pathStatement.isAbsolute()) {
+            SchemaNode baseSchema = schema;
+            while (baseSchema instanceof DerivableSchemaNode) {
+                final Optional<? extends SchemaNode> basePotential = ((DerivableSchemaNode) baseSchema).getOriginal();
+                if (basePotential.isPresent()) {
+                    baseSchema = basePotential.get();
+                } else {
+                    break;
+                }
             }
-        }
 
-        Module parentModule = findParentModuleOfReferencingType(schemaContext, baseSchema);
-
-        final DataSchemaNode dataSchemaNode;
-        if(pathStatement.isAbsolute()) {
-            dataSchemaNode = (DataSchemaNode) SchemaContextUtil.findDataSchemaNode(schemaContext, parentModule, pathStatement);
+            Module parentModule = findParentModuleOfReferencingType(schemaContext, baseSchema);
+            dataSchemaNode = (DataSchemaNode) SchemaContextUtil.findDataSchemaNode(schemaContext, parentModule,
+                    pathStatement);
         } else {
-            dataSchemaNode = (DataSchemaNode) SchemaContextUtil.findDataSchemaNodeForRelativeXPath(schemaContext, parentModule, baseSchema, pathStatement);
+            Module parentModule = findParentModule(schemaContext, schema);
+            dataSchemaNode = (DataSchemaNode) SchemaContextUtil.findDataSchemaNodeForRelativeXPath(schemaContext,
+                    parentModule, schema, pathStatement);
         }
 
         // FIXME this is just to preserve backwards compatibility since yangtools do not mind wrong leafref xpaths
@@ -678,7 +680,15 @@ public final class SchemaContextUtil {
             nodeType = ((LeafListSchemaNode) schemaNode).getType();
         }
 
-        if (nodeType.getBaseType() != null) {
+        if (nodeType instanceof ExtendedType) {
+            while (nodeType.getBaseType() instanceof ExtendedType) {
+                nodeType = nodeType.getBaseType();
+            }
+
+            QNameModule typeDefModuleQname = nodeType.getQName().getModule();
+            return schemaContext.findModuleByNamespaceAndRevision(typeDefModuleQname.getNamespace(),
+                    typeDefModuleQname.getRevision());
+        } else if (nodeType.getBaseType() != null) {
             while (nodeType.getBaseType() != null) {
                 nodeType = nodeType.getBaseType();
             }
@@ -789,7 +799,7 @@ public final class SchemaContextUtil {
      *            a node representing LeafSchemaNode
      * @return concrete type definition of node value
      */
-    private static TypeDefinition<? extends Object> typeDefinition(final LeafSchemaNode node) {
+    private static TypeDefinition<?> typeDefinition(final LeafSchemaNode node) {
         TypeDefinition<?> baseType = node.getType();
         while (baseType.getBaseType() != null) {
             baseType = baseType.getBaseType();
@@ -804,7 +814,7 @@ public final class SchemaContextUtil {
      *            a node representing LeafListSchemaNode
      * @return concrete type definition of node value
      */
-    private static TypeDefinition<? extends Object> typeDefinition(final LeafListSchemaNode node) {
+    private static TypeDefinition<?> typeDefinition(final LeafListSchemaNode node) {
         TypeDefinition<?> baseType = node.getType();
         while (baseType.getBaseType() != null) {
             baseType = baseType.getBaseType();
@@ -819,13 +829,13 @@ public final class SchemaContextUtil {
      *            a node representing DataSchemaNode
      * @return concrete type definition of node value
      */
-    private static TypeDefinition<? extends Object> typeDefinition(final DataSchemaNode node) {
+    private static TypeDefinition<?> typeDefinition(final DataSchemaNode node) {
         if (node instanceof LeafListSchemaNode) {
             return typeDefinition((LeafListSchemaNode) node);
         } else if (node instanceof LeafSchemaNode) {
             return typeDefinition((LeafSchemaNode) node);
         } else {
-            throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object> asList(node).toString());
+            throw new IllegalArgumentException("Unhandled parameter types: " + Collections.<Object>singletonList(node).toString());
         }
     }
 }