Fixed bug in QName of augmented nodes added by uses statement.
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / TypeDefinitionBuilderImpl.java
index fd158a753dd18925d999ed1ea5e4509dd3fcb889..289d09585482033aac778f4bf9fb20d1583dcc82 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.parser.builder.impl;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -16,6 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.YangNode;
 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
@@ -45,14 +45,14 @@ public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder im
     }
 
     @Override
-    public TypeDefinition<? extends TypeDefinition<?>> build() {
+    public TypeDefinition<? extends TypeDefinition<?>> build(YangNode parent) {
         TypeDefinition<?> result = null;
         ExtendedType.Builder typeBuilder = null;
         if ((type == null || type instanceof UnknownType) && typedef == null) {
             throw new YangParseException("Unresolved type: '" + qname.getLocalName() + "'.");
         }
         if (type == null || type instanceof UnknownType) {
-            type = typedef.build();
+            type = typedef.build(parent);
         }
 
         typeBuilder = new ExtendedType.Builder(qname, type, description, reference, schemaPath);
@@ -68,13 +68,10 @@ public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder im
         typeBuilder.fractionDigits(fractionDigits);
 
         // UNKNOWN NODES
-        if (unknownNodes == null) {
-            unknownNodes = new ArrayList<UnknownSchemaNode>();
-            for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
-                unknownNodes.add(b.build());
-            }
-            Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
+        for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
+            unknownNodes.add(b.build(null));
         }
+        Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
         typeBuilder.unknownSchemaNodes(unknownNodes);
         result = typeBuilder.build();
         return result;
@@ -213,4 +210,40 @@ public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder im
         return "typedef " + qname.getLocalName();
     }
 
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
+
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        if (!super.equals(obj)) {
+            return false;
+        }
+        TypeDefinitionBuilderImpl other = (TypeDefinitionBuilderImpl) obj;
+
+        if (schemaPath == null) {
+            if (other.schemaPath != null) {
+                return false;
+            }
+        } else if (!schemaPath.equals(other.schemaPath)) {
+            return false;
+        }
+
+        return true;
+    }
+
 }