Binding generator v2 - uses statement - uses leafref #2 86/61586/1
authorJie Han <han.jie@zte.com.cn>
Mon, 17 Jul 2017 12:07:42 +0000 (20:07 +0800)
committerJie Han <han.jie@zte.com.cn>
Mon, 14 Aug 2017 08:06:00 +0000 (16:06 +0800)
- find actual node for leafref node added by uses

Change-Id: I1b5febb3665544def9ff9ba0c7b127ca1be247fc
Signed-off-by: Jie Han <han.jie@zte.com.cn>
(cherry picked from commit f935e02f0667b235841a921fa163d94a193e6947)

binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java

index 7faea06392eb1bff0615126a48c687a9afed2fdb..68b36174a48267a60fb60e6c9c54f6146ed98f13 100644 (file)
@@ -642,11 +642,14 @@ public final class TypeProviderImpl implements TypeProvider {
         if (strXPath != null) {
             if (strXPath.indexOf('[') == -1) {
                 final Module module;
+                final SchemaNode actualParentSchemaNode;
                 if ((parentNode instanceof DerivableSchemaNode) && ((DerivableSchemaNode) parentNode).isAddedByUses()) {
                     final Optional<? extends SchemaNode> originalNode = ((DerivableSchemaNode) parentNode).getOriginal();
                     Preconditions.checkArgument(originalNode.isPresent(), "originalNode can not be null.");
+                    actualParentSchemaNode = originalNode.get();
                     module = findParentModule(schemaContext, originalNode.get());
                 } else {
+                    actualParentSchemaNode = parentNode;
                     module = findParentModule(schemaContext, parentNode);
                 }
                 Preconditions.checkArgument(module != null, "Failed to find module for parent %s", parentNode);
@@ -655,7 +658,7 @@ public final class TypeProviderImpl implements TypeProvider {
                 if (xpath.isAbsolute()) {
                     dataNode = findDataSchemaNode(schemaContext, module, xpath);
                 } else {
-                    dataNode = findDataSchemaNodeForRelativeXPath(schemaContext, module, parentNode, xpath);
+                    dataNode = findDataSchemaNodeForRelativeXPath(schemaContext, module, actualParentSchemaNode, xpath);
                 }
                 Preconditions.checkArgument(dataNode != null, "Failed to find leafref target: %s in module %s (%s)",
                         strXPath, getParentModule(parentNode, schemaContext).getName(), parentNode.getQName().getModule());