Improve ImmutableAugmentationNodeBuilder defensiveness
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / builder / impl / ImmutableAugmentationNodeBuilder.java
index 8f4357d24c0361b244c323d631e12d6880c78a39..e445f42fb630f23e68a66ba5ed5d44c4678c2acc 100644 (file)
@@ -13,7 +13,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.Augmentat
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException;
 import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerNode;
 
@@ -51,11 +51,14 @@ public class ImmutableAugmentationNodeBuilder
 
     @Override
     public DataContainerNodeBuilder<AugmentationIdentifier, AugmentationNode> withChild(
-            final DataContainerChild<?, ?> child) {
+            final DataContainerChild child) {
         // Check nested augments
-        DataValidationException.checkLegalData(!(child instanceof AugmentationNode),
-                "Unable to add: %s, as a child for: %s, Nested augmentations are not permitted", child.getNodeType(),
-                getNodeIdentifier() == null ? this : getNodeIdentifier());
+        if (child instanceof AugmentationNode) {
+            final AugmentationIdentifier myId = getNodeIdentifier();
+            throw new DataValidationException(String.format(
+                "Unable to add: %s, as a child for: %s, Nested augmentations are not permitted", child.getIdentifier(),
+                myId == null ? this : myId));
+        }
 
         return super.withChild(child);
     }
@@ -71,11 +74,17 @@ public class ImmutableAugmentationNodeBuilder
     }
 
     private static final class ImmutableAugmentationNode
-            extends AbstractImmutableDataContainerNode<AugmentationIdentifier> implements AugmentationNode {
+            extends AbstractImmutableDataContainerNode<AugmentationIdentifier, AugmentationNode>
+            implements AugmentationNode {
 
         ImmutableAugmentationNode(final AugmentationIdentifier nodeIdentifier,
-                final Map<PathArgument, DataContainerChild<? extends PathArgument, ?>> children) {
+                final Map<PathArgument, Object> children) {
             super(children, nodeIdentifier);
         }
+
+        @Override
+        protected Class<AugmentationNode> implementedType() {
+            return AugmentationNode.class;
+        }
     }
 }