Refactored parsing of uses and augment statements.
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / ModuleBuilder.java
index a8cd5f4c77b111f81b74ac68e2a990dba8d82dc9..df3bb5910a21fbf28b14886bf34ad1087678688a 100644 (file)
@@ -63,8 +63,6 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
     private String prefix;
     private Date revision;
 
-    private int augmentsResolved;
-
     private final LinkedList<Builder> actualPath = new LinkedList<Builder>();
     private final Set<TypeAwareBuilder> dirtyNodes = new HashSet<TypeAwareBuilder>();
 
@@ -100,14 +98,6 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
         instance.setImports(imports);
         instance.setNamespace(namespace);
 
-        // process uses
-        for(UsesNodeBuilder use : addedUsesNodes) {
-            addedChildNodes.addAll(use.getTargetChildren());
-            addedGroupings.addAll(use.getTargetGroupings());
-            addedTypedefs.addAll(use.getTargetTypedefs());
-            addedUnknownNodes.addAll(use.getTargetUnknownNodes());
-        }
-
         // TYPEDEFS
         final Set<TypeDefinition<?>> typedefs = new TreeSet<TypeDefinition<?>>(Comparators.SCHEMA_NODE_COMP);
         for (TypeDefinitionBuilder tdb : addedTypedefs) {
@@ -197,6 +187,15 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
         return instance;
     }
 
+    public boolean allUsesLoadDone() {
+        for(UsesNodeBuilder usesNode : allUsesNodes) {
+            if(!usesNode.isLoadDone()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
     @Override
     public void setParent(Builder parent) {
         throw new YangParseException(name, 0, "Can not set parent to module");
@@ -280,14 +279,6 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
         return revision;
     }
 
-    public int getAugmentsResolved() {
-        return augmentsResolved;
-    }
-
-    public void augmentResolved() {
-        augmentsResolved++;
-    }
-
     public void markActualNodeDirty() {
         final TypeAwareBuilder nodeBuilder = (TypeAwareBuilder) getActualNode();
         dirtyNodes.add(nodeBuilder);
@@ -447,6 +438,11 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
         return builder;
     }
 
+    @Override
+    public Set<UsesNodeBuilder> getUsesNodes() {
+        return addedUsesNodes;
+    }
+
     @Override
     public void addUsesNode(UsesNodeBuilder usesBuilder) {
         addedUsesNodes.add(usesBuilder);
@@ -490,6 +486,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
         }
 
         final RpcDefinitionBuilder rpcBuilder = new RpcDefinitionBuilder(name, line, qname);
+        rpcBuilder.setParent(parent);
 
         String rpcName = qname.getLocalName();
         for (RpcDefinitionBuilder rpc : addedRpcs) {
@@ -569,6 +566,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
         }
 
         final NotificationBuilder builder = new NotificationBuilder(name, line, qname);
+        builder.setParent(parent);
         addedNotifications.add(builder);
 
         return builder;
@@ -581,6 +579,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
         }
 
         final FeatureBuilder builder = new FeatureBuilder(name, line, qname);
+        builder.setParent(parent);
 
         String featureName = qname.getLocalName();
         for (FeatureBuilder addedFeature : addedFeatures) {
@@ -735,6 +734,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
         }
 
         final DeviationBuilder builder = new DeviationBuilder(name, line, targetPath);
+        builder.setParent(parent);
         addedDeviations.add(builder);
         return builder;
     }
@@ -753,6 +753,7 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
         }
 
         final IdentitySchemaNodeBuilder builder = new IdentitySchemaNodeBuilder(name, line, qname);
+        builder.setParent(parent);
         addedIdentities.add(builder);
         return builder;
     }
@@ -1170,6 +1171,9 @@ public class ModuleBuilder extends AbstractDataNodeContainerBuilder {
             }
             addedChildNodes.add(child);
         } else {
+            if(parent instanceof AugmentationSchemaBuilder) {
+                child.setAugmenting(true);
+            }
             // no need for checking rpc and notification because they can be
             // defined only under module or submodule
             if (parent instanceof DataNodeContainerBuilder) {