From: Jie Han Date: Tue, 18 Jul 2017 00:51:00 +0000 (+0800) Subject: Binding generator v2 - uses implement - fix finding target grouping X-Git-Tag: release/nitrogen~20 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F14%2F60514%2F12;p=mdsal.git Binding generator v2 - uses implement - fix finding target grouping - can not call findDataSchemaNode to find target grouping since it search data node first that may find a wrong data node with the same name, here specially find grouping by getGrouping() first, and that should be always correct for uses grouping, anyway, in case find nothing, keep the findDataSchemaNode methord. Change-Id: Ibef1c5a0e01d1fe36260c76676ae02b926d62296 Signed-off-by: Jie Han --- diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java index 7f772fd68c..a659b32243 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/GenHelperUtil.java @@ -38,6 +38,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext; +import java.util.stream.Collectors; import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.javav2.generator.util.BindingGeneratorUtil; import org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes; @@ -352,7 +353,16 @@ final class GenHelperUtil { .findFirst().orElse(null); } else { //FIXME: Schema path is not unique for Yang 1.1, findDataSchemaNode always does search from data node first. - groupingNode = SchemaContextUtil.findDataSchemaNode(schemaContext, usesNode.getGroupingPath()); + final Iterable prefixedPath = usesNode.getGroupingPath().getPathFromRoot(); + final QName current = prefixedPath.iterator().next(); + final Module targetModule = schemaContext.findModuleByNamespaceAndRevision(current.getNamespace(), current.getRevision()); + Preconditions.checkArgument(targetModule != null, "Cannot find target module for %s and %s.", + current.getNamespace(), current.getRevision()); + groupingNode = targetModule.getGroupings().stream().filter(grouping -> grouping.getPath().equals(usesNode.getGroupingPath())) + .collect(Collectors.toList()).get(0); + if (groupingNode == null) { + groupingNode = SchemaContextUtil.findDataSchemaNode(schemaContext, usesNode.getGroupingPath()); + } } Preconditions.checkNotNull(groupingNode, module.toString() + "->" + usesNode.getGroupingPath().toString());