From: Jie Han Date: Mon, 10 Jul 2017 07:26:59 +0000 (+0800) Subject: Binding generator v2 - augment statement #4 X-Git-Tag: release/carbon-sr2~41 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=mdsal.git;a=commitdiff_plain;h=191a88cfa57a75f7a0aa69897e5d107e6c5df132 Binding generator v2 - augment statement #4 - resolve augmentation that target in same module Change-Id: Ic01b3e34271ba3f667ef3a6dc95482640bd9b895 Signed-off-by: Jie Han (cherry picked from commit b1fa86d7d82b6f20576b8b1f94af90081b44a3e6) --- diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenType.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenType.java index 2c2f770277..641b71232c 100644 --- a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenType.java +++ b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenType.java @@ -166,15 +166,19 @@ final class AugmentToGenType { final Set augmentations = module.getAugmentations(); final List sortedAugmentations = new ArrayList<>(augmentations).stream() - .filter(aug -> !module.equals(schemaContext.findModuleByNamespaceAndRevision( - aug.getTargetPath().getLastComponent().getNamespace(), - aug.getTargetPath().getLastComponent().getRevision()))) + .filter(aug -> !module.equals(findAugmentTargetModule(schemaContext, aug))) .collect(Collectors.toList()); Collections.sort(sortedAugmentations, AUGMENT_COMP); return sortedAugmentations; } + public static Module findAugmentTargetModule(final SchemaContext schemaContext , final AugmentationSchema aug) { + Preconditions.checkNotNull(aug, "Augmentation schema can not be null."); + final QName first = aug.getTargetPath().getPathFromRoot().iterator().next(); + return schemaContext.findModuleByNamespaceAndRevision(first.getNamespace(), first.getRevision()); + } + /** * Converts augSchema to list of Type which * contains generated type for augmentation. In addition there are also 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 d10b724bbe..4ed8c68fab 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 @@ -11,7 +11,6 @@ package org.opendaylight.mdsal.binding.javav2.generator.impl; import static com.google.common.base.Preconditions.checkArgument; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.addTOToTypeBuilder; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.annotateDeprecatedIfNecessary; -import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.augGenTypeName; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.constructGetter; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.createDescription; import static org.opendaylight.mdsal.binding.javav2.generator.impl.AuxiliaryGenUtils.createReturnTypeForUnion; @@ -38,7 +37,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -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; @@ -52,7 +50,6 @@ import org.opendaylight.mdsal.binding.javav2.generator.util.generated.type.build import org.opendaylight.mdsal.binding.javav2.generator.yang.types.GroupingDefinitionDependencySort; import org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeProviderImpl; import org.opendaylight.mdsal.binding.javav2.model.api.AccessModifier; -import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType; import org.opendaylight.mdsal.binding.javav2.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.javav2.model.api.Restrictions; @@ -68,7 +65,6 @@ import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType; import org.opendaylight.mdsal.binding.javav2.spec.structural.Augmentable; import org.opendaylight.mdsal.binding.javav2.util.BindingMapping; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; import org.opendaylight.yangtools.yang.model.api.AnyDataSchemaNode; import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; @@ -91,6 +87,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UsesNode; +import org.opendaylight.yangtools.yang.model.api.meta.ModelStatement; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; @@ -245,7 +242,7 @@ final class GenHelperUtil { if (schemaNodes != null && parent != null) { for (final DataSchemaNode schemaNode : schemaNodes) { - if (resolveDataSchemaNodesCheck(schemaNode)) { + if (resolveDataSchemaNodesCheck(module, schemaContext, schemaNode)) { addSchemaNodeToBuilderAsMethod(basePackageName, schemaNode, parent, childOf, module, genCtx, schemaContext, verboseClassComments, genTypeBuilders, typeProvider, namespaceType); } @@ -254,9 +251,18 @@ final class GenHelperUtil { return parent; } - static boolean resolveDataSchemaNodesCheck(final DataSchemaNode schemaNode) { - if (!(schemaNode.isAugmenting() && !schemaNode.isAddedByUses())) { + static boolean resolveDataSchemaNodesCheck(final Module module, final SchemaContext schemaContext, + final DataSchemaNode schemaNode) { + if (!schemaNode.isAugmenting()) { return true; + } else if (schemaNode.isAugmenting()) { + Preconditions.checkState(schemaNode instanceof ModelStatement); + QName qname = schemaNode.getPath().getLastComponent(); + final Module originalModule = schemaContext.findModuleByNamespaceAndRevision(qname.getNamespace(), + qname.getRevision()); + if (module.equals(originalModule)) { + return true; + } } return false; @@ -772,7 +778,7 @@ final class GenHelperUtil { if (namespaceType.equals(BindingNamespaceType.Grouping)) { final GeneratedTypeBuilder genTypeBuilder = resolveListKeyTypeBuilder(packageName, node); for (final DataSchemaNode schemaNode : node.getChildNodes()) { - if (resolveDataSchemaNodesCheck(schemaNode)) { + if (resolveDataSchemaNodesCheck(module, schemaContext, schemaNode)) { addSchemaNodeToListTypeBuilders(nodeName, basePackageName, schemaNode, genType, genTypeBuilder, listKeys, module, typeProvider, schemaContext, genCtx, genTypeBuilders, verboseClassComments, namespaceType); } @@ -784,7 +790,7 @@ final class GenHelperUtil { } else { final GeneratedTOBuilder genTOBuilder = resolveListKeyTOBuilder(packageName, node); for (final DataSchemaNode schemaNode : node.getChildNodes()) { - if (resolveDataSchemaNodesCheck(schemaNode)) { + if (resolveDataSchemaNodesCheck(module, schemaContext, schemaNode)) { addSchemaNodeToListBuilders(nodeName, basePackageName, schemaNode, genType, genTOBuilder, listKeys, module, typeProvider, schemaContext, genCtx, genTypeBuilders, verboseClassComments, namespaceType); } @@ -1026,7 +1032,7 @@ final class GenHelperUtil { } for (final ChoiceCaseNode caseNode : caseNodes) { - if (caseNode != null && resolveDataSchemaNodesCheck(caseNode)) { + if (caseNode != null && resolveDataSchemaNodesCheck(module, schemaContext, caseNode)) { final GeneratedTypeBuilder caseTypeBuilder = addDefaultInterfaceDefinition(basePackageName, caseNode, module, genCtx, schemaContext, verboseClassComments, genTypeBuilders, typeProvider, namespaceType); caseTypeBuilder.addImplementsType(refChoiceType); diff --git a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenTypeTest.java b/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenTypeTest.java index 125df3b830..1c0557cc18 100644 --- a/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenTypeTest.java +++ b/binding2/mdsal-binding2-generator-impl/src/test/java/org/opendaylight/mdsal/binding/javav2/generator/impl/AugmentToGenTypeTest.java @@ -285,8 +285,8 @@ public class AugmentToGenTypeTest { augmentations.add(augmentationSchema2); when(m.getAugmentations()).thenReturn(augmentations); - when(schemaContext.findModuleByNamespaceAndRevision(q2.getNamespace(), q2.getRevision())).thenReturn(m2); - when(schemaContext.findModuleByNamespaceAndRevision(q5.getNamespace(), q5.getRevision())).thenReturn(m2); + when(schemaContext.findModuleByNamespaceAndRevision(q1.getNamespace(), q1.getRevision())).thenReturn(m2); + when(schemaContext.findModuleByNamespaceAndRevision(q3.getNamespace(), q3.getRevision())).thenReturn(m2); final Object[] args = { m, schemaContext }; diff --git a/binding2/mdsal-binding2-generator-impl/src/test/resources/uses-statement/test-augment-statement1.yang b/binding2/mdsal-binding2-generator-impl/src/test/resources/uses-statement/test-augment-statement1.yang new file mode 100644 index 0000000000..1c49bb3e35 --- /dev/null +++ b/binding2/mdsal-binding2-generator-impl/src/test/resources/uses-statement/test-augment-statement1.yang @@ -0,0 +1,24 @@ +module test-augment-statement1 { + yang-version 1.1; + + namespace "urn:test:augment:statement1"; + prefix test-augment-statement1; + organization "test.type.org"; + revision "2017-07-10"; + + grouping s1-grp { + leaf leaf-s1-grp { + type string; + } + container cont-s1-grp { + } + } + + container top { + } + + augment "/top" { + container foo { + } + } +} diff --git a/binding2/mdsal-binding2-generator-impl/src/test/resources/uses-statement/test-augment-statement2.yang b/binding2/mdsal-binding2-generator-impl/src/test/resources/uses-statement/test-augment-statement2.yang new file mode 100644 index 0000000000..b52c0441d9 --- /dev/null +++ b/binding2/mdsal-binding2-generator-impl/src/test/resources/uses-statement/test-augment-statement2.yang @@ -0,0 +1,38 @@ +module test-augment-statement2 { + yang-version 1.1; + + namespace "urn:test:augment:statement2"; + prefix test-augment-statement2; + organization "test.type.org"; + revision "2017-07-10"; + + import test-augment-statement1 { + prefix "s1"; + } + + grouping s2-grp { + leaf leaf-s2-grp { + type string; + } + + } + + container bar { + } + + augment "/s1:top" { + container bar1 { + } + leaf leaf-s2-aug { + type string; + } + uses s2-grp; + } + + augment "/s1:top" { + container bar2 { + } + + uses s1:s1-grp; + } +}