Bug 2117: Inner grouping used in outer grouping's choice case
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / SchemaContextUtil.java
index 57ed8fdd1da3ebdd47b89f690b6e1571114ef06b..83a706133623d458c8c201373b415b8367f25fcc 100644 (file)
@@ -274,7 +274,8 @@ public final class SchemaContextUtil {
         return null;
     }
 
-    private static SchemaNode findNodeInGrouping(final GroupingDefinition grouping, final Iterable<QName> path) {
+    private static SchemaNode findNodeInGrouping(
+            final GroupingDefinition grouping, final Iterable<QName> path) {
         final QName current = Iterables.getFirst(path, null);
         if (current == null) {
             LOG.debug("Found grouping {}", grouping);
@@ -283,12 +284,17 @@ public final class SchemaContextUtil {
 
         LOG.trace("Looking for path {} in grouping {}", path, grouping);
         final DataSchemaNode node = grouping.getDataChildByName(current);
-        if (node == null) {
-            LOG.debug("No node matching {} found in grouping {}", current, grouping);
-            return null;
+
+        if (node != null)
+            return findNode(node, nextLevel(path));
+
+        for (GroupingDefinition groupingDefinition : grouping.getGroupings()) {
+            if (groupingDefinition.getQName().equals(current))
+                return findNodeInGrouping(groupingDefinition, nextLevel(path));
         }
 
-        return findNode(node, nextLevel(path));
+        LOG.debug("No node matching {} found in grouping {}", current, grouping);
+        return null;
     }
 
     private static SchemaNode findNodeInRpc(final RpcDefinition rpc, final Iterable<QName> path) {