Binding generator v2 - uses statement - uses leafref #1 76/61476/2
authorJie Han <han.jie@zte.com.cn>
Mon, 17 Jul 2017 12:06:33 +0000 (20:06 +0800)
committerJie Han <han.jie@zte.com.cn>
Mon, 14 Aug 2017 08:05:46 +0000 (16:05 +0800)
- find parent module by original node for leafref node added by uses
if the leafnode is not local.

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

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

index bc4f30078ce6e4d43c7e69f645ec465ad73c8183..7faea06392eb1bff0615126a48c687a9afed2fdb 100644 (file)
@@ -26,6 +26,7 @@ import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findD
 import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findDataSchemaNodeForRelativeXPath;
 import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findParentModule;
 
+import com.google.common.base.Optional;
 import com.google.common.annotations.Beta;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
@@ -64,6 +65,7 @@ import org.opendaylight.mdsal.binding.javav2.util.BindingMapping;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
@@ -637,10 +639,16 @@ public final class TypeProviderImpl implements TypeProvider {
 
         final RevisionAwareXPath xpath = leafrefType.getPathStatement();
         final String strXPath = xpath.toString();
-
         if (strXPath != null) {
             if (strXPath.indexOf('[') == -1) {
-                final Module module = findParentModule(schemaContext, parentNode);
+                final Module module;
+                if ((parentNode instanceof DerivableSchemaNode) && ((DerivableSchemaNode) parentNode).isAddedByUses()) {
+                    final Optional<? extends SchemaNode> originalNode = ((DerivableSchemaNode) parentNode).getOriginal();
+                    Preconditions.checkArgument(originalNode.isPresent(), "originalNode can not be null.");
+                    module = findParentModule(schemaContext, originalNode.get());
+                } else {
+                    module = findParentModule(schemaContext, parentNode);
+                }
                 Preconditions.checkArgument(module != null, "Failed to find module for parent %s", parentNode);
 
                 final SchemaNode dataNode;