Fix LeafRefValidatation for refs defined in augmentations
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / leafref / LeafRefValidatation.java
index e39c88ec70ef4c4014354a1539de0f847ff60515..b54cdbc78e314f76b3f7c44a3def29dfa6a10cd1 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 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.ChoiceNode;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
@@ -220,8 +221,13 @@ public final class LeafRefValidatation {
             final DataContainerNode<?> dataContainerNode = (DataContainerNode<?>) node;
 
             for (final DataContainerChild<? extends PathArgument, ?> child : dataContainerNode.getValue()) {
-                final QName qname = child.getNodeType();
+                if (child instanceof AugmentationNode) {
+                    validateNodeData(child, referencedByCtx, referencingCtx, modificationType, current
+                        .node(child.getIdentifier()));
+                    return;
+                }
 
+                final QName qname = child.getNodeType();
                 final LeafRefContext childReferencedByCtx;
                 if (referencedByCtx != null) {
                     childReferencedByCtx = referencedByCtx.getReferencedChildByName(qname);
@@ -249,8 +255,13 @@ public final class LeafRefValidatation {
             for (final MapEntryNode mapEntry : map.getValue()) {
                 final YangInstanceIdentifier mapEntryYangInstanceIdentifier = current.node(mapEntry.getIdentifier());
                 for (final DataContainerChild<? extends PathArgument, ?> mapEntryNode : mapEntry.getValue()) {
-                    final QName qname = mapEntryNode.getNodeType();
+                    if (mapEntryNode instanceof AugmentationNode) {
+                        validateNodeData(mapEntryNode, referencedByCtx, referencingCtx, modificationType, current
+                            .node(mapEntryNode.getIdentifier()));
+                        return;
+                    }
 
+                    final QName qname = mapEntryNode.getNodeType();
                     final LeafRefContext childReferencedByCtx;
                     if (referencedByCtx != null) {
                         childReferencedByCtx = referencedByCtx.getReferencedChildByName(qname);