Add DataSchemaContextNode/SchemaInferenceStack integration
[yangtools.git] / data / yang-data-util / src / main / java / org / opendaylight / yangtools / yang / data / util / DataContainerContextNode.java
index 96869c1b8d7a8cd623e3ee32e51e301b3d35928b..5059deae83d794ade47c55db8027caaec7bddafb 100644 (file)
@@ -11,11 +11,14 @@ import static java.util.Objects.requireNonNull;
 
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 
 abstract class DataContainerContextNode<T extends PathArgument> extends AbstractInteriorContextNode<T> {
     private final ConcurrentMap<PathArgument, DataSchemaContextNode<?>> byArg = new ConcurrentHashMap<>();
@@ -47,6 +50,25 @@ abstract class DataContainerContextNode<T extends PathArgument> extends Abstract
         return register(potential);
     }
 
+    @Override
+    protected final DataSchemaContextNode<?> enterChild(final QName child, final SchemaInferenceStack stack) {
+        return pushToStack(getChild(child), stack);
+    }
+
+
+    @Override
+    protected final DataSchemaContextNode<?> enterChild(final PathArgument child, final SchemaInferenceStack stack) {
+        return pushToStack(getChild(child), stack);
+    }
+
+    private static @Nullable DataSchemaContextNode<?> pushToStack(final @Nullable DataSchemaContextNode<?> child,
+            final @NonNull SchemaInferenceStack stack) {
+        if (child != null) {
+            child.pushToStack(stack);
+        }
+        return child;
+    }
+
     private DataSchemaContextNode<?> fromLocalSchema(final PathArgument child) {
         if (child instanceof AugmentationIdentifier) {
             return fromSchemaAndQNameChecked(container, ((AugmentationIdentifier) child).getPossibleChildNames()
@@ -55,8 +77,8 @@ abstract class DataContainerContextNode<T extends PathArgument> extends Abstract
         return fromSchemaAndQNameChecked(container, child.getNodeType());
     }
 
-    protected DataSchemaContextNode<?> fromLocalSchemaAndQName(final DataNodeContainer schema2, final QName child) {
-        return fromSchemaAndQNameChecked(schema2, child);
+    protected DataSchemaContextNode<?> fromLocalSchemaAndQName(final DataNodeContainer schema, final QName child) {
+        return fromSchemaAndQNameChecked(schema, child);
     }
 
     private DataSchemaContextNode<?> register(final DataSchemaContextNode<?> potential) {
@@ -69,5 +91,4 @@ abstract class DataContainerContextNode<T extends PathArgument> extends Abstract
         }
         return potential;
     }
-
 }