Refactored parsing of yang uses statement.
[yangtools.git] / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / UsesNodeBuilderImpl.java
index 404c01910b37e64598ba1eac28a97d2909059451..ce7ef8737a06c241013d0589c265e22db902fd99 100644 (file)
@@ -24,7 +24,10 @@ import org.opendaylight.yangtools.yang.parser.builder.api.AbstractBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;\r
 import org.opendaylight.yangtools.yang.parser.builder.api.Builder;\r
 import org.opendaylight.yangtools.yang.parser.builder.api.DataNodeContainerBuilder;\r
+import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;\r
+import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder;\r
 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;\r
+import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;\r
 import org.opendaylight.yangtools.yang.parser.builder.api.UsesNodeBuilder;\r
 import org.opendaylight.yangtools.yang.parser.util.RefineHolder;\r
 import org.opendaylight.yangtools.yang.parser.util.YangParseException;\r
@@ -41,6 +44,11 @@ public final class UsesNodeBuilderImpl extends AbstractBuilder implements UsesNo
     private final List<SchemaNodeBuilder> refineBuilders = new ArrayList<SchemaNodeBuilder>();\r
     private final List<RefineHolder> refines = new ArrayList<RefineHolder>();\r
 \r
+    private final Set<DataSchemaNodeBuilder> targetChildren = new HashSet<>();\r
+    private final Set<GroupingBuilder> targetGroupings = new HashSet<>();\r
+    private final Set<TypeDefinitionBuilder> targetTypedefs = new HashSet<>();\r
+    private final List<UnknownSchemaNodeBuilder> targetUnknownNodes = new ArrayList<>();\r
+\r
     public UsesNodeBuilderImpl(final String moduleName, final int line, final String groupingName) {\r
         super(moduleName, line);\r
         this.groupingName = groupingName;\r
@@ -156,8 +164,19 @@ public final class UsesNodeBuilderImpl extends AbstractBuilder implements UsesNo
     }\r
 \r
     @Override\r
-    public void addRefineNode(SchemaNodeBuilder refineNode) {\r
+    public void addRefineNode(DataSchemaNodeBuilder refineNode) {\r
+        // add to refine nodes\r
         refineBuilders.add(refineNode);\r
+        // replace in target children\r
+        DataSchemaNodeBuilder toRemove = null;\r
+        for(DataSchemaNodeBuilder child : targetChildren) {\r
+            if(child.getQName().equals(refineNode.getQName())) {\r
+                toRemove = child;\r
+                break;\r
+            }\r
+        }\r
+        targetChildren.remove(toRemove);\r
+        targetChildren.add(refineNode);\r
     }\r
 \r
     @Override\r
@@ -170,6 +189,26 @@ public final class UsesNodeBuilderImpl extends AbstractBuilder implements UsesNo
         refines.add(refine);\r
     }\r
 \r
+    @Override\r
+    public Set<DataSchemaNodeBuilder> getTargetChildren() {\r
+        return targetChildren;\r
+    }\r
+\r
+    @Override\r
+    public Set<GroupingBuilder> getTargetGroupings() {\r
+        return targetGroupings;\r
+    }\r
+\r
+    @Override\r
+    public Set<TypeDefinitionBuilder> getTargetTypedefs() {\r
+        return targetTypedefs;\r
+    }\r
+\r
+    @Override\r
+    public List<UnknownSchemaNodeBuilder> getTargetUnknownNodes() {\r
+        return targetUnknownNodes;\r
+    }\r
+\r
     @Override\r
     public int hashCode() {\r
         final int prime = 31;\r