From: Robert Varga Date: Fri, 20 Nov 2015 23:13:10 +0000 (+0100) Subject: BUG-4638: fix union type generation X-Git-Tag: release/beryllium~36 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=bf7af9e5d997ab766b0e708c52838cb6d017f531;p=mdsal.git BUG-4638: fix union type generation Various places should not rely on UnionType, but should check for UnionTypeDefinition. Change-Id: Id75a4b5eee49faed61ed311c79bb847e05f77dd7 Signed-off-by: Robert Varga --- diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java index f86301c932..6512906e6f 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java @@ -1593,7 +1593,7 @@ public class BindingGeneratorImpl implements BindingGenerator { typeBuilder,module); returnType = new ReferencedTypeImpl(enumBuilder.getPackageName(), enumBuilder.getName()); ((TypeProviderImpl) typeProvider).putReferencedType(node.getPath(), returnType); - } else if (typeDef instanceof UnionType) { + } else if (typeDef instanceof UnionTypeDefinition) { final GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder(typeDef, typeBuilder, node, parentModule); if (genTOBuilder != null) { returnType = createReturnTypeForUnion(genTOBuilder, typeDef, typeBuilder, parentModule); diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java index d568c947dd..d2dda3c8d6 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java @@ -738,7 +738,7 @@ public final class TypeProviderImpl implements TypeProvider { Type returnType = null; if (innerTypeDefinition.getBaseType() != null) { returnType = provideGeneratedTOFromExtendedType(typedef, innerTypeDefinition, basePackageName, - module.getName()); + module.getName()); } else if (innerTypeDefinition instanceof UnionTypeDefinition) { final GeneratedTOBuilder genTOBuilder = provideGeneratedTOBuilderForUnionTypeDef(basePackageName, (UnionTypeDefinition) innerTypeDefinition, typedefName, typedef); @@ -915,12 +915,12 @@ public final class TypeProviderImpl implements TypeProvider { final List regularExpressions = new ArrayList(); for (final TypeDefinition unionType : unionTypes) { final String unionTypeName = unionType.getQName().getLocalName(); - if (unionType instanceof UnionType) { - generatedTOBuilders.addAll(resolveUnionSubtypeAsUnion(unionGenTOBuilder, (UnionType) unionType, - basePackageName, parentNode)); - } else if (unionType instanceof ExtendedType) { - resolveExtendedSubtypeAsUnion(unionGenTOBuilder, (ExtendedType) unionType, regularExpressions, + if (unionType.getBaseType() != null) { + resolveExtendedSubtypeAsUnion(unionGenTOBuilder, unionType, regularExpressions, parentNode); + } else if (unionType instanceof UnionTypeDefinition) { + generatedTOBuilders.addAll(resolveUnionSubtypeAsUnion(unionGenTOBuilder, (UnionTypeDefinition) unionType, + basePackageName, parentNode)); } else if (unionType instanceof EnumTypeDefinition) { final Enumeration enumeration = addInnerEnumerationToTypeBuilder((EnumTypeDefinition) unionType, unionTypeName, unionGenTOBuilder); @@ -998,7 +998,7 @@ public final class TypeProviderImpl implements TypeProvider { * */ private void resolveExtendedSubtypeAsUnion(final GeneratedTOBuilder parentUnionGenTOBuilder, - final ExtendedType unionSubtype, final List regularExpressions, final SchemaNode parentNode) { + final TypeDefinition unionSubtype, final List regularExpressions, final SchemaNode parentNode) { final String unionTypeName = unionSubtype.getQName().getLocalName(); final Type genTO = findGenTO(unionTypeName, unionSubtype); if (genTO != null) { @@ -1052,8 +1052,7 @@ public final class TypeProviderImpl implements TypeProvider { */ private void storeGenTO(final TypeDefinition newTypeDef, final GeneratedTOBuilder genTOBuilder, final SchemaNode parentNode) { - if (!(newTypeDef instanceof UnionType)) { - + if (!(newTypeDef instanceof UnionTypeDefinition)) { final Module parentModule = findParentModule(schemaContext, parentNode); if (parentModule != null && parentModule.getName() != null) { Map> modulesByDate = genTypeDefsContextMap.get(parentModule.getName()); diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/generator/impl/stmt/parser/retest/ExtendedTypedefTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/generator/impl/stmt/parser/retest/ExtendedTypedefTest.java index 197aaccbe5..745330f327 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/generator/impl/stmt/parser/retest/ExtendedTypedefTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/generator/impl/stmt/parser/retest/ExtendedTypedefTest.java @@ -11,11 +11,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import org.opendaylight.yangtools.sal.binding.generator.impl.BindingGeneratorImpl; import java.io.File; import java.util.List; import org.junit.Test; import org.opendaylight.yangtools.sal.binding.generator.api.BindingGenerator; +import org.opendaylight.yangtools.sal.binding.generator.impl.BindingGeneratorImpl; import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty; import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject; import org.opendaylight.yangtools.sal.binding.model.api.Type; @@ -94,7 +94,7 @@ public class ExtendedTypedefTest { // extended-typedef-union assertNotNull("ExtendedTypedefUnion object not found", extendedTypedefUnion); properties = extendedTypedefUnion.getProperties(); - assertTrue("ExtendedTypedefUnion shouldn't have any property", properties.isEmpty()); + assertEquals("ExtendedTypedefUnion shouldn't have any property", 0, properties.size()); extendTO = extendedTypedefUnion.getSuperType(); assertEquals("Incorrect extension fo ExtendedTypedefUnion.", "UnionTypedef", extendTO.getName());