From 12b9a4a5099fea3f3dcc58370271311c015b3d7b Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 12 Mar 2018 21:33:57 +0100 Subject: [PATCH] Integrate JavaTypeName as Identifier This changes 'Type' to implement Identifiable, which allows us to cleanly manage Java type naming and namespace handling. Type's base mathods are made default and name tracking is reworked to always be based on JavaTypeName. JIRA: MDSAL-321 Change-Id: Id8512d38eb2eed9bd2ce4d6b172937bebde03581 Signed-off-by: Robert Varga --- .../mdsal/binding/model/api/Type.java | 16 +- .../type/builder/AnnotableTypeBuilder.java | 40 +++ .../model/api/type/builder/EnumBuilder.java | 39 +-- .../builder/GeneratedTypeBuilderBase.java | 17 +- .../api/type/builder/TypeMemberBuilder.java | 41 +-- .../generator/impl/AbstractTypeGenerator.java | 276 ++++++++------- .../generator/util/BindingRuntimeContext.java | 22 +- .../yang/types/AbstractTypeProvider.java | 313 ++++++++---------- .../binding/yang/types/BaseYangTypes.java | 13 +- .../yang/types/CodegenTypeProvider.java | 13 +- .../yang/types/RuntimeTypeProvider.java | 13 +- .../impl/BitAndUnionTOEnclosingTest.java | 10 +- .../generator/impl/GenEnumResolvingTest.java | 10 +- .../binding/generator/impl/UsesTest.java | 4 +- .../yang/types/TypeProviderImplTest.java | 5 +- .../binding/yang/types/TypeProviderTest.java | 70 ++-- .../binding/model/util/AbstractBaseType.java | 62 +--- .../model/util/ReferencedTypeImpl.java | 11 +- .../mdsal/binding/model/util/Types.java | 83 ++--- .../builder/AbstractEnumerationBuilder.java | 21 +- .../builder/AbstractGeneratedTOBuilder.java | 5 +- .../type/builder/AbstractGeneratedType.java | 11 +- .../builder/AbstractGeneratedTypeBuilder.java | 20 +- .../builder/AbstractTypeMemberBuilder.java | 8 +- .../builder/AnnotationTypeBuilderImpl.java | 84 ++--- .../builder/CodegenEnumerationBuilder.java | 5 +- .../builder/CodegenGeneratedTOBuilder.java | 9 +- .../builder/CodegenGeneratedTypeBuilder.java | 9 +- .../builder/RuntimeEnumerationBuilder.java | 5 +- .../builder/RuntimeGeneratedTOBuilder.java | 10 +- .../builder/RuntimeGeneratedTypeBuilder.java | 9 +- .../model/util/AbstractBaseTypeTest.java | 72 ---- .../model/util/BindingGeneratorUtilTest.java | 13 +- .../model/util/ReferencedTypeImplTest.java | 7 +- .../binding/model/util/TypeNameTest.java | 53 +++ .../mdsal/binding/model/util/TypesTest.java | 13 +- .../AbstractGeneratedTypeBuilderTest.java | 33 +- .../type/builder/AbstractTypeMemberTest.java | 7 +- .../type/builder/AnnotationBuilderTest.java | 87 +++-- .../type/builder/ConstantImplTest.java | 9 +- .../builder/EnumerationBuilderImplTest.java | 28 +- .../builder/GeneratedPropertyImplTest.java | 12 +- .../builder/GeneratedTOBuilderImplTest.java | 37 ++- .../type/builder/GeneratedTOBuilderTest.java | 9 +- .../builder/GeneratedTypeBuilderTest.java | 87 ++--- .../MethodSignatureBuilderImplTest.java | 7 +- .../java/api/generator/BuilderTemplate.xtend | 39 +-- .../java/api/generator/GeneratorUtil.java | 49 +-- .../java/api/generator/JavaFileTemplate.java | 26 +- .../java/api/generator/UnionTemplate.xtend | 3 +- .../api/generator/BuilderGeneratorTest.java | 7 +- .../java/api/generator/GeneratorUtilTest.java | 13 +- .../test/ClassCodeGeneratorTest.java | 5 +- .../generator/test/GeneratorJavaFileTest.java | 6 +- 54 files changed, 876 insertions(+), 1000 deletions(-) create mode 100644 binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/AnnotableTypeBuilder.java delete mode 100644 binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/AbstractBaseTypeTest.java create mode 100644 binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/TypeNameTest.java diff --git a/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/Type.java b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/Type.java index 6f5c0cb312..c95bce565d 100644 --- a/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/Type.java +++ b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/Type.java @@ -7,26 +7,32 @@ */ package org.opendaylight.mdsal.binding.model.api; +import org.opendaylight.yangtools.concepts.Identifiable; + /** * The Type interface defines the base type for all types defined in java. Each * Type defined in java MUST contain name and package name, except of primitive * types like int, byte etc. In case of mapping of primitive type the package * name MUST be left as empty string. */ -public interface Type { +public interface Type extends Identifiable { /** * Returns name of the package that interface belongs to. * * @return name of the package that interface belongs to */ - String getPackageName(); + default String getPackageName() { + return getIdentifier().packageName(); + } /** * Returns name of the interface. * * @return name of the interface. */ - String getName(); + default String getName() { + return getIdentifier().simpleName(); + } /** * Returns fully qualified name of Type.
@@ -40,5 +46,7 @@ public interface Type { * * @return fully qualified name of Type. */ - String getFullyQualifiedName(); + default String getFullyQualifiedName() { + return getIdentifier().toString(); + } } diff --git a/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/AnnotableTypeBuilder.java b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/AnnotableTypeBuilder.java new file mode 100644 index 0000000000..d1d3be06fe --- /dev/null +++ b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/AnnotableTypeBuilder.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.model.api.type.builder; + +import com.google.common.annotations.Beta; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; + +/** + * Common interface for java type builders which allow attaching annotations to them. + */ +@Beta +public interface AnnotableTypeBuilder { + /** + * The method creates new {@link AnnotationTypeBuilder} containing specified package name an annotation name. + * + * @param identifier JavaTypeName of the annotation + * @return a new instance of Annotation Type Builder. + */ + AnnotationTypeBuilder addAnnotation(final JavaTypeName identifier); + + /** + * The method creates new {@link AnnotationTypeBuilder} containing specified package name an annotation name. + * Neither the package name or annotation name can contain null references. In case that any + * of parameters contains null the method SHOULD thrown {@link IllegalArgumentException} + * + * @param packageName Package Name of Annotation Type + * @param simpleName Name of Annotation Type + * @return new instance of Annotation Type Builder. + * @throws NullPointerException if any of the arguments are null + * @throws IllegalArgumentException if any of the arguments is an empty string + */ + default AnnotationTypeBuilder addAnnotation(final String packageName, final String simpleName) { + return addAnnotation(JavaTypeName.create(packageName, simpleName)); + } +} diff --git a/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/EnumBuilder.java b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/EnumBuilder.java index ef95d8cc67..88eb12c859 100644 --- a/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/EnumBuilder.java +++ b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/EnumBuilder.java @@ -12,48 +12,21 @@ import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; /** - * Enum Builder is interface that contains methods to build and instantiate - * Enumeration definition. + * Enum Builder is interface that contains methods to build and instantiate Enumeration definition. * * @see Enumeration */ -public interface EnumBuilder extends Type { +public interface EnumBuilder extends Type, AnnotableTypeBuilder { - /** - * The method creates new AnnotationTypeBuilder containing specified package - * name an annotation name.
- * Neither the package name or annotation name can contain null - * references. In case that any of parameters contains null the - * method SHOULD thrown {@link IllegalArgumentException} - * - * @param packageName - * Package Name of Annotation Type - * @param name - * Name of Annotation Type - * @return new instance of Annotation Type Builder. - */ - AnnotationTypeBuilder addAnnotation(final String packageName, final String name); + void setDescription(final String description); - /** - * - * @param definingType - * @return - */ Enumeration toInstance(final Type definingType); /** - * Updates this builder with data from enumTypeDef. - * Specifically this data represents list of value-name pairs. + * Updates this builder with data from enumTypeDef. Specifically this data represents list + * of value-name pairs. * - * @param enumTypeDef - * enum type definition as source of enum data for - * enumBuilder + * @param enumTypeDef enum type definition as source of enum data for enumBuilder */ void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef); - - /** - * @param description - */ - void setDescription(final String description); - } diff --git a/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/GeneratedTypeBuilderBase.java b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/GeneratedTypeBuilderBase.java index a3e17c6f55..d07c63a6d6 100644 --- a/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/GeneratedTypeBuilderBase.java +++ b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/GeneratedTypeBuilderBase.java @@ -16,7 +16,7 @@ import org.opendaylight.mdsal.binding.model.api.TypeComment; import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -public interface GeneratedTypeBuilderBase> extends Type { +public interface GeneratedTypeBuilderBase> extends Type, AnnotableTypeBuilder { /** * Adds new Enclosing Transfer Object into definition of Generated Type and @@ -64,21 +64,6 @@ public interface GeneratedTypeBuilderBase> */ T addComment(TypeComment comment); - /** - * The method creates new AnnotationTypeBuilder containing specified package - * name an annotation name.
- * Neither the package name or annotation name can contain null - * references. In case that any of parameters contains null the - * method SHOULD thrown {@link IllegalArgumentException} - * - * @param packageName - * Package Name of Annotation Type - * @param name - * Name of Annotation Type - * @return new instance of Annotation Type Builder. - */ - AnnotationTypeBuilder addAnnotation(String packageName, String name); - boolean isAbstract(); /** diff --git a/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/TypeMemberBuilder.java b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/TypeMemberBuilder.java index 050a4131da..e88b33b706 100644 --- a/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/TypeMemberBuilder.java +++ b/binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/TypeMemberBuilder.java @@ -10,23 +10,7 @@ package org.opendaylight.mdsal.binding.model.api.type.builder; import org.opendaylight.mdsal.binding.model.api.AccessModifier; import org.opendaylight.mdsal.binding.model.api.Type; -public interface TypeMemberBuilder> { - - /** - * The method creates new AnnotationTypeBuilder containing specified package - * name an annotation name.
- * Neither the package name or annotation name can contain null - * references. In case that any of parameters contains null the - * method SHOULD thrown {@link IllegalArgumentException} - * - * @param packageName - * Package Name of Annotation Type - * @param name - * Name of Annotation Type - * @return new instance of Annotation Type Builder. - */ - AnnotationTypeBuilder addAnnotation(final String packageName, final String name); - +public interface TypeMemberBuilder> extends AnnotableTypeBuilder { /** * Returns the name of property. * @@ -35,9 +19,8 @@ public interface TypeMemberBuilder> { String getName(); /** - * Adds return Type into Builder definition for Generated Property.
- * The return Type MUST NOT be null, otherwise the method - * SHOULD throw {@link IllegalArgumentException} + * Adds return Type into Builder definition for Generated Property. The return Type MUST NOT be null, + * otherwise the method SHOULD throw {@link IllegalArgumentException} * * @param returnType * Return Type of property. @@ -55,23 +38,19 @@ public interface TypeMemberBuilder> { T setAccessModifier(final AccessModifier modifier); /** - * Adds String definition of comment into Method Signature definition.
- * The comment String MUST NOT contain any comment specific chars (i.e. - * "/**" or "//") just plain String text description. + * Adds String definition of comment into Method Signature definition. The comment String MUST NOT contain any + * comment specific chars (i.e. "/**" or "//") just plain String text description. * - * @param comment - * Comment String. + * @param comment Comment String. */ T setComment(final String comment); /** - * Sets the flag final for method signature. If this is set the method will - * be prohibited from overriding.
- * This setting is irrelevant for methods designated to be defined in - * interface definitions because interface can't have final method. + * Sets the flag final for method signature. If this is set the method will be prohibited from overriding. This + * setting is irrelevant for methods designated to be defined in interface definitions because interfaces cannot + * have a final method. * - * @param isFinal - * Is Final + * @param isFinal Is Final */ T setFinal(final boolean isFinal); diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java index 728bc8e57d..3945dc22c3 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java @@ -30,9 +30,11 @@ import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findP import com.google.common.base.Splitter; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; +import java.util.Deque; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -43,6 +45,7 @@ import org.opendaylight.mdsal.binding.model.api.AccessModifier; import org.opendaylight.mdsal.binding.model.api.Constant; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.GeneratedType; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.model.api.Restrictions; import org.opendaylight.mdsal.binding.model.api.Type; @@ -59,7 +62,6 @@ import org.opendaylight.mdsal.binding.model.util.BindingTypes; import org.opendaylight.mdsal.binding.model.util.ReferencedTypeImpl; import org.opendaylight.mdsal.binding.model.util.TypeConstants; import org.opendaylight.mdsal.binding.model.util.Types; -import org.opendaylight.mdsal.binding.model.util.generated.type.builder.CodegenGeneratedTOBuilder; import org.opendaylight.mdsal.binding.model.util.generated.type.builder.GeneratedPropertyBuilderImpl; import org.opendaylight.mdsal.binding.yang.types.AbstractTypeProvider; import org.opendaylight.mdsal.binding.yang.types.BaseYangTypes; @@ -253,8 +255,7 @@ abstract class AbstractTypeGenerator { if (node.isAugmenting() || node.isAddedByUses()) { return null; } - final String packageName = packageNameForGeneratedType(context.modulePackageName(), node.getPath()); - final GeneratedTypeBuilder genType = addDefaultInterfaceDefinition(packageName, node, childOf, context); + final GeneratedTypeBuilder genType = addDefaultInterfaceDefinition(context, node, childOf); annotateDeprecatedIfNecessary(node.getStatus(), genType); final Module module = context.module(); @@ -285,8 +286,7 @@ abstract class AbstractTypeGenerator { constructGetter(parent, Types.listTypeFor(genType), node); final List listKeys = listKeys(node); - final String packageName = packageNameForGeneratedType(context.modulePackageName(), node.getPath()); - final GeneratedTOBuilder genTOBuilder = resolveListKeyTOBuilder(packageName, node); + final GeneratedTOBuilder genTOBuilder = resolveListKeyTOBuilder(context, node); if (genTOBuilder != null) { final Type identifierMarker = Types.parameterizedTypeFor(IDENTIFIER, genType); final Type identifiableMarker = Types.parameterizedTypeFor(IDENTIFIABLE, genTOBuilder); @@ -465,7 +465,9 @@ abstract class AbstractTypeGenerator { private Type createRpcContainer(final ModuleContext context, final String rpcName, final RpcDefinition rpc, final ContainerSchemaNode schema) { processUsesAugments(schema, context); - final GeneratedTypeBuilder outType = addRawInterfaceDefinition(context.modulePackageName(), schema, rpcName); + final GeneratedTypeBuilder outType = addRawInterfaceDefinition( + JavaTypeName.create(context.modulePackageName(), rpcName + BindingMapping.getClassName(schema.getQName())), + schema); addImplementedInterfaceFromUses(schema, outType); outType.addImplementsType(DATA_OBJECT); outType.addImplementsType(augmentable(outType)); @@ -567,21 +569,18 @@ abstract class AbstractTypeGenerator { if (identity == null) { return; } - final String packageName = packageNameForGeneratedType(context.modulePackageName(), identity.getPath()); - final String genTypeName = BindingMapping.getClassName(identity.getQName()); - final GeneratedTOBuilder newType = typeProvider.newGeneratedTOBuilder(packageName, genTypeName); + final GeneratedTOBuilder newType = typeProvider.newGeneratedTOBuilder(JavaTypeName.create( + packageNameForGeneratedType(context.modulePackageName(), identity.getPath()), + BindingMapping.getClassName(identity.getQName()))); final Set baseIdentities = identity.getBaseIdentities(); if (baseIdentities.isEmpty()) { - final GeneratedTOBuilder gto = typeProvider.newGeneratedTOBuilder( - BaseIdentity.class.getPackage().getName(), BaseIdentity.class.getSimpleName()); + final GeneratedTOBuilder gto = typeProvider.newGeneratedTOBuilder(JavaTypeName.create(BaseIdentity.class)); newType.setExtendsType(gto.build()); } else { final IdentitySchemaNode baseIdentity = baseIdentities.iterator().next(); final QName qname = baseIdentity.getQName(); - final String returnTypePkgName = BindingMapping.getRootPackageName(qname.getModule()); - final String returnTypeName = BindingMapping.getClassName(baseIdentity.getQName()); - final GeneratedTransferObject gto = new CodegenGeneratedTOBuilder(returnTypePkgName, returnTypeName) - .build(); + final GeneratedTransferObject gto = typeProvider.newGeneratedTOBuilder(JavaTypeName.create( + BindingMapping.getRootPackageName(qname.getModule()), BindingMapping.getClassName(qname))).build(); newType.setExtendsType(gto); } newType.setAbstract(true); @@ -619,8 +618,7 @@ abstract class AbstractTypeGenerator { for (final GroupingDefinition grouping : new GroupingDefinitionDependencySort().sort(groupings)) { // Converts individual grouping to GeneratedType. Firstly generated type builder is created and every child // node of grouping is resolved to the method. - final String packageName = packageNameForGeneratedType(context.modulePackageName(), grouping.getPath()); - final GeneratedTypeBuilder genType = addDefaultInterfaceDefinition(packageName, grouping, context); + final GeneratedTypeBuilder genType = addDefaultInterfaceDefinition(context, grouping); annotateDeprecatedIfNecessary(grouping.getStatus(), genType); context.addGroupingType(grouping.getPath(), genType); resolveDataSchemaNodes(context, genType, genType, grouping.getChildNodes()); @@ -678,8 +676,8 @@ abstract class AbstractTypeGenerator { private GeneratedTypeBuilder moduleTypeBuilder(final ModuleContext context, final String postfix) { final Module module = context.module(); final String moduleName = BindingMapping.getClassName(module.getName()) + postfix; - final GeneratedTypeBuilder moduleBuilder = typeProvider.newGeneratedTypeBuilder(context.modulePackageName(), - moduleName); + final GeneratedTypeBuilder moduleBuilder = typeProvider.newGeneratedTypeBuilder( + JavaTypeName.create(context.modulePackageName(), moduleName)); moduleBuilder.setModuleName(moduleName); addCodegenInformation(moduleBuilder, module); @@ -741,9 +739,8 @@ abstract class AbstractTypeGenerator { } if (!(targetSchemaNode instanceof ChoiceSchemaNode)) { - final Type targetType = new ReferencedTypeImpl(targetTypeBuilder.getPackageName(), - targetTypeBuilder.getName()); - addRawAugmentGenTypeDefinition(context, context.modulePackageName(), targetType, augSchema); + final Type targetType = new ReferencedTypeImpl(targetTypeBuilder.getIdentifier()); + addRawAugmentGenTypeDefinition(context, targetType, augSchema); } else { generateTypesFromAugmentedChoiceCases(context, targetTypeBuilder.build(), @@ -773,14 +770,14 @@ abstract class AbstractTypeGenerator { } if (!(targetSchemaNode instanceof ChoiceSchemaNode)) { - final String packageName; if (usesNodeParent instanceof SchemaNode) { - packageName = packageNameForAugmentedGeneratedType(context.modulePackageName(), - ((SchemaNode) usesNodeParent).getPath()); + addRawAugmentGenTypeDefinition(context, + packageNameForAugmentedGeneratedType(context.modulePackageName(), + ((SchemaNode) usesNodeParent).getPath()), + targetTypeBuilder.build(), augSchema); } else { - packageName = context.modulePackageName(); + addRawAugmentGenTypeDefinition(context, targetTypeBuilder.build(), augSchema); } - addRawAugmentGenTypeDefinition(context, packageName, targetTypeBuilder.build(), augSchema); } else { generateTypesFromAugmentedChoiceCases(context, targetTypeBuilder.build(), (ChoiceSchemaNode) targetSchemaNode, augSchema.getChildNodes(), usesNodeParent); @@ -879,8 +876,8 @@ abstract class AbstractTypeGenerator { augTypeName = augGenTypeName(augmentBuilders, targetTypeRef.getName()); } - final GeneratedTypeBuilder augTypeBuilder = typeProvider.newGeneratedTypeBuilder(augmentPackageName, - augTypeName); + final GeneratedTypeBuilder augTypeBuilder = typeProvider.newGeneratedTypeBuilder( + JavaTypeName.create(augmentPackageName, augTypeName)); augTypeBuilder.addImplementsType(DATA_OBJECT); augTypeBuilder.addImplementsType(Types.augmentationTypeFor(targetTypeRef)); @@ -898,6 +895,11 @@ abstract class AbstractTypeGenerator { return augTypeBuilder; } + private GeneratedTypeBuilder addRawAugmentGenTypeDefinition(final ModuleContext context, final Type targetTypeRef, + final AugmentationSchemaNode augSchema) { + return addRawAugmentGenTypeDefinition(context, context.modulePackageName(), targetTypeRef, augSchema); + } + /** * * @param unknownSchemaNodes @@ -1068,8 +1070,9 @@ abstract class AbstractTypeGenerator { checkArgument(choiceNode != null, "Choice Schema Node cannot be NULL."); if (!choiceNode.isAddedByUses()) { - final String packageName = packageNameForGeneratedType(context.modulePackageName(), choiceNode.getPath()); - final GeneratedTypeBuilder choiceTypeBuilder = addRawInterfaceDefinition(packageName, choiceNode); + final GeneratedTypeBuilder choiceTypeBuilder = addRawInterfaceDefinition( + JavaTypeName.create(packageNameForGeneratedType(context.modulePackageName(), choiceNode.getPath()), + BindingMapping.getClassName(choiceNode.getQName())), choiceNode); constructGetter(parent, choiceTypeBuilder, choiceNode); choiceTypeBuilder.addImplementsType(typeForClass(DataContainer.class)); annotateDeprecatedIfNecessary(choiceNode.getStatus(), choiceTypeBuilder); @@ -1105,9 +1108,7 @@ abstract class AbstractTypeGenerator { for (final CaseSchemaNode caseNode : choiceNode.getCases().values()) { if (caseNode != null && !caseNode.isAddedByUses() && !caseNode.isAugmenting()) { - final String packageName = packageNameForGeneratedType(context.modulePackageName(), caseNode.getPath()); - final GeneratedTypeBuilder caseTypeBuilder = addDefaultInterfaceDefinition(packageName, caseNode, - context); + final GeneratedTypeBuilder caseTypeBuilder = addDefaultInterfaceDefinition(context, caseNode); caseTypeBuilder.addImplementsType(refChoiceType); annotateDeprecatedIfNecessary(caseNode.getStatus(), caseTypeBuilder); context.addCaseType(caseNode.getPath(), caseTypeBuilder); @@ -1186,9 +1187,7 @@ abstract class AbstractTypeGenerator { for (final DataSchemaNode caseNode : augmentedNodes) { if (caseNode != null) { - final String packageName = packageNameForGeneratedType(context.modulePackageName(), caseNode.getPath()); - final GeneratedTypeBuilder caseTypeBuilder = addDefaultInterfaceDefinition(packageName, caseNode, - context); + final GeneratedTypeBuilder caseTypeBuilder = addDefaultInterfaceDefinition(context, caseNode); caseTypeBuilder.addImplementsType(targetType); SchemaNode parent; @@ -1305,14 +1304,16 @@ abstract class AbstractTypeGenerator { } typeProvider.putReferencedType(leaf.getPath(), returnType); } else if (typeDef instanceof UnionTypeDefinition) { - GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder(typeDef, typeBuilder, leaf, parentModule); + GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder((UnionTypeDefinition) typeDef, typeBuilder, leaf, + parentModule); if (genTOBuilder != null) { returnType = createReturnTypeForUnion(genTOBuilder, typeDef, typeBuilder, parentModule); // Store the inner type within the union so that we can find the reference for it context.addInnerTypedefType(typeDef.getPath(), returnType); } } else if (typeDef instanceof BitsTypeDefinition) { - GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder(typeDef, typeBuilder, leaf, parentModule); + GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder((BitsTypeDefinition) typeDef, typeBuilder, leaf, + parentModule); if (genTOBuilder != null) { returnType = genTOBuilder.build(); } @@ -1383,9 +1384,7 @@ abstract class AbstractTypeGenerator { + nodeParam); } - final Class clazz = RoutingContext.class; - final AnnotationTypeBuilder rc = getter.addAnnotation(clazz.getPackage().getName(), - clazz.getSimpleName()); + final AnnotationTypeBuilder rc = getter.addAnnotation(JavaTypeName.create(RoutingContext.class)); final String packageName = packageNameForGeneratedType(basePackageName, identity.getPath()); final String genTypeName = BindingMapping.getClassName(identity.getQName().getLocalName()); rc.addParameter("value", packageName + "." + genTypeName + ".class"); @@ -1511,15 +1510,17 @@ abstract class AbstractTypeGenerator { final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) typeDef; final EnumBuilder enumBuilder = resolveInnerEnumFromTypeDefinition(enumTypeDef, nodeName, typeBuilder, context); - returnType = new ReferencedTypeImpl(enumBuilder.getPackageName(), enumBuilder.getName()); + returnType = new ReferencedTypeImpl(enumBuilder.getIdentifier()); typeProvider.putReferencedType(node.getPath(), returnType); } else if (typeDef instanceof UnionTypeDefinition) { - final GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder(typeDef, typeBuilder, node, parentModule); + final GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder((UnionTypeDefinition)typeDef, typeBuilder, + node, parentModule); if (genTOBuilder != null) { returnType = createReturnTypeForUnion(genTOBuilder, typeDef, typeBuilder, parentModule); } } else if (typeDef instanceof BitsTypeDefinition) { - final GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder(typeDef, typeBuilder, node, parentModule); + final GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder((BitsTypeDefinition)typeDef, typeBuilder, + node, parentModule); returnType = genTOBuilder.build(); } else { final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(typeDef); @@ -1539,8 +1540,7 @@ abstract class AbstractTypeGenerator { private Type createReturnTypeForUnion(final GeneratedTOBuilder genTOBuilder, final TypeDefinition typeDef, final GeneratedTypeBuilder typeBuilder, final Module parentModule) { - final GeneratedTOBuilder returnType = typeProvider.newGeneratedTOBuilder(genTOBuilder.getPackageName(), - genTOBuilder.getName()); + final GeneratedTOBuilder returnType = typeProvider.newGeneratedTOBuilder(genTOBuilder.getIdentifier()); addCodegenInformation(returnType, parentModule, typeDef); returnType.setSchemaPath(typeDef.getPath()); @@ -1552,7 +1552,7 @@ abstract class AbstractTypeGenerator { - final GeneratedTOBuilder unionBuilder = createUnionBuilder(genTOBuilder,typeBuilder); + final GeneratedTOBuilder unionBuilder = createUnionBuilder(genTOBuilder, typeBuilder); final MethodSignatureBuilder method = unionBuilder.addMethod("getDefaultInstance"); @@ -1573,26 +1573,44 @@ abstract class AbstractTypeGenerator { private GeneratedTOBuilder createUnionBuilder(final GeneratedTOBuilder genTOBuilder, final GeneratedTypeBuilder typeBuilder) { - final String outerCls = Types.getOuterClassName(genTOBuilder); - final StringBuilder name; - if (outerCls != null) { - name = new StringBuilder(outerCls); - } else { - name = new StringBuilder(); + final StringBuilder sb = new StringBuilder(); + + // Append enclosing path hierarchy without dots + // TODO: JavaTypeName could be giving us a Stream or similar, but there is no sense in generalizing + // unless there is another caller. + Optional outerClass = genTOBuilder.getIdentifier().immediatelyEnclosingClass(); + if (outerClass.isPresent()) { + final Deque enclosingPath = new ArrayDeque<>(); + do { + final JavaTypeName outerName = outerClass.get(); + enclosingPath.push(outerName.simpleName()); + outerClass = outerName.immediatelyEnclosingClass(); + } while (outerClass.isPresent()); + + while (!enclosingPath.isEmpty()) { + sb.append(enclosingPath.pop()); + } } - name.append(genTOBuilder.getName()); - name.append("Builder"); - final GeneratedTOBuilder unionBuilder = typeProvider.newGeneratedTOBuilder(typeBuilder.getPackageName(), - name.toString()); + + sb.append(genTOBuilder.getName()).append("Builder"); + final GeneratedTOBuilder unionBuilder = typeProvider.newGeneratedTOBuilder( + JavaTypeName.create(typeBuilder.getPackageName(), sb.toString())); unionBuilder.setIsUnionBuilder(true); return unionBuilder; } - private GeneratedTypeBuilder addDefaultInterfaceDefinition(final String packageName, final SchemaNode schemaNode, - final ModuleContext context) { - return addDefaultInterfaceDefinition(packageName, schemaNode, null, context); + private GeneratedTypeBuilder addDefaultInterfaceDefinition(final ModuleContext context, + final SchemaNode schemaNode) { + return addDefaultInterfaceDefinition(context, schemaNode, null); + } + + private GeneratedTypeBuilder addDefaultInterfaceDefinition(final ModuleContext context, + final SchemaNode schemaNode, final GeneratedTypeBuilder childOf) { + final String packageName = packageNameForGeneratedType(context.modulePackageName(), schemaNode.getPath()); + return addDefaultInterfaceDefinition(packageName, schemaNode, childOf, context); } + /** * Instantiates generated type builder with packageName and * schemaNode. @@ -1618,7 +1636,8 @@ abstract class AbstractTypeGenerator { */ private GeneratedTypeBuilder addDefaultInterfaceDefinition(final String packageName, final SchemaNode schemaNode, final Type parent, final ModuleContext context) { - final GeneratedTypeBuilder it = addRawInterfaceDefinition(packageName, schemaNode, ""); + final GeneratedTypeBuilder it = addRawInterfaceDefinition( + JavaTypeName.create(packageName, BindingMapping.getClassName(schemaNode.getQName())), schemaNode); if (parent == null) { it.addImplementsType(DATA_OBJECT); } else { @@ -1646,8 +1665,11 @@ abstract class AbstractTypeGenerator { * schema node which provide data about the schema node name * @return generated type builder for schemaNode */ - private GeneratedTypeBuilder addRawInterfaceDefinition(final String packageName, final SchemaNode schemaNode) { - return addRawInterfaceDefinition(packageName, schemaNode, ""); + private GeneratedTypeBuilder addRawInterfaceDefinition(final ModuleContext context, final SchemaNode schemaNode, + final String prefix) { + return addRawInterfaceDefinition( + JavaTypeName.create(packageNameForGeneratedType(context.modulePackageName(), schemaNode.getPath()), + prefix + BindingMapping.getClassName(schemaNode.getQName())), schemaNode); } /** @@ -1675,23 +1697,14 @@ abstract class AbstractTypeGenerator { * * */ - private GeneratedTypeBuilder addRawInterfaceDefinition(final String packageName, final SchemaNode schemaNode, - final String prefix) { + private GeneratedTypeBuilder addRawInterfaceDefinition(final JavaTypeName identifier, final SchemaNode schemaNode) { checkArgument(schemaNode != null, "Data Schema Node cannot be NULL."); - checkArgument(packageName != null, "Package Name for Generated Type cannot be NULL."); checkArgument(schemaNode.getQName() != null, "QName for Data Schema Node cannot be NULL."); final String schemaNodeName = schemaNode.getQName().getLocalName(); checkArgument(schemaNodeName != null, "Local Name of QName for Data Schema Node cannot be NULL."); - String genTypeName; - if (prefix == null) { - genTypeName = BindingMapping.getClassName(schemaNodeName); - } else { - genTypeName = prefix + BindingMapping.getClassName(schemaNodeName); - } - // FIXME: Validation of name conflict - final GeneratedTypeBuilder newType = typeProvider.newGeneratedTypeBuilder(packageName, genTypeName); + final GeneratedTypeBuilder newType = typeProvider.newGeneratedTypeBuilder(identifier); final Module module = findParentModule(schemaContext, schemaNode); qnameConstant(newType, BindingMapping.QNAME_STATIC_FIELD_NAME, schemaNode.getQName()); @@ -1699,14 +1712,16 @@ abstract class AbstractTypeGenerator { newType.setSchemaPath(schemaNode.getPath()); newType.setModuleName(module.getName()); + final String packageName = identifier.packageName(); + final String simpleName = identifier.simpleName(); if (!genTypeBuilders.containsKey(packageName)) { final Map builders = new HashMap<>(); - builders.put(genTypeName, newType); + builders.put(simpleName, newType); genTypeBuilders.put(packageName, builders); } else { final Map builders = genTypeBuilders.get(packageName); - if (!builders.containsKey(genTypeName)) { - builders.put(genTypeName, newType); + if (!builders.containsKey(simpleName)) { + builders.put(simpleName, newType); } } return newType; @@ -1754,7 +1769,7 @@ abstract class AbstractTypeGenerator { getMethod.setReturnType(returnType); if (node.getStatus() == Status.DEPRECATED) { - getMethod.addAnnotation("", "Deprecated"); + getMethod.addAnnotation("java.lang", "Deprecated"); } addComment(getMethod, node); @@ -1864,19 +1879,58 @@ abstract class AbstractTypeGenerator { * list or null if list is null or list of * key definitions is null or empty. */ - private GeneratedTOBuilder resolveListKeyTOBuilder(final String packageName, final ListSchemaNode list) { - GeneratedTOBuilder genTOBuilder = null; + private GeneratedTOBuilder resolveListKeyTOBuilder(final ModuleContext context, final ListSchemaNode list) { if (list.getKeyDefinition() != null && !list.getKeyDefinition().isEmpty()) { - final String listName = list.getQName().getLocalName() + "Key"; - final String genTOName = BindingMapping.getClassName(listName); - genTOBuilder = typeProvider.newGeneratedTOBuilder(packageName, genTOName); + return typeProvider.newGeneratedTOBuilder(JavaTypeName.create( + packageNameForGeneratedType(context.modulePackageName(), list.getPath()), + BindingMapping.getClassName(list.getQName().getLocalName() + "Key"))); } - return genTOBuilder; + return null; + } + + /** + * Builds a GeneratedTOBuilder for a UnionType {@link UnionTypeDefinition}. + * + * If more then one generated TO builder is created for enclosing then all + * of the generated TO builders are added to typeBuilder as + * enclosing transfer objects. + * + * @param typeDef + * type definition which can be of type UnionType or + * BitsTypeDefinition + * @param typeBuilder + * generated type builder to which is added generated TO created + * from typeDef + * @param leaf + * string with name for generated TO builder + * @param parentModule + * parent module + * @return generated TO builder for typeDef + */ + private GeneratedTOBuilder addTOToTypeBuilder(final UnionTypeDefinition typeDef, + final GeneratedTypeBuilder typeBuilder, final DataSchemaNode leaf, final Module parentModule) { + final List types = typeProvider.provideGeneratedTOBuildersForUnionTypeDef( + typeBuilder.getIdentifier().createEnclosed(BindingMapping.getClassName(leaf.getQName())), + typeDef, leaf); + + checkState(!types.isEmpty(), "No GeneratedTOBuilder objects generated from union %s", typeDef); + final List genTOBuilders = new ArrayList<>(types); + final GeneratedTOBuilder resultTOBuilder = types.remove(0); + for (final GeneratedTOBuilder genTOBuilder : types) { + resultTOBuilder.addEnclosingTransferObject(genTOBuilder); + } + + final GeneratedPropertyBuilder genPropBuilder = resultTOBuilder.addProperty("value"); + genPropBuilder.setReturnType(Types.CHAR_ARRAY); + resultTOBuilder.addEqualsIdentity(genPropBuilder); + resultTOBuilder.addHashIdentity(genPropBuilder); + resultTOBuilder.addToStringProperty(genPropBuilder); + processEnclosedTOBuilderes(typeBuilder, genTOBuilders); + return resultTOBuilder; } /** - * Builds generated TO builders for typeDef of type - * {@link UnionTypeDefinition} or {@link BitsTypeDefinition} which are + * Builds generated TO builders for typeDef of type {@link BitsTypeDefinition} which are * also added to typeBuilder as enclosing transfer object. * * If more then one generated TO builder is created for enclosing then all @@ -1895,44 +1949,22 @@ abstract class AbstractTypeGenerator { * parent module * @return generated TO builder for typeDef */ - private GeneratedTOBuilder addTOToTypeBuilder(final TypeDefinition typeDef, + private GeneratedTOBuilder addTOToTypeBuilder(final BitsTypeDefinition typeDef, final GeneratedTypeBuilder typeBuilder, final DataSchemaNode leaf, final Module parentModule) { - final String classNameFromLeaf = BindingMapping.getClassName(leaf.getQName()); - final List genTOBuilders = new ArrayList<>(); - final String packageName = typeBuilder.getFullyQualifiedName(); - if (typeDef instanceof UnionTypeDefinition) { - final List types = typeProvider - .provideGeneratedTOBuildersForUnionTypeDef(packageName, (UnionTypeDefinition) typeDef, - classNameFromLeaf, leaf); - genTOBuilders.addAll(types); - - GeneratedTOBuilder resultTOBuilder; - if (types.isEmpty()) { - throw new IllegalStateException("No GeneratedTOBuilder objects generated from union " + typeDef); - } - resultTOBuilder = types.remove(0); - for (final GeneratedTOBuilder genTOBuilder : types) { - resultTOBuilder.addEnclosingTransferObject(genTOBuilder); - } + final GeneratedTOBuilder genTOBuilder = typeProvider.provideGeneratedTOBuilderForBitsTypeDefinition( + typeBuilder.getIdentifier().createEnclosed(BindingMapping.getClassName(leaf.getQName())), + typeDef, parentModule.getName()); + typeBuilder.addEnclosingTransferObject(genTOBuilder); + return genTOBuilder; - final GeneratedPropertyBuilder genPropBuilder = resultTOBuilder.addProperty("value"); - genPropBuilder.setReturnType(Types.CHAR_ARRAY); - resultTOBuilder.addEqualsIdentity(genPropBuilder); - resultTOBuilder.addHashIdentity(genPropBuilder); - resultTOBuilder.addToStringProperty(genPropBuilder); + } - } else if (typeDef instanceof BitsTypeDefinition) { - genTOBuilders.add(typeProvider.provideGeneratedTOBuilderForBitsTypeDefinition( - packageName, typeDef, classNameFromLeaf, parentModule.getName())); - } - if (!genTOBuilders.isEmpty()) { - for (final GeneratedTOBuilder genTOBuilder : genTOBuilders) { - typeBuilder.addEnclosingTransferObject(genTOBuilder); - } - return genTOBuilders.get(0); + private static GeneratedTOBuilder processEnclosedTOBuilderes(final GeneratedTypeBuilder typeBuilder, + final List genTOBuilders) { + for (final GeneratedTOBuilder genTOBuilder : genTOBuilders) { + typeBuilder.addEnclosingTransferObject(genTOBuilder); } - return null; - + return genTOBuilders.get(0); } /** @@ -1997,7 +2029,7 @@ abstract class AbstractTypeGenerator { private static void annotateDeprecatedIfNecessary(final Status status, final GeneratedTypeBuilder builder) { if (status == Status.DEPRECATED) { - builder.addAnnotation("", "Deprecated"); + builder.addAnnotation("java.lang", "Deprecated"); } } } diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/BindingRuntimeContext.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/BindingRuntimeContext.java index 3a3f2d92ab..15fba00be2 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/BindingRuntimeContext.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/BindingRuntimeContext.java @@ -35,6 +35,7 @@ import org.opendaylight.mdsal.binding.model.api.GeneratedType; import org.opendaylight.mdsal.binding.model.api.MethodSignature; import org.opendaylight.mdsal.binding.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder; import org.opendaylight.mdsal.binding.model.util.ReferencedTypeImpl; import org.opendaylight.yangtools.concepts.Immutable; @@ -245,12 +246,7 @@ public class BindingRuntimeContext implements Immutable { } private static Type referencedType(final Class type) { - return new ReferencedTypeImpl(type.getPackage().getName(), type.getSimpleName()); - } - - static Type referencedType(final String type) { - final int packageClassSeparator = type.lastIndexOf(DOT); - return new ReferencedTypeImpl(type.substring(0, packageClassSeparator), type.substring(packageClassSeparator + 1)); + return new ReferencedTypeImpl(JavaTypeName.create(type)); } /** @@ -268,10 +264,6 @@ public class BindingRuntimeContext implements Immutable { return getTypeWithSchema(referencedType(type)); } - public Entry getTypeWithSchema(final String type) { - return getTypeWithSchema(referencedType(type)); - } - private Entry getTypeWithSchema(final Type referencedType) { final WithStatus schema = runtimeTypes.findSchema(referencedType).orElseThrow( () -> new NullPointerException("Failed to find schema for type " + referencedType)); @@ -320,14 +312,6 @@ public class BindingRuntimeContext implements Immutable { return getEnumMapping(typeWithSchema); } - /** - * See {@link #getEnumMapping(Class)}} - */ - public BiMap getEnumMapping(final String enumClass) { - final Entry typeWithSchema = getTypeWithSchema(enumClass); - return getEnumMapping(typeWithSchema); - } - private static BiMap getEnumMapping(final Entry typeWithSchema) { final TypeDefinition typeDef = (TypeDefinition) typeWithSchema.getValue(); @@ -406,7 +390,7 @@ public class BindingRuntimeContext implements Immutable { if (type instanceof ReferencedTypeImpl) { return type; } - return new ReferencedTypeImpl(type.getPackageName(), type.getName()); + return new ReferencedTypeImpl(type.getIdentifier()); } private static Set collectAllContainerTypes(final GeneratedType type, final Set collection) { diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java index d4e9603d77..0f8cea0723 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java @@ -39,6 +39,7 @@ import org.opendaylight.mdsal.binding.model.api.ConcreteType; import org.opendaylight.mdsal.binding.model.api.Enumeration; import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.Restrictions; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder; @@ -242,7 +243,7 @@ public abstract class AbstractTypeProvider implements TypeProvider { } private GeneratedTransferObject shadedTOWithRestrictions(final GeneratedTransferObject gto, final Restrictions r) { - final GeneratedTOBuilder gtob = newGeneratedTOBuilder(gto.getPackageName(), gto.getName()); + final GeneratedTOBuilder gtob = newGeneratedTOBuilder(gto.getIdentifier()); final GeneratedTransferObject parent = gto.getSuperType(); if (parent != null) { gtob.setExtendsType(parent); @@ -393,13 +394,10 @@ public abstract class AbstractTypeProvider implements TypeProvider { Preconditions.checkArgument(identity != null, "Target identity '" + baseIdQName + "' do not exists"); final String basePackageName = BindingMapping.getRootPackageName(module.getQNameModule()); - final String packageName = BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, - identity.getPath()); - final String genTypeName = BindingMapping.getClassName(identity.getQName()); - - final Type baseType = Types.typeForClass(Class.class); - final Type paramType = Types.wildcardTypeFor(packageName, genTypeName); - return Types.parameterizedTypeFor(baseType, paramType); + final JavaTypeName identifier = JavaTypeName.create(BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, + identity.getPath()), BindingMapping.getClassName(identity.getQName())); + final Type paramType = Types.wildcardTypeFor(identifier); + return Types.parameterizedTypeFor(Types.typeForClass(Class.class), paramType); } /** @@ -645,12 +643,9 @@ public abstract class AbstractTypeProvider implements TypeProvider { Preconditions.checkArgument(enumTypeDef.getQName().getLocalName() != null, "Local Name in EnumTypeDefinition QName cannot be NULL!"); - final String enumerationName = BindingMapping.getClassName(enumName); - final Module module = findParentModule(schemaContext, parentNode); - final String basePackageName = BindingMapping.getRootPackageName(module.getQNameModule()); - - final AbstractEnumerationBuilder enumBuilder = newEnumerationBuilder(basePackageName, enumerationName); + final AbstractEnumerationBuilder enumBuilder = newEnumerationBuilder(JavaTypeName.create( + BindingMapping.getRootPackageName(module.getQNameModule()), BindingMapping.getClassName(enumName))); addEnumDescription(enumBuilder, enumTypeDef); enumTypeDef.getReference().ifPresent(enumBuilder::setReference); enumBuilder.setModuleName(module.getName()); @@ -703,11 +698,11 @@ public abstract class AbstractTypeProvider implements TypeProvider { public abstract void addEnumDescription(EnumBuilder enumBuilder, EnumTypeDefinition enumTypeDef); - public abstract AbstractEnumerationBuilder newEnumerationBuilder(String packageName, String name); + public abstract AbstractEnumerationBuilder newEnumerationBuilder(JavaTypeName identifier); - public abstract GeneratedTOBuilder newGeneratedTOBuilder(String packageName, String name); + public abstract GeneratedTOBuilder newGeneratedTOBuilder(JavaTypeName identifier); - public abstract GeneratedTypeBuilder newGeneratedTypeBuilder(String packageName, String name); + public abstract GeneratedTypeBuilder newGeneratedTypeBuilder(JavaTypeName identifier); /** * Converts the pattern constraints to the list of the strings which represents these constraints. @@ -781,10 +776,8 @@ public abstract class AbstractTypeProvider implements TypeProvider { final List modulesSortedByDependency = ModuleDependencySort.sort(modules); for (Module module : modulesSortedByDependency) { - Map, Map> dateTypeMap = genTypeDefsContextMap.get(module.getName()); - if (dateTypeMap == null) { - dateTypeMap = new HashMap<>(); - } + Map, Map> dateTypeMap = genTypeDefsContextMap.computeIfAbsent( + module.getName(), key -> new HashMap<>()); dateTypeMap.put(module.getRevision(), Collections.emptyMap()); genTypeDefsContextMap.put(module.getName(), dateTypeMap); } @@ -819,73 +812,76 @@ public abstract class AbstractTypeProvider implements TypeProvider { */ private Type typedefToGeneratedType(final String basePackageName, final Module module, final TypeDefinition typedef) { - final String moduleName = module.getName(); - final Optional moduleRevision = module.getRevision(); - if (basePackageName != null && moduleName != null && typedef != null && typedef.getQName() != null) { - final String typedefName = typedef.getQName().getLocalName(); - final TypeDefinition innerTypeDefinition = typedef.getBaseType(); - // See generatedTypeForExtendedDefinitionType() above for rationale behind this special case. - if (!(innerTypeDefinition instanceof LeafrefTypeDefinition) - && !(innerTypeDefinition instanceof IdentityrefTypeDefinition)) { - Type returnType = null; - if (innerTypeDefinition.getBaseType() != null) { - returnType = provideGeneratedTOFromExtendedType(typedef, innerTypeDefinition, basePackageName, - module.getName()); - } else if (innerTypeDefinition instanceof UnionTypeDefinition) { - final GeneratedTOBuilder genTOBuilder = provideGeneratedTOBuilderForUnionTypeDef(basePackageName, - (UnionTypeDefinition) innerTypeDefinition, typedefName, typedef); - genTOBuilder.setTypedef(true); - genTOBuilder.setIsUnion(true); - addUnitsToGenTO(genTOBuilder, typedef.getUnits().orElse(null)); - makeSerializable(genTOBuilder); - returnType = genTOBuilder.build(); - // union builder - final GeneratedTOBuilder unionBuilder = newGeneratedTOBuilder(genTOBuilder.getPackageName(), - genTOBuilder.getName() + "Builder"); - unionBuilder.setIsUnionBuilder(true); - final MethodSignatureBuilder method = unionBuilder.addMethod("getDefaultInstance"); - method.setReturnType(returnType); - method.addParameter(Types.STRING, "defaultValue"); - method.setAccessModifier(AccessModifier.PUBLIC); - method.setStatic(true); - Set types = additionalTypes.get(module); - if (types == null) { - types = Sets. newHashSet(unionBuilder.build()); - additionalTypes.put(module, types); - } else { - types.add(unionBuilder.build()); - } - } else if (innerTypeDefinition instanceof EnumTypeDefinition) { - // enums are automatically Serializable - final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) innerTypeDefinition; - // TODO units for typedef enum - returnType = provideTypeForEnum(enumTypeDef, typedefName, typedef); - } else if (innerTypeDefinition instanceof BitsTypeDefinition) { - final BitsTypeDefinition bitsTypeDefinition = (BitsTypeDefinition) innerTypeDefinition; - final GeneratedTOBuilder genTOBuilder = provideGeneratedTOBuilderForBitsTypeDefinition( - basePackageName, bitsTypeDefinition, typedefName, module.getName()); - genTOBuilder.setTypedef(true); - addUnitsToGenTO(genTOBuilder, typedef.getUnits().orElse(null)); - makeSerializable(genTOBuilder); - returnType = genTOBuilder.build(); - } else { - final Type javaType = javaTypeForSchemaDefinitionType(innerTypeDefinition, typedef); - returnType = wrapJavaTypeIntoTO(basePackageName, typedef, javaType, module.getName()); - } - if (returnType != null) { - final Map, Map> modulesByDate = - genTypeDefsContextMap.get(moduleName); - Map typeMap = modulesByDate.get(moduleRevision); - if (typeMap != null) { - if (typeMap.isEmpty()) { - typeMap = new HashMap<>(4); - modulesByDate.put(moduleRevision, typeMap); - } - typeMap.put(typedefName, returnType); - } - return returnType; + final TypeDefinition innerTypedef = typedef.getBaseType(); + + // See generatedTypeForExtendedDefinitionType() above for rationale behind this special case. + if (innerTypedef instanceof LeafrefTypeDefinition || innerTypedef instanceof IdentityrefTypeDefinition) { + return null; + } + + final String typedefName = typedef.getQName().getLocalName(); + + final Type returnType; + if (innerTypedef.getBaseType() != null) { + returnType = provideGeneratedTOFromExtendedType(typedef, innerTypedef, basePackageName, + module.getName()); + } else if (innerTypedef instanceof UnionTypeDefinition) { + final GeneratedTOBuilder genTOBuilder = provideGeneratedTOBuilderForUnionTypeDef( + JavaTypeName.create(basePackageName, BindingMapping.getClassName(typedef.getQName())), + (UnionTypeDefinition) innerTypedef, typedef); + genTOBuilder.setTypedef(true); + genTOBuilder.setIsUnion(true); + addUnitsToGenTO(genTOBuilder, typedef.getUnits().orElse(null)); + makeSerializable(genTOBuilder); + returnType = genTOBuilder.build(); + + // Define a corresponding union builder. Typedefs are always anchored at a Java package root, + // so we are placing the builder alongside the union. + final GeneratedTOBuilder unionBuilder = newGeneratedTOBuilder( + JavaTypeName.create(genTOBuilder.getPackageName(), genTOBuilder.getName() + "Builder")); + unionBuilder.setIsUnionBuilder(true); + final MethodSignatureBuilder method = unionBuilder.addMethod("getDefaultInstance"); + method.setReturnType(returnType); + method.addParameter(Types.STRING, "defaultValue"); + method.setAccessModifier(AccessModifier.PUBLIC); + method.setStatic(true); + Set types = additionalTypes.get(module); + if (types == null) { + types = Sets. newHashSet(unionBuilder.build()); + additionalTypes.put(module, types); + } else { + types.add(unionBuilder.build()); + } + } else if (innerTypedef instanceof EnumTypeDefinition) { + // enums are automatically Serializable + final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) innerTypedef; + // TODO units for typedef enum + returnType = provideTypeForEnum(enumTypeDef, typedefName, typedef); + } else if (innerTypedef instanceof BitsTypeDefinition) { + final GeneratedTOBuilder genTOBuilder = provideGeneratedTOBuilderForBitsTypeDefinition( + JavaTypeName.create(basePackageName, BindingMapping.getClassName(typedef.getQName())), + (BitsTypeDefinition) innerTypedef, module.getName()); + genTOBuilder.setTypedef(true); + addUnitsToGenTO(genTOBuilder, typedef.getUnits().orElse(null)); + makeSerializable(genTOBuilder); + returnType = genTOBuilder.build(); + } else { + final Type javaType = javaTypeForSchemaDefinitionType(innerTypedef, typedef); + returnType = wrapJavaTypeIntoTO(basePackageName, typedef, javaType, module.getName()); + } + if (returnType != null) { + final Map, Map> modulesByDate = + genTypeDefsContextMap.get(module.getName()); + final Optional moduleRevision = module.getRevision(); + Map typeMap = modulesByDate.get(moduleRevision); + if (typeMap != null) { + if (typeMap.isEmpty()) { + typeMap = new HashMap<>(4); + modulesByDate.put(moduleRevision, typeMap); } + typeMap.put(typedefName, returnType); } + return returnType; } return null; } @@ -914,7 +910,7 @@ public abstract class AbstractTypeProvider implements TypeProvider { genTOBuilder.addHashIdentity(genPropBuilder); genTOBuilder.addToStringProperty(genPropBuilder); if (typedef.getStatus() == Status.DEPRECATED) { - genTOBuilder.addAnnotation("", "Deprecated"); + genTOBuilder.addAnnotation("java.lang", "Deprecated"); } if (javaType instanceof ConcreteType && "String".equals(javaType.getName()) && typedef.getBaseType() != null) { addStringRegExAsConstant(genTOBuilder, resolveRegExpressionsFromTypedef(typedef)); @@ -929,20 +925,14 @@ public abstract class AbstractTypeProvider implements TypeProvider { * Converts output list of generated TO builders to one TO builder (first * from list) which contains the remaining builders as its enclosing TO. * - * @param basePackageName - * string with name of package to which the module belongs - * @param typedef - * type definition which should be of type - * UnionTypeDefinition - * @param typeDefName - * string with name for generated TO - * @return generated TO builder with the list of enclosed generated TO - * builders + * @param typeName new type identifier + * @param typedef type definition which should be of type {@link UnionTypeDefinition} + * @return generated TO builder with the list of enclosed generated TO builders */ - public GeneratedTOBuilder provideGeneratedTOBuilderForUnionTypeDef(final String basePackageName, - final UnionTypeDefinition typedef, final String typeDefName, final SchemaNode parentNode) { - final List builders = provideGeneratedTOBuildersForUnionTypeDef(basePackageName, - typedef, typeDefName, parentNode); + public GeneratedTOBuilder provideGeneratedTOBuilderForUnionTypeDef(final JavaTypeName typeName, + final UnionTypeDefinition typedef, final TypeDefinition parentNode) { + final List builders = provideGeneratedTOBuildersForUnionTypeDef(typeName, typedef, + parentNode); Preconditions.checkState(!builders.isEmpty(), "No GeneratedTOBuilder objects generated from union %s", typedef); final GeneratedTOBuilder resultTOBuilder = builders.remove(0); @@ -957,13 +947,10 @@ public abstract class AbstractTypeProvider implements TypeProvider { * typeDefName. Every union type from typedef is * added to generated TO builder as property. * - * @param basePackageName - * string with name of package to which the module belongs + * @param typeName new type identifier * @param typedef * type definition which should be of type * UnionTypeDefinition - * @param typeDefName - * string with name for generated TO * @return generated TO builder which represents typedef * @throws NullPointerException *
    @@ -972,9 +959,8 @@ public abstract class AbstractTypeProvider implements TypeProvider { *
  • if Qname of typedef is null
  • *
*/ - public List provideGeneratedTOBuildersForUnionTypeDef(final String basePackageName, - final UnionTypeDefinition typedef, final String typeDefName, final SchemaNode parentNode) { - Preconditions.checkNotNull(basePackageName, "Base Package Name cannot be NULL!"); + public List provideGeneratedTOBuildersForUnionTypeDef(final JavaTypeName typeName, + final UnionTypeDefinition typedef, final SchemaNode parentNode) { Preconditions.checkNotNull(typedef, "Type Definition cannot be NULL!"); Preconditions.checkNotNull(typedef.getQName(), "Type definition QName cannot be NULL!"); @@ -982,16 +968,10 @@ public abstract class AbstractTypeProvider implements TypeProvider { final List> unionTypes = typedef.getTypes(); final Module module = findParentModule(schemaContext, parentNode); - final GeneratedTOBuilder unionGenTOBuilder; - if (typeDefName != null && !typeDefName.isEmpty()) { - final String typeName = BindingMapping.getClassName(typeDefName); - unionGenTOBuilder = newGeneratedTOBuilder(basePackageName, typeName); - unionGenTOBuilder.setSchemaPath(typedef.getPath()); - unionGenTOBuilder.setModuleName(module.getName()); - addCodegenInformation(unionGenTOBuilder, typedef); - } else { - unionGenTOBuilder = typedefToTransferObject(basePackageName, typedef, module.getName()); - } + final GeneratedTOBuilder unionGenTOBuilder = newGeneratedTOBuilder(typeName); + unionGenTOBuilder.setSchemaPath(typedef.getPath()); + unionGenTOBuilder.setModuleName(module.getName()); + addCodegenInformation(unionGenTOBuilder, typedef); generatedTOBuilders.add(unionGenTOBuilder); unionGenTOBuilder.setIsUnion(true); @@ -1008,7 +988,7 @@ public abstract class AbstractTypeProvider implements TypeProvider { resolveExtendedSubtypeAsUnion(unionGenTOBuilder, unionType, expressions, parentNode); } else if (unionType instanceof UnionTypeDefinition) { generatedTOBuilders.addAll(resolveUnionSubtypeAsUnion(unionGenTOBuilder, - (UnionTypeDefinition) unionType, basePackageName, parentNode)); + (UnionTypeDefinition) unionType, parentNode)); } else if (unionType instanceof EnumTypeDefinition) { final Enumeration enumeration = addInnerEnumerationToTypeBuilder((EnumTypeDefinition) unionType, unionTypeName, unionGenTOBuilder); @@ -1049,13 +1029,15 @@ public abstract class AbstractTypeProvider implements TypeProvider { * provideGeneratedTOBuildersForUnionTypeDef method. */ private List resolveUnionSubtypeAsUnion(final GeneratedTOBuilder parentUnionGenTOBuilder, - final UnionTypeDefinition unionSubtype, final String basePackageName, final SchemaNode parentNode) { - final String newTOBuilderName = provideAvailableNameForGenTOBuilder(parentUnionGenTOBuilder.getName()); + final UnionTypeDefinition unionSubtype, final SchemaNode parentNode) { + final JavaTypeName newTOBuilderName = parentUnionGenTOBuilder.getIdentifier().createSibling( + provideAvailableNameForGenTOBuilder(parentUnionGenTOBuilder.getName())); final List subUnionGenTOBUilders = provideGeneratedTOBuildersForUnionTypeDef( - basePackageName, unionSubtype, newTOBuilderName, parentNode); + newTOBuilderName, unionSubtype, parentNode); final GeneratedPropertyBuilder propertyBuilder; - propertyBuilder = parentUnionGenTOBuilder.addProperty(BindingMapping.getPropertyName(newTOBuilderName)); + propertyBuilder = parentUnionGenTOBuilder.addProperty(BindingMapping.getPropertyName( + newTOBuilderName.simpleName())); propertyBuilder.setReturnType(subUnionGenTOBUilders.get(0)); parentUnionGenTOBuilder.addEqualsIdentity(propertyBuilder); parentUnionGenTOBuilder.addToStringProperty(propertyBuilder); @@ -1198,19 +1180,13 @@ public abstract class AbstractTypeProvider implements TypeProvider { */ private GeneratedTOBuilder typedefToTransferObject(final String basePackageName, final TypeDefinition typedef, final String moduleName) { - - final String packageName = BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, typedef.getPath()); - final String typeDefTOName = typedef.getQName().getLocalName(); - - if (packageName != null && typeDefTOName != null) { - final String genTOName = BindingMapping.getClassName(typeDefTOName); - final GeneratedTOBuilder newType = newGeneratedTOBuilder(packageName, genTOName); - newType.setSchemaPath(typedef.getPath()); - newType.setModuleName(moduleName); - addCodegenInformation(newType, typedef); - return newType; - } - return null; + final GeneratedTOBuilder newType = newGeneratedTOBuilder(JavaTypeName.create( + BindingGeneratorUtil.packageNameForGeneratedType(basePackageName, typedef.getPath()), + BindingMapping.getClassName(typedef.getQName().getLocalName()))); + newType.setSchemaPath(typedef.getPath()); + newType.setModuleName(moduleName); + addCodegenInformation(newType, typedef); + return newType; } /** @@ -1220,12 +1196,9 @@ public abstract class AbstractTypeProvider implements TypeProvider { * All the bits of the typeDef are added to returning generated TO as * properties. * - * @param basePackageName - * string with name of package to which the module belongs + * @param typeName new type identifier * @param typeDef * type definition from which is the generated TO builder created - * @param typeDefName - * string with the name for generated TO builder * @return generated TO builder which represents typeDef * @throws IllegalArgumentException *
    @@ -1233,38 +1206,28 @@ public abstract class AbstractTypeProvider implements TypeProvider { *
  • if basePackageName equals null
  • *
*/ - public GeneratedTOBuilder provideGeneratedTOBuilderForBitsTypeDefinition(final String basePackageName, - final TypeDefinition typeDef, final String typeDefName, final String moduleName) { - - Preconditions.checkArgument(typeDef != null, "typeDef cannot be NULL!"); - Preconditions.checkArgument(basePackageName != null, "Base Package Name cannot be NULL!"); - - if (typeDef instanceof BitsTypeDefinition) { - final BitsTypeDefinition bitsTypeDefinition = (BitsTypeDefinition) typeDef; - - final String typeName = BindingMapping.getClassName(typeDefName); - final GeneratedTOBuilder genTOBuilder = newGeneratedTOBuilder(basePackageName, typeName); - genTOBuilder.setSchemaPath(typeDef.getPath()); - genTOBuilder.setModuleName(moduleName); - genTOBuilder.setBaseType(typeDef); - addCodegenInformation(genTOBuilder, typeDef); - - final List bitList = bitsTypeDefinition.getBits(); - GeneratedPropertyBuilder genPropertyBuilder; - for (Bit bit : bitList) { - final String name = bit.getName(); - genPropertyBuilder = genTOBuilder.addProperty(BindingMapping.getPropertyName(name)); - genPropertyBuilder.setReadOnly(true); - genPropertyBuilder.setReturnType(BaseYangTypes.BOOLEAN_TYPE); - - genTOBuilder.addEqualsIdentity(genPropertyBuilder); - genTOBuilder.addHashIdentity(genPropertyBuilder); - genTOBuilder.addToStringProperty(genPropertyBuilder); - } - - return genTOBuilder; + public GeneratedTOBuilder provideGeneratedTOBuilderForBitsTypeDefinition(final JavaTypeName typeName, + final BitsTypeDefinition typeDef, final String moduleName) { + final GeneratedTOBuilder genTOBuilder = newGeneratedTOBuilder(typeName); + genTOBuilder.setSchemaPath(typeDef.getPath()); + genTOBuilder.setModuleName(moduleName); + genTOBuilder.setBaseType(typeDef); + addCodegenInformation(genTOBuilder, typeDef); + + final List bitList = typeDef.getBits(); + GeneratedPropertyBuilder genPropertyBuilder; + for (Bit bit : bitList) { + final String name = bit.getName(); + genPropertyBuilder = genTOBuilder.addProperty(BindingMapping.getPropertyName(name)); + genPropertyBuilder.setReadOnly(true); + genPropertyBuilder.setReturnType(BaseYangTypes.BOOLEAN_TYPE); + + genTOBuilder.addEqualsIdentity(genPropertyBuilder); + genTOBuilder.addHashIdentity(genPropertyBuilder); + genTOBuilder.addToStringProperty(genPropertyBuilder); } - return null; + + return genTOBuilder; } /** @@ -1318,10 +1281,8 @@ public abstract class AbstractTypeProvider implements TypeProvider { Preconditions.checkArgument(innerExtendedType != null, "Extended type cannot be NULL!"); Preconditions.checkArgument(basePackageName != null, "String with base package name cannot be NULL!"); - final String typedefName = typedef.getQName().getLocalName(); - final String classTypedefName = BindingMapping.getClassName(typedefName); - final String innerTypeDef = innerExtendedType.getQName().getLocalName(); - final GeneratedTOBuilder genTOBuilder = newGeneratedTOBuilder(basePackageName, classTypedefName); + final GeneratedTOBuilder genTOBuilder = newGeneratedTOBuilder(JavaTypeName.create(basePackageName, + BindingMapping.getClassName(typedef.getQName()))); genTOBuilder.setSchemaPath(typedef.getPath()); genTOBuilder.setModuleName(moduleName); genTOBuilder.setTypedef(true); @@ -1330,7 +1291,7 @@ public abstract class AbstractTypeProvider implements TypeProvider { final Restrictions r = BindingGeneratorUtil.getRestrictions(typedef); genTOBuilder.setRestrictions(r); if (typedef.getStatus() == Status.DEPRECATED) { - genTOBuilder.addAnnotation("", "Deprecated"); + genTOBuilder.addAnnotation("java.lang", "Deprecated"); } if (baseTypeDefForExtendedType(innerExtendedType) instanceof UnionTypeDefinition) { @@ -1346,6 +1307,7 @@ public abstract class AbstractTypeProvider implements TypeProvider { } if (typeMap != null) { + final String innerTypeDef = innerExtendedType.getQName().getLocalName(); final Type type = typeMap.get(innerTypeDef); if (type instanceof GeneratedTransferObject) { genTOBuilder.setExtendsType((GeneratedTransferObject) type); @@ -1450,8 +1412,7 @@ public abstract class AbstractTypeProvider implements TypeProvider { * integer suffix is incremented by one. If name contains no * number suffix then number 1 is added. * - * @param name - * string with name of augmented node + * @param name string with name of augmented node * @return string with the number suffix incremented by one (or 1 is added) */ private static String provideAvailableNameForGenTOBuilder(final String name) { diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypes.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypes.java index 7e70a29f03..8914c63a12 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypes.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypes.java @@ -15,6 +15,7 @@ import java.util.Map; import org.opendaylight.mdsal.binding.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.model.api.Restrictions; import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.util.Types; import org.opendaylight.yangtools.yang.binding.BindingMapping; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -98,7 +99,7 @@ public final class BaseYangTypes { /** * Type representation of binary YANG type */ - public static final Type BINARY_TYPE = Types.primitiveType("byte[]", null); + public static final Type BINARY_TYPE = Types.typeForClass(byte[].class); public static final Type INSTANCE_IDENTIFIER = Types.parameterizedTypeFor(Types .typeForClass(InstanceIdentifier.class)); @@ -172,7 +173,7 @@ public final class BaseYangTypes { String typeName = type.getQName().getLocalName(); switch (typeName) { case "binary": - return restrictions == null ? Types.BYTE_ARRAY : Types.primitiveType("byte[]", restrictions); + return restrictions == null ? Types.BYTE_ARRAY : Types.typeForClass(byte[].class, restrictions); case "decimal64": return Types.typeForClass(BigDecimal.class, restrictions); case "enumeration": @@ -222,18 +223,26 @@ public final class BaseYangTypes { return Types.getDefaultRestrictions(min, max); } + // FIXME: why do we even have this class? public static final class UnionType implements Type { @Override public String getPackageName() { return null; } + @Override public String getName() { return "Union"; } + @Override public String getFullyQualifiedName() { return "Union"; } + + @Override + public JavaTypeName getIdentifier() { + return null; + } } } diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/CodegenTypeProvider.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/CodegenTypeProvider.java index f9f4ee34ff..8b8ecbb46e 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/CodegenTypeProvider.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/CodegenTypeProvider.java @@ -15,6 +15,7 @@ import com.google.common.collect.Maps; import java.util.List; import java.util.Map; import java.util.Optional; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder; @@ -109,17 +110,17 @@ public class CodegenTypeProvider extends AbstractTypeProvider { } @Override - public GeneratedTOBuilder newGeneratedTOBuilder(final String packageName, final String name) { - return new CodegenGeneratedTOBuilder(packageName, name); + public GeneratedTOBuilder newGeneratedTOBuilder(final JavaTypeName identifier) { + return new CodegenGeneratedTOBuilder(identifier); } @Override - public GeneratedTypeBuilder newGeneratedTypeBuilder(final String packageName, final String name) { - return new CodegenGeneratedTypeBuilder(packageName, name); + public GeneratedTypeBuilder newGeneratedTypeBuilder(final JavaTypeName identifier) { + return new CodegenGeneratedTypeBuilder(identifier); } @Override - public AbstractEnumerationBuilder newEnumerationBuilder(final String packageName, final String name) { - return new CodegenEnumerationBuilder(packageName, name); + public AbstractEnumerationBuilder newEnumerationBuilder(final JavaTypeName identifier) { + return new CodegenEnumerationBuilder(identifier); } } diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/RuntimeTypeProvider.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/RuntimeTypeProvider.java index 4e47f540b5..19e00f8ed0 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/RuntimeTypeProvider.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/RuntimeTypeProvider.java @@ -11,6 +11,7 @@ import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableMap; import java.util.List; import java.util.Map; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder; @@ -50,17 +51,17 @@ public final class RuntimeTypeProvider extends AbstractTypeProvider { } @Override - public GeneratedTOBuilder newGeneratedTOBuilder(final String packageName, final String name) { - return new RuntimeGeneratedTOBuilder(packageName, name); + public GeneratedTOBuilder newGeneratedTOBuilder(final JavaTypeName identifier) { + return new RuntimeGeneratedTOBuilder(identifier); } @Override - public GeneratedTypeBuilder newGeneratedTypeBuilder(final String packageName, final String name) { - return new RuntimeGeneratedTypeBuilder(packageName, name); + public GeneratedTypeBuilder newGeneratedTypeBuilder(final JavaTypeName identifier) { + return new RuntimeGeneratedTypeBuilder(identifier); } @Override - public AbstractEnumerationBuilder newEnumerationBuilder(final String packageName, final String name) { - return new RuntimeEnumerationBuilder(packageName, name); + public AbstractEnumerationBuilder newEnumerationBuilder(final JavaTypeName identifier) { + return new RuntimeEnumerationBuilder(identifier); } } diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/BitAndUnionTOEnclosingTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/BitAndUnionTOEnclosingTest.java index e63a5ae696..8a1817a459 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/BitAndUnionTOEnclosingTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/BitAndUnionTOEnclosingTest.java @@ -76,7 +76,7 @@ public class BitAndUnionTOEnclosingTest { assertEquals("Lf TO has incorrect number of occurences.", 1, lfLeafCounter); assertEquals("Lf has incorrect package name.", "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626.ParentContainer", - lfLeaf.getPackageName()); + lfLeaf.getIdentifier().immediatelyEnclosingClass().get().toString()); assertEquals("Lf generated TO has incorrect number of properties", 3, lfLeaf.getProperties().size()); containsAttributes(lfLeaf, true, true, true, new NameTypePattern("string", "String")); @@ -87,7 +87,7 @@ public class BitAndUnionTOEnclosingTest { assertEquals("Lf1 TO has incorrect number of occurences.", 1, lf1LeafCounter); assertEquals("Lf1 has incorrect package name.", "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626.ParentContainer", - lf1Leaf.getPackageName()); + lf1Leaf.getIdentifier().immediatelyEnclosingClass().get().toString()); assertEquals("Lf generated TO has incorrect number of properties", 4, lf1Leaf.getProperties().size()); containsAttributes(lf1Leaf, true, true, true, new NameTypePattern("uint32", "Long")); @@ -100,7 +100,7 @@ public class BitAndUnionTOEnclosingTest { assertEquals("Lf2 TO has incorrect number of occurences.", 1, lf2LeafCounter); assertEquals("Lf2 has incorrect package name.", "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626.ParentContainer", - lf2Leaf.getPackageName()); + lf2Leaf.getIdentifier().immediatelyEnclosingClass().get().toString()); assertEquals("Lf generated TO has incorrect number of properties", 2, lf2Leaf.getProperties().size()); containsAttributes(lf2Leaf, true, true, true, new NameTypePattern("string", "String")); @@ -204,10 +204,10 @@ public class BitAndUnionTOEnclosingTest { assertEquals("BitLeaf has incorrect package name.", "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626.ParentContainer", - bitLeaf.getPackageName()); + bitLeaf.getIdentifier().immediatelyEnclosingClass().get().toString()); assertEquals("UnionLeaf has incorrect package name.", "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626.ParentContainer", - bitLeaf.getPackageName()); + unionLeaf.getIdentifier().immediatelyEnclosingClass().get().toString()); List propertiesBitLeaf = bitLeaf.getProperties(); GeneratedProperty firstBitProperty = null; diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GenEnumResolvingTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GenEnumResolvingTest.java index 12906d2c26..639eba1e19 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GenEnumResolvingTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GenEnumResolvingTest.java @@ -139,13 +139,15 @@ public class GenEnumResolvingTest { assertNotNull("Expected Referenced Enum LinkUpDownTrapEnable, but was NULL!", linkUpDownTrapEnable); assertTrue("Expected LinkUpDownTrapEnable of type Enumeration", linkUpDownTrapEnable instanceof Enumeration); - assertEquals(linkUpDownTrapEnable.getPackageName(), - "org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev121115.interfaces.Interface"); + assertEquals( + "org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev121115.interfaces.Interface", + linkUpDownTrapEnable.getIdentifier().immediatelyEnclosingClass().get().toString()); assertNotNull("Expected Referenced Enum OperStatus, but was NULL!", operStatus); assertTrue("Expected OperStatus of type Enumeration", operStatus instanceof Enumeration); - assertEquals(operStatus.getPackageName(), - "org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev121115.interfaces.Interface"); + assertEquals( + "org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev121115.interfaces.Interface", + operStatus.getIdentifier().immediatelyEnclosingClass().get().toString()); } } diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/UsesTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/UsesTest.java index b4b1fac152..e6b1ac9676 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/UsesTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/UsesTest.java @@ -403,8 +403,8 @@ public class UsesTest { assertNotNull("Generated type for RPC test input wasn't generated", rpcTestInput); assertEquals("RpcTestInput interface - incorrect number of occurences", 1, rpcTestInputCounter); - assertEquals("RpcTestInput isn't in correct package", - "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev130718", rpcTestInput.getPackageName()); + assertEquals("RpcTestInput isn't in correct package", "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev130718", + rpcTestInput.getPackageName()); assertNotNull("Generated type for RPC test output wasn't generated", rpcTestOutput); assertEquals("RpcTestOutput interface - incorrect number of occurences", 1, rpcTestOutputCounter); diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImplTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImplTest.java index 690fe4ef1b..a8fdcbd8f4 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImplTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImplTest.java @@ -20,6 +20,7 @@ import java.net.URI; import java.util.NoSuchElementException; import org.junit.Test; import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.util.generated.type.builder.CodegenGeneratedTypeBuilder; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -107,8 +108,8 @@ public class TypeProviderImplTest { final AbstractTypeProvider typeProvider = new RuntimeTypeProvider(schemaContext); final SchemaPath refTypePath = SchemaPath.create(true, QName.create("", "cont1"), QName.create("", "list1")); - final CodegenGeneratedTypeBuilder refType = new CodegenGeneratedTypeBuilder("org.opendaylight.yangtools.test", - "TestType"); + final CodegenGeneratedTypeBuilder refType = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "TestType")); typeProvider.putReferencedType(refTypePath, refType); final StringTypeDefinition stringType = BaseTypes.stringType(); diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java index 187b74a709..757c867b1e 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java @@ -28,6 +28,7 @@ import org.opendaylight.mdsal.binding.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.model.api.ConcreteType; import org.opendaylight.mdsal.binding.model.api.Enumeration; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.model.api.Restrictions; import org.opendaylight.mdsal.binding.model.api.Type; @@ -35,6 +36,7 @@ import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder; import org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil; import org.opendaylight.mdsal.binding.model.util.ReferencedTypeImpl; import org.opendaylight.mdsal.binding.model.util.generated.type.builder.CodegenGeneratedTOBuilder; +import org.opendaylight.yangtools.yang.binding.BindingMapping; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -339,7 +341,7 @@ public class TypeProviderTest { final TypeDefinition enumLeafTypedef = enumLeafNode.getType(); Type enumType = provider.javaTypeForSchemaDefinitionType(enumLeafTypedef, enumLeafNode); - Type refType = new ReferencedTypeImpl(enumType.getPackageName(), enumType.getName()); + Type refType = new ReferencedTypeImpl(enumType.getIdentifier()); provider.putReferencedType(enumLeafNode.getPath(), refType); final LeafListSchemaNode enumListNode = provideLeafListNodeFromTopLevelContainer(this.testTypeProviderModule, @@ -347,7 +349,7 @@ public class TypeProviderTest { final TypeDefinition enumLeafListTypedef = enumListNode.getType(); enumType = provider.javaTypeForSchemaDefinitionType(enumLeafListTypedef, enumListNode); - refType = new ReferencedTypeImpl(enumType.getPackageName(), enumType.getPackageName()); + refType = new ReferencedTypeImpl(enumType.getIdentifier()); provider.putReferencedType(enumListNode.getPath(), refType); } @@ -470,29 +472,14 @@ public class TypeProviderTest { assertNotNull(unionTypeDef); assertTrue(unionTypeDef.getBaseType() instanceof UnionTypeDefinition); - GeneratedTOBuilder unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name", - (UnionTypeDefinition)unionTypeDef.getBaseType(), "ComplexUnionType", unionTypeDef); + GeneratedTOBuilder unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef( + JavaTypeName.create("test.package.name", BindingMapping.getClassName(unionTypeDef.getQName())), + (UnionTypeDefinition)unionTypeDef.getBaseType(), unionTypeDef); assertNotNull(unionTypeBuilder); GeneratedTransferObject unionType = unionTypeBuilder.build(); - assertEquals("ComplexUnionType", unionType.getName()); - - unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name", - (UnionTypeDefinition)unionTypeDef.getBaseType(), "", unionTypeDef); - - assertNotNull(unionTypeBuilder); - - unionType = unionTypeBuilder.build(); - assertEquals("Union", unionType.getName()); - - unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name", - (UnionTypeDefinition)unionTypeDef.getBaseType(), null, unionTypeDef); - - assertNotNull(unionTypeBuilder); - - unionType = unionTypeBuilder.build(); - assertEquals("Union", unionType.getName()); + assertEquals("ComplexUnion", unionType.getName()); } @Test @@ -506,13 +493,13 @@ public class TypeProviderTest { assertNotNull(unionTypeDef); assertTrue(unionTypeDef.getBaseType() instanceof UnionTypeDefinition); final GeneratedTOBuilder unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef( - "test.package.name",(UnionTypeDefinition)unionTypeDef.getBaseType(), "ComplexStringIntUnionType", - unionTypeDef); + JavaTypeName.create("test.package.name", BindingMapping.getClassName(unionTypeDef.getQName())), + (UnionTypeDefinition)unionTypeDef.getBaseType(), unionTypeDef); assertNotNull(unionTypeBuilder); final GeneratedTransferObject unionType = unionTypeBuilder.build(); - assertEquals("ComplexStringIntUnionType", unionType.getName()); + assertEquals("ComplexStringIntUnion", unionType.getName()); } @Test @@ -649,43 +636,26 @@ public class TypeProviderTest { final Module baseYangTypes = resolveModule("test-type-provider"); - final TypeDefinition aesIdentityrefType = resolveTypeDefinitionFromModule(baseYangTypes, "aes-identityref-type"); + final TypeDefinition aesIdentityrefType = resolveTypeDefinitionFromModule(baseYangTypes, + "aes-identityref-type"); assertNotNull(aesIdentityrefType); final Type extType = provider.generatedTypeForExtendedDefinitionType(aesIdentityrefType, aesIdentityrefType); assertEquals(null, extType); } - @Test(expected = IllegalArgumentException.class) + @Test(expected = NullPointerException.class) public void provideGeneratedTOBuilderForBitsTypeDefinitionWithNullTypedefTest() { final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext); - provider.provideGeneratedTOBuilderForBitsTypeDefinition("", null, "", ""); - } - - @Test(expected = IllegalArgumentException.class) - public void provideGeneratedTOBuilderForBitsTypeDefinitionWithBasePackageNullTest() { - final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext); - final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type"); - final TypeDefinition leafType = leaf.getType(); - provider.provideGeneratedTOBuilderForBitsTypeDefinition(null, leafType, "", ""); - } - - @Test - public void provideGeneratedTOBuilderForBitsTypeDefinitionWithNonBitsTypedefTest() { - final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext); - - final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type"); - final TypeDefinition leafType = leaf.getType(); - final Type type = provider.provideGeneratedTOBuilderForBitsTypeDefinition("", leafType, "", ""); - - assertEquals(null, type); + provider.provideGeneratedTOBuilderForBitsTypeDefinition(JavaTypeName.create("foo", "foo"), null, "foo"); } @Test public void getConstructorPropertyNameTest() { final TypeProvider provider = new RuntimeTypeProvider(this.schemaContext); - final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type"); + final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", + "yang-int8-type"); final TypeDefinition leafType = leaf.getType(); final String ctorPropertyName = provider.getConstructorPropertyName(leafType); @@ -699,7 +669,8 @@ public class TypeProviderTest { public void getParamNameFromTypeTest() { final TypeProvider provider = new RuntimeTypeProvider(this.schemaContext); - final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type"); + final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", + "yang-int8-type"); final TypeDefinition leafType = leaf.getType(); final String paramName = provider.getParamNameFromType(leafType); @@ -708,7 +679,8 @@ public class TypeProviderTest { @Test public void addUnitsToGenTOTest() { - final GeneratedTOBuilder builder = new CodegenGeneratedTOBuilder("test.package", "TestBuilder"); + final GeneratedTOBuilder builder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("test.package", "TestBuilder")); CodegenTypeProvider.addUnitsToGenTO(builder, null); GeneratedTransferObject genTO = builder.build(); diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/AbstractBaseType.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/AbstractBaseType.java index 546394475a..7347716be0 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/AbstractBaseType.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/AbstractBaseType.java @@ -7,71 +7,38 @@ */ package org.opendaylight.mdsal.binding.model.util; -import java.util.Objects; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.Type; /** * It is used only as ancestor for other Types */ public class AbstractBaseType implements Type { - - /** - * Name of the package to which this Type belongs. - */ - private final String packageName; - /** * Name of this Type. */ - private final String name; - - @Override - public String getPackageName() { - return this.packageName; - } + private final JavaTypeName identifier; @Override - public String getName() { - return this.name; - } - - @Override - public String getFullyQualifiedName() { - if (this.packageName.isEmpty()) { - return this.name; - } else { - return this.packageName + "." + this.name; - } + public final JavaTypeName getIdentifier() { + return this.identifier; } /** - * Constructs the instance of this class with the concrete package name type - * name. + * Constructs the instance of this class with a JavaTypeName. * - * @param pkName - * string with the package name to which this Type - * belongs - * @param name - * string with the name for this Type + * @param identifier for this Type */ - protected AbstractBaseType(final String pkName, final String name) { - if (pkName == null) { - throw new IllegalArgumentException("Package Name for Generated Type cannot be null!"); - } - if (name == null) { - throw new IllegalArgumentException("Name of Generated Type cannot be null!"); + protected AbstractBaseType(final JavaTypeName identifier) { + if (identifier == null) { + throw new IllegalArgumentException("Identifier for Generated Type cannot be null!"); } - this.packageName = pkName; - this.name = name; + this.identifier = identifier; } @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = (prime * result) + Objects.hashCode(this.name); - result = (prime * result) + Objects.hashCode(this.packageName); - return result; + return identifier.hashCode(); } @Override @@ -86,14 +53,11 @@ public class AbstractBaseType implements Type { return false; } final Type other = (Type) obj; - return Objects.equals(this.name, other.getName()) && Objects.equals(this.packageName, other.getPackageName()); + return identifier.equals(other.getIdentifier()); } @Override public String toString() { - if (this.packageName.isEmpty()) { - return "Type (" + this.name + ")"; - } - return "Type (" + this.packageName + "." + this.name + ")"; + return "Type (" + getFullyQualifiedName() + ")"; } } diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/ReferencedTypeImpl.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/ReferencedTypeImpl.java index a49cb564b9..cbe6c82b68 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/ReferencedTypeImpl.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/ReferencedTypeImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.mdsal.binding.model.util; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; + /** * * Wraps combination of packageName and name to the @@ -17,13 +19,10 @@ public final class ReferencedTypeImpl extends AbstractBaseType { /** * Creates instance of this class with concrete package name and type name * - * @param packageName - * string with the package name - * @param name - * string with the name for referenced type + * @param identifier JavaTypeName of the referenced type */ - public ReferencedTypeImpl(final String packageName, final String name) { - super(packageName, name); + public ReferencedTypeImpl(final JavaTypeName identifier) { + super(identifier); } @Override diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/Types.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/Types.java index 97b15049cd..380848c2e4 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/Types.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/Types.java @@ -7,14 +7,11 @@ */ package org.opendaylight.mdsal.binding.model.util; -import com.google.common.base.CharMatcher; import com.google.common.base.Preconditions; -import com.google.common.base.Splitter; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableRangeSet; -import com.google.common.collect.Iterables; import com.google.common.collect.Range; import com.google.common.collect.RangeSet; import java.util.Collections; @@ -23,9 +20,10 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.concurrent.Future; -import javax.annotation.Nullable; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.model.api.BaseTypeWithRestrictions; import org.opendaylight.mdsal.binding.model.api.ConcreteType; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.model.api.Restrictions; import org.opendaylight.mdsal.binding.model.api.Type; @@ -41,12 +39,7 @@ public final class Types { new CacheLoader, ConcreteType>() { @Override public ConcreteType load(final Class key) { - //Nested class - if (key.getEnclosingClass() != null) { - return new ConcreteTypeImpl(key.getEnclosingClass().getName(), key.getSimpleName(), null); - } else { - return new ConcreteTypeImpl(key.getPackage().getName(), key.getSimpleName(), null); - } + return new ConcreteTypeImpl(JavaTypeName.create(key), null); } }; private static final LoadingCache, ConcreteType> TYPE_CACHE = @@ -60,9 +53,8 @@ public final class Types { public static final ConcreteType FUTURE = typeForClass(Future.class); public static final ConcreteType STRING = typeForClass(String.class); public static final ConcreteType VOID = typeForClass(Void.class); - public static final ConcreteType BYTE_ARRAY = primitiveType("byte[]", null); - public static final ConcreteType CHAR_ARRAY = primitiveType("char[]", null); - private static final Splitter DOT_SPLITTER = Splitter.on('.'); + public static final ConcreteType BYTE_ARRAY = typeForClass(byte[].class); + public static final ConcreteType CHAR_ARRAY = typeForClass(char[].class); /** * It is not desirable to create instance of this class @@ -82,24 +74,6 @@ public final class Types { return VOID; } - /** - * Creates the instance of type - * {@link org.opendaylight.mdsal.binding.model.api.ConcreteType - * ConcreteType} which represents primitive JAVA type for which package - * doesn't exist. - * - * @param primitiveType - * string containing programmatic construction based on - * primitive type (e.g byte[]) - * @param restrictions - * restrictions object - * @return ConcreteType instance which represents programmatic - * construction with primitive JAVA type - */ - public static ConcreteType primitiveType(final String primitiveType, final Restrictions restrictions) { - return new ConcreteTypeImpl("", primitiveType, restrictions); - } - /** * Returns an instance of {@link ConcreteType} describing the class * @@ -115,10 +89,12 @@ public final class Types { if (restrictions == null) { return typeForClass(cls); } + + final JavaTypeName identifier = JavaTypeName.create(cls); if (restrictions instanceof DefaultRestrictions) { - return new ConcreteTypeImpl(cls.getPackage().getName(), cls.getSimpleName(), restrictions); + return new ConcreteTypeImpl(identifier, restrictions); } - return new BaseTypeWithRestrictionsImpl(cls.getPackage().getName(), cls.getSimpleName(), restrictions); + return new BaseTypeWithRestrictionsImpl(identifier, restrictions); } /** @@ -176,19 +152,13 @@ public final class Types { } /** - * Creates instance of type - * {@link org.opendaylight.mdsal.binding.model.api.WildcardType - * WildcardType} + * Creates instance of type {@link org.opendaylight.mdsal.binding.model.api.WildcardType}. * - * @param packageName - * string with the package name - * @param typeName - * string with the type name - * @return WildcardType representation of - * packageName and typeName + * @param identifier JavaTypeName of the type + * @return WildcardType representation of specified identifier */ - public static WildcardType wildcardTypeFor(final String packageName, final String typeName) { - return new WildcardTypeImpl(packageName, typeName); + public static WildcardType wildcardTypeFor(final JavaTypeName identifier) { + return new WildcardTypeImpl(identifier); } /** @@ -227,14 +197,8 @@ public final class Types { return parameterizedTypeFor(augmentation, valueType); } - - public static @Nullable String getOuterClassName(final Type valueType) { - final String pkgName = valueType.getPackageName(); - if (CharMatcher.javaUpperCase().indexIn(pkgName) >= 0) { - // It is inner class. - return Iterables.getLast(DOT_SPLITTER.split(pkgName)); - } - return null; + public static @Nullable String getOuterClassName(final Type valueType) { + return valueType.getIdentifier().immediatelyEnclosingClass().map(Object::toString).orElse(null); } /** @@ -254,8 +218,8 @@ public final class Types { * @param name * string with the name of the type */ - private ConcreteTypeImpl(final String pkName, final String name, final Restrictions restrictions) { - super(pkName, name); + ConcreteTypeImpl(final JavaTypeName identifier, final Restrictions restrictions) { + super(identifier); this.restrictions = restrictions; } @@ -280,8 +244,8 @@ public final class Types { * @param name * string with the name of the type */ - private BaseTypeWithRestrictionsImpl(final String pkName, final String name, final Restrictions restrictions) { - super(pkName, name); + BaseTypeWithRestrictionsImpl(final JavaTypeName identifier, final Restrictions restrictions) { + super(identifier); this.restrictions = Preconditions.checkNotNull(restrictions); } @@ -326,11 +290,10 @@ public final class Types { * array of actual parameters */ public ParametrizedTypeImpl(final Type rawType, final Type[] actTypes) { - super(rawType.getPackageName(), rawType.getName()); + super(rawType.getIdentifier()); this.rawType = rawType; this.actualTypes = actTypes.clone(); } - } /** @@ -345,8 +308,8 @@ public final class Types { * @param typeName * string with the name of type */ - public WildcardTypeImpl(final String packageName, final String typeName) { - super(packageName, typeName); + WildcardTypeImpl(final JavaTypeName identifier) { + super(identifier); } } diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractEnumerationBuilder.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractEnumerationBuilder.java index 8037102393..8eef6aab77 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractEnumerationBuilder.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractEnumerationBuilder.java @@ -24,6 +24,7 @@ import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedType; import org.opendaylight.mdsal.binding.model.api.MethodSignature; import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.AnnotationTypeBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder; import org.opendaylight.mdsal.binding.model.util.AbstractBaseType; @@ -39,18 +40,16 @@ public abstract class AbstractEnumerationBuilder extends AbstractBaseType implem private List values = ImmutableList.of(); private List annotationBuilders = ImmutableList.of(); - AbstractEnumerationBuilder(final String packageName, final String name) { - super(packageName, name); + AbstractEnumerationBuilder(final JavaTypeName identifier) { + super(identifier); } @Override - public final AnnotationTypeBuilder addAnnotation(final String packageName, final String name) { - if (packageName != null && name != null) { - final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name); - if (!annotationBuilders.contains(builder)) { - annotationBuilders = LazyCollections.lazyAdd(annotationBuilders, builder); - return builder; - } + public final AnnotationTypeBuilder addAnnotation(final JavaTypeName identifier) { + final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(identifier); + if (!annotationBuilders.contains(builder)) { + annotationBuilders = LazyCollections.lazyAdd(annotationBuilders, builder); + return builder; } return null; } @@ -168,8 +167,8 @@ public abstract class AbstractEnumerationBuilder extends AbstractBaseType implem private final List values; private final List annotations; - public AbstractEnumeration(final AbstractEnumerationBuilder builder, final Type definingType) { - super(builder.getPackageName(), builder.getName()); + AbstractEnumeration(final AbstractEnumerationBuilder builder, final Type definingType) { + super(builder.getIdentifier()); this.definingType = definingType; this.values = ImmutableList.copyOf(builder.values); diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTOBuilder.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTOBuilder.java index efefac8db6..c6786ece75 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTOBuilder.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTOBuilder.java @@ -14,6 +14,7 @@ import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedPropertyBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.MethodSignatureBuilder; @@ -33,8 +34,8 @@ abstract class AbstractGeneratedTOBuilder extends AbstractGeneratedTypeBuilder baseType = null; - AbstractGeneratedTOBuilder(final String packageName, final String name) { - super(packageName, name); + AbstractGeneratedTOBuilder(final JavaTypeName identifier) { + super(identifier); setAbstract(false); } diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedType.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedType.java index 5801adada1..b3c2891db5 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedType.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedType.java @@ -19,6 +19,7 @@ import org.opendaylight.mdsal.binding.model.api.GeneratedType; import org.opendaylight.mdsal.binding.model.api.MethodSignature; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.api.TypeComment; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition; import org.opendaylight.mdsal.binding.model.api.type.builder.AnnotationTypeBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder; @@ -42,8 +43,8 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat private final boolean isAbstract; private final YangSourceDefinition definition; - public AbstractGeneratedType(final AbstractGeneratedTypeBuilder builder) { - super(builder.getPackageName(), builder.getName()); + AbstractGeneratedType(final AbstractGeneratedTypeBuilder builder) { + super(builder.getIdentifier()); this.parent = builder.getParent(); this.comment = builder.getComment(); this.annotations = toUnmodifiableAnnotations(builder.getAnnotations()); @@ -58,13 +59,13 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat this.definition = builder.getYangSourceDefinition().orElse(null); } - public AbstractGeneratedType(final Type parent, final String packageName, final String name, - final TypeComment comment, final List annotationBuilders, final boolean isAbstract, + AbstractGeneratedType(final Type parent, final JavaTypeName identifier, final TypeComment comment, + final List annotationBuilders, final boolean isAbstract, final List implementsTypes, final List enclosedGenTypeBuilders, final List enclosedGenTOBuilders, final List enumBuilders, final List constants, final List methodBuilders, final List propertyBuilders) { - super(packageName, name); + super(identifier); this.parent = parent; this.comment = comment; this.annotations = toUnmodifiableAnnotations(annotationBuilders); diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTypeBuilder.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTypeBuilder.java index 89ef28a279..e7ac745d10 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTypeBuilder.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTypeBuilder.java @@ -14,6 +14,7 @@ import java.util.Objects; import java.util.Optional; import org.opendaylight.mdsal.binding.model.api.AccessModifier; import org.opendaylight.mdsal.binding.model.api.Constant; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.api.TypeComment; import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition; @@ -42,8 +43,8 @@ abstract class AbstractGeneratedTypeBuilder other = (AbstractGeneratedTypeBuilder) obj; - return Objects.equals(getName(), other.getName()) && Objects.equals(getPackageName(), other.getPackageName()); + return getIdentifier().equals(other.getIdentifier()); } } diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractTypeMemberBuilder.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractTypeMemberBuilder.java index c746714b31..d94e950935 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractTypeMemberBuilder.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractTypeMemberBuilder.java @@ -16,6 +16,7 @@ import java.util.Objects; import org.opendaylight.mdsal.binding.model.api.AccessModifier; import org.opendaylight.mdsal.binding.model.api.AnnotationType; import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.AnnotationTypeBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.TypeMemberBuilder; import org.opendaylight.yangtools.util.LazyCollections; @@ -34,11 +35,8 @@ abstract class AbstractTypeMemberBuilder> impleme } @Override - public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) { - Preconditions.checkArgument(packageName != null, "Annotation Type cannot have package name null!"); - Preconditions.checkArgument(name != null, "Annotation Type cannot have name as null!"); - - final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name); + public AnnotationTypeBuilder addAnnotation(final JavaTypeName identifier) { + final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(identifier); this.annotationBuilders = LazyCollections.lazyAdd(this.annotationBuilders, builder); return builder; } diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AnnotationTypeBuilderImpl.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AnnotationTypeBuilderImpl.java index 316eb5701d..8ddafc9dee 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AnnotationTypeBuilderImpl.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AnnotationTypeBuilderImpl.java @@ -7,33 +7,32 @@ */ package org.opendaylight.mdsal.binding.model.util.generated.type.builder; +import static java.util.Objects.requireNonNull; + import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; import org.opendaylight.mdsal.binding.model.api.AnnotationType; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.AnnotationTypeBuilder; import org.opendaylight.mdsal.binding.model.util.AbstractBaseType; import org.opendaylight.yangtools.util.LazyCollections; final class AnnotationTypeBuilderImpl extends AbstractBaseType implements AnnotationTypeBuilder { - private final String packageName; - private final String name; private List annotationBuilders = Collections.emptyList(); private List parameters = Collections.emptyList(); - public AnnotationTypeBuilderImpl(final String packageName, final String name) { - super(packageName, name); - this.packageName = packageName; - this.name = name; + AnnotationTypeBuilderImpl(final JavaTypeName identifier) { + super(identifier); } @Override public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) { if (packageName != null && name != null) { - final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name); + final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(JavaTypeName.create(packageName, name)); if (!this.annotationBuilders.contains(builder)) { this.annotationBuilders = LazyCollections.lazyAdd(this.annotationBuilders, builder); return builder; @@ -43,12 +42,11 @@ final class AnnotationTypeBuilderImpl extends AbstractBaseType implements Annota } private boolean addParameter(final ParameterImpl param) { - if (!this.parameters.contains(param)) { - this.parameters = LazyCollections.lazyAdd(this.parameters, param); - return true; - } else { + if (parameters.contains(param)) { return false; } + parameters = LazyCollections.lazyAdd(parameters, param); + return true; } @Override @@ -71,16 +69,7 @@ final class AnnotationTypeBuilderImpl extends AbstractBaseType implements Annota @Override public AnnotationType build() { - return new AnnotationTypeImpl(this.packageName, this.name, this.annotationBuilders, this.parameters); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + Objects.hashCode(this.name); - result = prime * result + Objects.hashCode(this.packageName); - return result; + return new AnnotationTypeImpl(getIdentifier(), this.annotationBuilders, this.parameters); } @Override @@ -88,23 +77,19 @@ final class AnnotationTypeBuilderImpl extends AbstractBaseType implements Annota if (this == obj) { return true; } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { + if (obj == null || getClass() != obj.getClass()) { return false; } - final AnnotationTypeBuilderImpl other = (AnnotationTypeBuilderImpl) obj; - return Objects.equals(this.name, other.name) && Objects.equals(this.packageName, other.packageName); + return getIdentifier().equals(((AnnotationTypeBuilderImpl) obj).getIdentifier()); } @Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append("AnnotationTypeBuilder [packageName="); - builder.append(this.packageName); + builder.append(getPackageName()); builder.append(", name="); - builder.append(this.name); + builder.append(getName()); builder.append(", annotationBuilders="); builder.append(this.annotationBuilders); builder.append(", parameters="); @@ -114,18 +99,14 @@ final class AnnotationTypeBuilderImpl extends AbstractBaseType implements Annota } private static final class AnnotationTypeImpl implements AnnotationType { - - private final String packageName; - private final String name; + private final JavaTypeName identifier; private final List annotations; private final List parameters; private final List paramNames; - public AnnotationTypeImpl(final String packageName, final String name, - final List annotationBuilders, + AnnotationTypeImpl(final JavaTypeName identifier, final List annotationBuilders, final List parameters) { - this.packageName = packageName; - this.name = name; + this.identifier = requireNonNull(identifier); final List a = new ArrayList<>(); for (final AnnotationTypeBuilder builder : annotationBuilders) { @@ -144,18 +125,8 @@ final class AnnotationTypeBuilderImpl extends AbstractBaseType implements Annota } @Override - public String getPackageName() { - return this.packageName; - } - - @Override - public String getName() { - return this.name; - } - - @Override - public String getFullyQualifiedName() { - return this.packageName + "." + this.name; + public JavaTypeName getIdentifier() { + return identifier; } @Override @@ -192,11 +163,7 @@ final class AnnotationTypeBuilderImpl extends AbstractBaseType implements Annota @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + Objects.hashCode(this.name); - result = prime * result + Objects.hashCode(this.packageName); - return result; + return identifier.hashCode(); } @Override @@ -204,23 +171,20 @@ final class AnnotationTypeBuilderImpl extends AbstractBaseType implements Annota if (this == obj) { return true; } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { + if (obj == null || getClass() != obj.getClass()) { return false; } final AnnotationTypeImpl other = (AnnotationTypeImpl) obj; - return Objects.equals(this.name, other.name) && Objects.equals(this.packageName, other.packageName); + return identifier.equals(other.identifier); } @Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append("AnnotationType [packageName="); - builder.append(this.packageName); + builder.append(getPackageName()); builder.append(", name="); - builder.append(this.name); + builder.append(getName()); builder.append(", annotations="); builder.append(this.annotations); builder.append(", parameters="); diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenEnumerationBuilder.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenEnumerationBuilder.java index ad76012bbd..5c82e2e636 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenEnumerationBuilder.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenEnumerationBuilder.java @@ -13,6 +13,7 @@ import java.util.Optional; import org.opendaylight.mdsal.binding.model.api.Enumeration; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.api.TypeComment; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; @@ -24,8 +25,8 @@ public final class CodegenEnumerationBuilder extends AbstractEnumerationBuilder private String moduleName; private SchemaPath schemaPath; - public CodegenEnumerationBuilder(final String packageName, final String name) { - super(packageName, name); + public CodegenEnumerationBuilder(final JavaTypeName identifier) { + super(identifier); } @Override diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenGeneratedTOBuilder.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenGeneratedTOBuilder.java index 2a0f45297a..798142e3a0 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenGeneratedTOBuilder.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenGeneratedTOBuilder.java @@ -10,6 +10,7 @@ package org.opendaylight.mdsal.binding.model.util.generated.type.builder; import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.Restrictions; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedPropertyBuilder; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; @@ -23,8 +24,8 @@ public final class CodegenGeneratedTOBuilder extends AbstractGeneratedTOBuilder private String moduleName; private SchemaPath schemaPath; - public CodegenGeneratedTOBuilder(final String packageName, final String name) { - super(packageName, name); + public CodegenGeneratedTOBuilder(final JavaTypeName identifier) { + super(identifier); } @Override @@ -63,8 +64,8 @@ public final class CodegenGeneratedTOBuilder extends AbstractGeneratedTOBuilder } @Override - AbstractEnumerationBuilder newEnumerationBuilder(final String packageName, final String name) { - return new CodegenEnumerationBuilder(packageName, name); + AbstractEnumerationBuilder newEnumerationBuilder(final JavaTypeName identifier) { + return new CodegenEnumerationBuilder(identifier); } private static final class GTO extends AbstractGeneratedTransferObject { diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenGeneratedTypeBuilder.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenGeneratedTypeBuilder.java index 57615bccea..d2dde0fe0a 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenGeneratedTypeBuilder.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenGeneratedTypeBuilder.java @@ -9,6 +9,7 @@ package org.opendaylight.mdsal.binding.model.util.generated.type.builder; import org.opendaylight.mdsal.binding.model.api.GeneratedType; import org.opendaylight.mdsal.binding.model.api.TypeComment; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; @@ -21,8 +22,8 @@ public final class CodegenGeneratedTypeBuilder extends AbstractGeneratedTypeBuil private String moduleName; private SchemaPath schemaPath; - public CodegenGeneratedTypeBuilder(final String packageName, final String name) { - super(packageName, name); + public CodegenGeneratedTypeBuilder(final JavaTypeName identifier) { + super(identifier); setAbstract(true); } @@ -82,8 +83,8 @@ public final class CodegenGeneratedTypeBuilder extends AbstractGeneratedTypeBuil } @Override - AbstractEnumerationBuilder newEnumerationBuilder(final String packageName, final String name) { - return new CodegenEnumerationBuilder(packageName, name); + AbstractEnumerationBuilder newEnumerationBuilder(final JavaTypeName identifier) { + return new CodegenEnumerationBuilder(identifier); } @Override diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeEnumerationBuilder.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeEnumerationBuilder.java index 82920ce2e7..46ddfc72cc 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeEnumerationBuilder.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeEnumerationBuilder.java @@ -11,14 +11,15 @@ import java.util.Optional; import org.opendaylight.mdsal.binding.model.api.Enumeration; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.api.TypeComment; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; public final class RuntimeEnumerationBuilder extends AbstractEnumerationBuilder { - public RuntimeEnumerationBuilder(final String packageName, final String name) { - super(packageName, name); + public RuntimeEnumerationBuilder(final JavaTypeName identifier) { + super(identifier); } @Override diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeGeneratedTOBuilder.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeGeneratedTOBuilder.java index a7a8e9d35d..4136a60884 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeGeneratedTOBuilder.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeGeneratedTOBuilder.java @@ -10,14 +10,14 @@ package org.opendaylight.mdsal.binding.model.util.generated.type.builder; import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.Restrictions; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedPropertyBuilder; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; public final class RuntimeGeneratedTOBuilder extends AbstractGeneratedTOBuilder { - - public RuntimeGeneratedTOBuilder(final String packageName, final String name) { - super(packageName, name); + public RuntimeGeneratedTOBuilder(final JavaTypeName identifier) { + super(identifier); } @Override @@ -56,8 +56,8 @@ public final class RuntimeGeneratedTOBuilder extends AbstractGeneratedTOBuilder } @Override - AbstractEnumerationBuilder newEnumerationBuilder(final String packageName, final String name) { - return new RuntimeEnumerationBuilder(packageName, name); + AbstractEnumerationBuilder newEnumerationBuilder(final JavaTypeName identifier) { + return new RuntimeEnumerationBuilder(identifier); } private static final class GTO extends AbstractGeneratedTransferObject { diff --git a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeGeneratedTypeBuilder.java b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeGeneratedTypeBuilder.java index 51bbcbc519..27d3ff27c0 100644 --- a/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeGeneratedTypeBuilder.java +++ b/binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeGeneratedTypeBuilder.java @@ -9,6 +9,7 @@ package org.opendaylight.mdsal.binding.model.util.generated.type.builder; import org.opendaylight.mdsal.binding.model.api.GeneratedType; import org.opendaylight.mdsal.binding.model.api.TypeComment; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; @@ -16,8 +17,8 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; public final class RuntimeGeneratedTypeBuilder extends AbstractGeneratedTypeBuilder implements GeneratedTypeBuilder { - public RuntimeGeneratedTypeBuilder(final String packageName, final String name) { - super(packageName, name); + public RuntimeGeneratedTypeBuilder(final JavaTypeName identifier) { + super(identifier); setAbstract(true); } @@ -47,8 +48,8 @@ public final class RuntimeGeneratedTypeBuilder extends AbstractGeneratedTypeBuil } @Override - AbstractEnumerationBuilder newEnumerationBuilder(final String packageName, final String name) { - return new RuntimeEnumerationBuilder(packageName, name); + AbstractEnumerationBuilder newEnumerationBuilder(final JavaTypeName identifier) { + return new RuntimeEnumerationBuilder(identifier); } @Override diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/AbstractBaseTypeTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/AbstractBaseTypeTest.java deleted file mode 100644 index ec433ee07b..0000000000 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/AbstractBaseTypeTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.mdsal.binding.model.util; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -public class AbstractBaseTypeTest { - - @Rule - public ExpectedException expException = ExpectedException.none(); - - @Test - public void testgetFullyQualifiedName() { - AbstractBaseType baseType = new AbstractBaseType("", ""); - assertTrue(baseType.getFullyQualifiedName().isEmpty()); - } - - @Test - public void testCreateAbstractBaseTypeWithNullPackagename() { - expException.expect(IllegalArgumentException.class); - expException.expectMessage("Package Name for Generated Type cannot be null!"); - new AbstractBaseType(null, "Test"); - } - - @Test - public void testCreateAbstractBaseTypeWithNullTypeName() { - expException.expect(IllegalArgumentException.class); - expException.expectMessage("Name of Generated Type cannot be null!"); - new AbstractBaseType("org.opendaylight.yangtools.test", null); - } - - @Test - public void testHashCode() { - AbstractBaseType baseType1 = new AbstractBaseType("org.opendaylight.yangtools.test", "Test"); - AbstractBaseType baseType2 = new AbstractBaseType("org.opendaylight.yangtools.test", "Test2"); - assertNotEquals(baseType1.hashCode(), baseType2.hashCode()); - } - - @Test - public void testToString() { - AbstractBaseType baseType = new AbstractBaseType("org.opendaylight.yangtools.test", "Test"); - assertTrue(baseType.toString().contains("org.opendaylight.yangtools.test.Test")); - baseType = new AbstractBaseType("", "Test"); - assertTrue(baseType.toString().contains("Test")); - } - - @Test - public void testEquals() { - AbstractBaseType baseType1 = new AbstractBaseType("org.opendaylight.yangtools.test", "Test"); - AbstractBaseType baseType2 = new AbstractBaseType("org.opendaylight.yangtools.test", "Test2"); - AbstractBaseType baseType3 = null; - AbstractBaseType baseType4 = new AbstractBaseType("org.opendaylight.yangtools.test", "Test"); - AbstractBaseType baseType5 = new AbstractBaseType("org.opendaylight.yangtools.test1", "Test"); - - assertFalse(baseType1.equals(baseType2)); - assertFalse(baseType1.equals(baseType3)); - assertTrue(baseType1.equals(baseType4)); - assertFalse(baseType1.equals(baseType5)); - assertFalse(baseType1.equals(null)); - } -} diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/BindingGeneratorUtilTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/BindingGeneratorUtilTest.java index 0112eb0bb1..d280336187 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/BindingGeneratorUtilTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/BindingGeneratorUtilTest.java @@ -29,6 +29,7 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.opendaylight.mdsal.binding.model.api.AccessModifier; import org.opendaylight.mdsal.binding.model.api.Restrictions; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.MethodSignatureBuilder; import org.opendaylight.mdsal.binding.model.util.generated.type.builder.CodegenGeneratedTypeBuilder; @@ -122,16 +123,19 @@ public class BindingGeneratorUtilTest { assertNotNull(restriction); // test method computeDefaultSUID - GeneratedTypeBuilder genTypeBuilder = new CodegenGeneratedTypeBuilder("org.opendaylight.yangtools.test", "TestType"); + GeneratedTypeBuilder genTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "TestType")); genTypeBuilder.addMethod("testMethod"); genTypeBuilder.addAnnotation("org.opendaylight.yangtools.test.annotation", "AnnotationTest"); genTypeBuilder.addEnclosingTransferObject("testObject"); genTypeBuilder.addProperty("newProp"); - GeneratedTypeBuilder genType = new CodegenGeneratedTypeBuilder("org.opendaylight.yangtools.test", "Type2"); + GeneratedTypeBuilder genType = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Type2")); genTypeBuilder.addImplementsType(genType); long computedSUID = BindingGeneratorUtil.computeDefaultSUID(genTypeBuilder); - GeneratedTypeBuilder genTypeBuilder2 = new CodegenGeneratedTypeBuilder("org.opendaylight.yangtools.test2", "TestType2"); + GeneratedTypeBuilder genTypeBuilder2 = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test2", "TestType2")); long computedSUID2 = BindingGeneratorUtil.computeDefaultSUID(genTypeBuilder2); assertNotEquals(computedSUID, computedSUID2); @@ -286,7 +290,8 @@ public class BindingGeneratorUtilTest { @Test public void computeDefaultSUIDTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); MethodSignatureBuilder method = generatedTypeBuilder.addMethod("myMethodName"); method.setAccessModifier(AccessModifier.PUBLIC); diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/ReferencedTypeImplTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/ReferencedTypeImplTest.java index 65adcb7a3e..5105bb5744 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/ReferencedTypeImplTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/ReferencedTypeImplTest.java @@ -11,18 +11,21 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.Test; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; public class ReferencedTypeImplTest { @Test public void testCreateNewReferencedType() { - ReferencedTypeImpl refType = new ReferencedTypeImpl("org.opendaylight.yangtools.test", "RefTypeTest"); + ReferencedTypeImpl refType = new ReferencedTypeImpl( + JavaTypeName.create("org.opendaylight.yangtools.test", "RefTypeTest")); assertEquals("RefTypeTest", refType.getName()); } @Test public void testToStringMethod() { - ReferencedTypeImpl refType = new ReferencedTypeImpl("org.opendaylight.yangtools.test", "RefTypeTest"); + ReferencedTypeImpl refType = new ReferencedTypeImpl( + JavaTypeName.create("org.opendaylight.yangtools.test", "RefTypeTest")); assertTrue(refType.toString().contains("RefTypeTest")); } } diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/TypeNameTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/TypeNameTest.java new file mode 100644 index 0000000000..ed42b775e4 --- /dev/null +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/TypeNameTest.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.model.util; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; + +public class TypeNameTest { + + @Rule + public ExpectedException expException = ExpectedException.none(); + + @Test + public void testHashCode() { + JavaTypeName baseType1 = JavaTypeName.create("org.opendaylight.yangtools.test", "Test"); + JavaTypeName baseType2 = JavaTypeName.create("org.opendaylight.yangtools.test", "Test2"); + assertNotEquals(baseType1.hashCode(), baseType2.hashCode()); + } + + @Test + public void testToString() { + JavaTypeName baseType = JavaTypeName.create("org.opendaylight.yangtools.test", "Test"); + assertTrue(baseType.toString().contains("org.opendaylight.yangtools.test.Test")); + baseType = JavaTypeName.create(byte[].class); + assertTrue(baseType.toString().contains("byte[]")); + } + + @Test + public void testEquals() { + JavaTypeName baseType1 = JavaTypeName.create("org.opendaylight.yangtools.test", "Test"); + JavaTypeName baseType2 = JavaTypeName.create("org.opendaylight.yangtools.test", "Test2"); + JavaTypeName baseType3 = null; + JavaTypeName baseType4 = JavaTypeName.create("org.opendaylight.yangtools.test", "Test"); + JavaTypeName baseType5 = JavaTypeName.create("org.opendaylight.yangtools.test1", "Test"); + + assertFalse(baseType1.equals(baseType2)); + assertFalse(baseType1.equals(baseType3)); + assertTrue(baseType1.equals(baseType4)); + assertFalse(baseType1.equals(baseType5)); + assertFalse(baseType1.equals(null)); + } +} diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/TypesTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/TypesTest.java index 7e9e87cacf..376c7a1ade 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/TypesTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/TypesTest.java @@ -14,6 +14,7 @@ import org.junit.Test; import org.opendaylight.mdsal.binding.model.api.ConcreteType; import org.opendaylight.mdsal.binding.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.WildcardType; public class TypesTest { @@ -27,37 +28,33 @@ public class TypesTest { @Test public void testPrimitiveType() { - final Type primitiveType = Types.primitiveType("newType", null); - assertEquals("newType", primitiveType.getName()); - assertNotNull(primitiveType); + final Type primitiveType = Types.typeForClass(String[].class); + assertEquals("String[]", primitiveType.getName()); } @Test public void testMapTypeFor() { final ParameterizedType mapType = Types.mapTypeFor(null, null); assertEquals("Map", mapType.getName()); - assertNotNull(mapType); } @Test public void testSetTypeFor() { final ParameterizedType setType = Types.setTypeFor(null); assertEquals("Set", setType.getName()); - assertNotNull(setType); } @Test public void testListTypeFor() { final ParameterizedType listType = Types.listTypeFor(null); assertEquals("List", listType.getName()); - assertNotNull(listType); } @Test public void testWildcardTypeFor() { - final WildcardType wildcardType = Types.wildcardTypeFor("org.opendaylight.yangtools.test", "WildcardTypeTest"); + final WildcardType wildcardType = Types.wildcardTypeFor(JavaTypeName.create("org.opendaylight.yangtools.test", + "WildcardTypeTest")); assertEquals("WildcardTypeTest", wildcardType.getName()); - assertNotNull(wildcardType); } @Test diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTypeBuilderTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTypeBuilderTest.java index 3bc0e0ff9b..713c6667cc 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTypeBuilderTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTypeBuilderTest.java @@ -8,22 +8,24 @@ package org.opendaylight.mdsal.binding.model.util.generated.type.builder; import java.io.Serializable; - import org.junit.Test; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.util.Types; public class AbstractGeneratedTypeBuilderTest { @Test(expected = IllegalArgumentException.class) public void addPropertyIllegalArgumentTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); generatedTypeBuilder.addProperty(null); } @Test(expected = IllegalArgumentException.class) public void addPropertyIllegalArgumentTest2() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); generatedTypeBuilder.addProperty("myName"); generatedTypeBuilder.addProperty("myName"); @@ -31,15 +33,19 @@ public class AbstractGeneratedTypeBuilderTest { @Test(expected = IllegalArgumentException.class) public void addEnclosingTransferObjectArgumentTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); - generatedTypeBuilder.addEnclosingTransferObject(new CodegenGeneratedTOBuilder("my.package", "myName")); - generatedTypeBuilder.addEnclosingTransferObject(new CodegenGeneratedTOBuilder("my.package", "myName")); + generatedTypeBuilder.addEnclosingTransferObject(new CodegenGeneratedTOBuilder( + JavaTypeName.create("my.package", "myName"))); + generatedTypeBuilder.addEnclosingTransferObject(new CodegenGeneratedTOBuilder( + JavaTypeName.create("my.package", "myName"))); } @Test(expected = IllegalArgumentException.class) public void addEnclosingTransferObjectArgumentTest2() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); generatedTypeBuilder.addEnclosingTransferObject("myName"); generatedTypeBuilder.addEnclosingTransferObject("myName"); @@ -47,7 +53,8 @@ public class AbstractGeneratedTypeBuilderTest { @Test(expected = IllegalArgumentException.class) public void addImplementsTypeIllegalArgumentTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); generatedTypeBuilder.addImplementsType(Types.typeForClass(Serializable.class)); generatedTypeBuilder.addImplementsType(Types.typeForClass(Serializable.class)); @@ -55,7 +62,8 @@ public class AbstractGeneratedTypeBuilderTest { @Test(expected = IllegalArgumentException.class) public void addConstantIllegalArgumentTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); generatedTypeBuilder.addConstant(Types.STRING, "myName", "Value"); generatedTypeBuilder.addConstant(Types.BOOLEAN, "myName", true); @@ -63,7 +71,8 @@ public class AbstractGeneratedTypeBuilderTest { @Test(expected = IllegalArgumentException.class) public void addAnnotationIllegalArgumentTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); generatedTypeBuilder.addAnnotation("my.package", "myName"); generatedTypeBuilder.addAnnotation("my.package", "myName"); @@ -71,10 +80,10 @@ public class AbstractGeneratedTypeBuilderTest { @Test(expected = IllegalArgumentException.class) public void addEnumerationIllegalArgumentTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); generatedTypeBuilder.addEnumeration("myName"); generatedTypeBuilder.addEnumeration("myName"); } - } diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractTypeMemberTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractTypeMemberTest.java index 820aac7b18..8bb1824154 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractTypeMemberTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractTypeMemberTest.java @@ -14,14 +14,17 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; import org.opendaylight.mdsal.binding.model.api.MethodSignature; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; public class AbstractTypeMemberTest { @Test public void testMethodsForAbstractTypeMemberBuilder() { final MethodSignatureBuilderImpl methodSignatureBuilderImpl = new MethodSignatureBuilderImpl("TestProperty"); - final CodegenGeneratedTypeBuilder typeBuilderImpl = new CodegenGeneratedTypeBuilder("org.opendaylight.yangtools.test", "TestType"); - final CodegenGeneratedTypeBuilder typeBuilderImpl2 = new CodegenGeneratedTypeBuilder("org.opendaylight.yangtools.test", "TestType2"); + final CodegenGeneratedTypeBuilder typeBuilderImpl = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "TestType")); + final CodegenGeneratedTypeBuilder typeBuilderImpl2 = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "TestType2")); methodSignatureBuilderImpl.setComment("test comment"); methodSignatureBuilderImpl.setFinal(true); methodSignatureBuilderImpl.setStatic(true); diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AnnotationBuilderTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AnnotationBuilderTest.java index ca372df4c3..a68d7cfa55 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AnnotationBuilderTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AnnotationBuilderTest.java @@ -20,6 +20,7 @@ import org.opendaylight.mdsal.binding.model.api.AnnotationType; import org.opendaylight.mdsal.binding.model.api.AnnotationType.Parameter; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.GeneratedType; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.AnnotationTypeBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedPropertyBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder; @@ -31,8 +32,8 @@ public class AnnotationBuilderTest { @Test public void generatedTypeAnnotationTest() { - final GeneratedTypeBuilder genTypeBuilder = new CodegenGeneratedTypeBuilder("org.opendaylight.controller", - "AnnotInterface"); + final GeneratedTypeBuilder genTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.controller", "AnnotInterface")); genTypeBuilder.addAnnotation("javax.management", "MXBean"); final AnnotationTypeBuilder annotDesc = genTypeBuilder.addAnnotation("javax.management", "Description"); @@ -67,8 +68,8 @@ public class AnnotationBuilderTest { @Test public void methodSignatureAnnotationTest() { - final GeneratedTypeBuilder genTypeBuilder = new CodegenGeneratedTypeBuilder("org.opendaylight.controller", - "TransferObject"); + final GeneratedTypeBuilder genTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.controller", "TransferObject")); final MethodSignatureBuilder methodBuilder = genTypeBuilder.addMethod("simpleMethod"); methodBuilder.setReturnType(Types.typeForClass(Integer.class)); @@ -81,7 +82,7 @@ public class AnnotationBuilderTest { annotManAttr.addParameter("persistPolicy", "\"OnUpdate\""); final AnnotationTypeBuilder annotManProp = methodBuilder.addAnnotation( - "org.springframework.jmx.export.annotation", "ManagedOperation"); + "org.springframework.jmx.export.annotation", "ManagedOperation"); final List typeValues = new ArrayList<>(); typeValues.add("\"val1\""); @@ -129,8 +130,8 @@ public class AnnotationBuilderTest { @Test public void generatedPropertyAnnotationTest() { - final GeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.controller", - "AnnotInterface"); + final GeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.controller", "AnnotInterface")); final GeneratedPropertyBuilder propertyBuilder = genTOBuilder.addProperty("simpleProperty"); propertyBuilder.setReturnType(Types.typeForClass(Integer.class)); @@ -191,8 +192,8 @@ public class AnnotationBuilderTest { @Test public void generatedTransfeObjectAnnotationTest() { - final GeneratedTOBuilder genTypeBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.controller", - "AnnotClassCache"); + final GeneratedTOBuilder genTypeBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.controller", "AnnotClassCache")); genTypeBuilder.addAnnotation("javax.management", "MBean"); final AnnotationTypeBuilder annotNotify = genTypeBuilder.addAnnotation("javax.management", "NotificationInfo"); @@ -238,12 +239,13 @@ public class AnnotationBuilderTest { @Test public void annotationTypeBuilderAddAnnotationTest() { - AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl("my.package", "MyName"); + AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package", "MyName")); assertNull(annotationTypeBuilder.addAnnotation("my.package", null)); assertNull(annotationTypeBuilder.addAnnotation(null, "MyName")); - assertNotNull(annotationTypeBuilder.addAnnotation("", "")); + assertNotNull(annotationTypeBuilder.addAnnotation("java.lang", "Deprecated")); assertNotNull(annotationTypeBuilder.addAnnotation("my.package2", "MyName2")); assertNull(annotationTypeBuilder.addAnnotation("my.package2", "MyName2")); @@ -259,10 +261,14 @@ public class AnnotationBuilderTest { @Test public void annotationTypeBuilderEqualsTest() { - AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl("my.package", "MyName"); - AnnotationTypeBuilder annotationTypeBuilder2 = new AnnotationTypeBuilderImpl("my.package2", "MyName"); - AnnotationTypeBuilder annotationTypeBuilder3 = new AnnotationTypeBuilderImpl("my.package", "MyName2"); - AnnotationTypeBuilder annotationTypeBuilder4 = new AnnotationTypeBuilderImpl("my.package", "MyName"); + AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package", "MyName")); + AnnotationTypeBuilder annotationTypeBuilder2 = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package2", "MyName")); + AnnotationTypeBuilder annotationTypeBuilder3 = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package", "MyName2")); + AnnotationTypeBuilder annotationTypeBuilder4 = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package", "MyName")); assertFalse(annotationTypeBuilder.equals(null)); assertFalse(annotationTypeBuilder.equals(new Object())); @@ -306,10 +312,14 @@ public class AnnotationBuilderTest { @Test public void annotationTypeBuilderHashCodeTest() { - AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl("my.package", "MyName"); - AnnotationTypeBuilder annotationTypeBuilder2 = new AnnotationTypeBuilderImpl("my.package2", "MyName"); - AnnotationTypeBuilder annotationTypeBuilder3 = new AnnotationTypeBuilderImpl("my.package", "MyName2"); - AnnotationTypeBuilder annotationTypeBuilder4 = new AnnotationTypeBuilderImpl("my.package", "MyName"); + AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package", "MyName")); + AnnotationTypeBuilder annotationTypeBuilder2 = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package2", "MyName")); + AnnotationTypeBuilder annotationTypeBuilder3 = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package", "MyName2")); + AnnotationTypeBuilder annotationTypeBuilder4 = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package", "MyName")); assertFalse(annotationTypeBuilder.hashCode() == annotationTypeBuilder2.hashCode()); assertFalse(annotationTypeBuilder.hashCode() == annotationTypeBuilder3.hashCode()); @@ -347,7 +357,8 @@ public class AnnotationBuilderTest { @Test public void annotationTypeBuilderAddParameterTest() { - AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl("my.package", "MyName"); + AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package", "MyName")); assertFalse(annotationTypeBuilder.addParameter(null, "myValue")); assertFalse(annotationTypeBuilder.addParameter("myName", null)); @@ -389,7 +400,8 @@ public class AnnotationBuilderTest { @Test public void annotationTypeBuilderToStringTest() { - AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl("my.package", "MyAnnotationName"); + AnnotationTypeBuilder annotationTypeBuilder = new AnnotationTypeBuilderImpl( + JavaTypeName.create("my.package", "MyAnnotationName")); annotationTypeBuilder.addAnnotation("my.package", "MySubAnnotationName"); annotationTypeBuilder.addParameter("MyParameter", "myValue"); @@ -407,7 +419,8 @@ public class AnnotationBuilderTest { } public void testAddAnnotation() { - final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest"); + final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest")); annotBuilderImpl.addAnnotation("org.opedaylight.yangtools.test.v1", "AnnotationTest2"); annotBuilderImpl.addAnnotation(null, "AnnotationTest2"); assertFalse(annotBuilderImpl.build().getAnnotations().isEmpty()); @@ -415,7 +428,8 @@ public class AnnotationBuilderTest { @Test public void testAddParameterMethod() { - final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest"); + final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest")); annotBuilderImpl.addParameter("testParam", "test value"); annotBuilderImpl.addParameter(null, "test value"); final AnnotationType annotType = annotBuilderImpl.build(); @@ -424,7 +438,8 @@ public class AnnotationBuilderTest { @Test public void testAddParametersMethod() { - final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest"); + final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest")); final List values = new ArrayList<>(); values.add("test1"); @@ -443,15 +458,19 @@ public class AnnotationBuilderTest { @Test public void testHashCode() { - final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest"); - final AnnotationTypeBuilderImpl annotBuilderImpl2 = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest2"); + final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest")); + final AnnotationTypeBuilderImpl annotBuilderImpl2 = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest2")); assertFalse(annotBuilderImpl.hashCode() == annotBuilderImpl2.hashCode()); } @Test public void testEquals() { - final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest"); - final AnnotationTypeBuilderImpl annotBuilderImpl2 = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest"); + final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest")); + final AnnotationTypeBuilderImpl annotBuilderImpl2 = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest")); final AnnotationTypeBuilderImpl annotBuilderImpl3 = annotBuilderImpl2; assertTrue(annotBuilderImpl.equals(annotBuilderImpl2)); @@ -462,17 +481,20 @@ public class AnnotationBuilderTest { @Test public void testToString() { - final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest"); + final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest")); assertNotNull(annotBuilderImpl.toString()); } @Test public void testMethodsForAnnotationTypeImpl() { - final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest"); + final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest")); annotBuilderImpl.addParameter("testParam", "test value"); final AnnotationType annotationType = annotBuilderImpl.build(); - final AnnotationTypeBuilderImpl annotBuilderImpl2 = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest"); + final AnnotationTypeBuilderImpl annotBuilderImpl2 = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest")); final AnnotationType annotationType2 = annotBuilderImpl2.build(); assertTrue(annotationType.containsParameters()); @@ -492,7 +514,8 @@ public class AnnotationBuilderTest { @Test public void testMethodsForParameterImpl() { - final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl("org.opedaylight.yangtools.test", "AnnotationTest"); + final AnnotationTypeBuilderImpl annotBuilderImpl = new AnnotationTypeBuilderImpl( + JavaTypeName.create("org.opedaylight.yangtools.test", "AnnotationTest")); annotBuilderImpl.addParameter("testParam", "test value"); annotBuilderImpl.addParameter("testParam", "test value"); annotBuilderImpl.addParameter("", "test value"); diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/ConstantImplTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/ConstantImplTest.java index c6604540d4..4f16e951b6 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/ConstantImplTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/ConstantImplTest.java @@ -13,15 +13,16 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import org.junit.Test; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; public class ConstantImplTest { @Test public void testMethodsOfConstantImpl() { - final CodegenGeneratedTypeBuilder definingType = new CodegenGeneratedTypeBuilder("org.opendaylight.yangtools.test", - "DefiningType"); - final CodegenGeneratedTypeBuilder type = new CodegenGeneratedTypeBuilder("org.opendaylight.yangtools.test.v1", - "BaseType"); + final CodegenGeneratedTypeBuilder definingType = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "DefiningType")); + final CodegenGeneratedTypeBuilder type = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test.v1", "BaseType")); final ConstantImpl constImpl = new ConstantImpl(definingType, type, "IpAddress", "127.0.0.1"); final ConstantImpl constImpl2 = new ConstantImpl(definingType, type, "IpAddress", "127.0.0.1"); final ConstantImpl constImpl3 = new ConstantImpl(definingType, type, "IpAddress", "127.0.0.0"); diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/EnumerationBuilderImplTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/EnumerationBuilderImplTest.java index 2d40cf93d2..80125e8521 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/EnumerationBuilderImplTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/EnumerationBuilderImplTest.java @@ -17,6 +17,7 @@ import java.util.Collections; import org.junit.Before; import org.junit.Test; import org.opendaylight.mdsal.binding.model.api.Enumeration; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; @@ -43,23 +44,31 @@ public class EnumerationBuilderImplTest { @Before public void setup() { - enumerationBuilder = new CodegenEnumerationBuilder(packageName, name); + enumerationBuilder = new CodegenEnumerationBuilder(JavaTypeName.create(packageName, name)); enumerationBuilder.setDescription(DESCRIPTION); enumerationBuilder.setModuleName(moduleName); enumerationBuilder.setReference(reference); enumerationBuilder.setSchemaPath(SchemaPath.create(true, qName)); enumerationBuilder.addValue(valueName, valueName, value, Status.CURRENT, valueDescription, null); enumerationBuilder.addAnnotation(packageName, "TestAnnotation"); - enumerationBuilderSame = new CodegenEnumerationBuilder(packageName, name); - enumerationBuilderOtherName = new CodegenEnumerationBuilder(packageName, "SomeOtherName"); - enumerationBuilderOtherPackage = new CodegenEnumerationBuilder("org.opendaylight.other", name); + enumerationBuilderSame = new CodegenEnumerationBuilder(JavaTypeName.create(packageName, name)); + enumerationBuilderOtherName = new CodegenEnumerationBuilder(JavaTypeName.create(packageName, "SomeOtherName")); + enumerationBuilderOtherPackage = new CodegenEnumerationBuilder(JavaTypeName.create("org.opendaylight.other", name)); enumeration = enumerationBuilder.toInstance(enumerationBuilder); } - @Test + @Test(expected = IllegalArgumentException.class) public void testAddNullAnnotation() { - assertNull(enumerationBuilder.addAnnotation(null, null)); + assertNull(enumerationBuilder.addAnnotation(null)); + } + + @Test(expected = NullPointerException.class) + public void testAddNullAnnotationPackage() { assertNull(enumerationBuilder.addAnnotation(null, "test")); + } + + @Test(expected = NullPointerException.class) + public void testAddNullAnnotationName() { assertNull(enumerationBuilder.addAnnotation(packageName, null)); } @@ -112,7 +121,8 @@ public class EnumerationBuilderImplTest { final Enumeration enumerationSame = enumerationBuilderSame.toInstance(enumerationBuilderSame); assertEquals(enumeration, enumerationSame); - final CodegenEnumerationBuilder enumerationBuilderSame1 = new CodegenEnumerationBuilder(packageName, name); + final CodegenEnumerationBuilder enumerationBuilderSame1 = new CodegenEnumerationBuilder( + JavaTypeName.create(packageName, name)); final Enumeration enumerationSame1 = enumerationBuilderSame1.toInstance(enumerationBuilderSame1); enumerationBuilderSame1.addValue(valueName, valueName, 14, Status.CURRENT, valueDescription, null); // Enums are equal thanks to same package name and local name @@ -125,8 +135,8 @@ public class EnumerationBuilderImplTest { "public enum " + name + " {\n" + "\t TestValue " + "(12 );\n" + "}"; - final String s = "Enumeration [packageName="+packageName+", definingType="+packageName+"."+name+", name="+name+ - ", values=[EnumPair [name=TestValue, mappedName=TestValue, value=12]]]"; + final String s = "Enumeration [packageName=" + packageName + ", definingType=" + packageName + "." + name + + ", name=" + name + ", values=[EnumPair [name=TestValue, mappedName=TestValue, value=12]]]"; assertEquals(s, enumeration.toString()); assertEquals(formattedString, enumeration.toFormattedString()); diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedPropertyImplTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedPropertyImplTest.java index b0e3b14aec..5c7180dbf3 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedPropertyImplTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedPropertyImplTest.java @@ -15,6 +15,7 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; import org.opendaylight.mdsal.binding.model.api.AccessModifier; import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.util.Types; public class GeneratedPropertyImplTest { @@ -30,8 +31,8 @@ public class GeneratedPropertyImplTest { generatedPropertyBuilderImpl.setAccessModifier(AccessModifier.PUBLIC); generatedPropertyBuilderImpl.setReturnType(Types.BOOLEAN); - GeneratedProperty instance = generatedPropertyBuilderImpl.toInstance(new CodegenGeneratedTypeBuilder("my.package", - "myTypeName").build()); + GeneratedProperty instance = generatedPropertyBuilderImpl.toInstance(new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "myTypeName")).build()); assertNotNull(instance); @@ -43,10 +44,9 @@ public class GeneratedPropertyImplTest { assertEquals(AccessModifier.PUBLIC, instance.getAccessModifier()); assertEquals(Types.BOOLEAN, instance.getReturnType()); - assertEquals( - "GeneratedPropertyImpl [name=myPropertyName, annotations=[], comment=myComment, parent=my.package.myTypeName, returnType=Type (java.lang.Boolean), isFinal=true, isReadOnly=false, modifier=PUBLIC]", - instance.toString()); - + assertEquals("GeneratedPropertyImpl [name=myPropertyName, annotations=[], comment=myComment, " + + "parent=my.package.myTypeName, returnType=Type (java.lang.Boolean), isFinal=true, isReadOnly=false, " + + "modifier=PUBLIC]", instance.toString()); } @Test diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTOBuilderImplTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTOBuilderImplTest.java index fa217f39c7..839a1162fc 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTOBuilderImplTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTOBuilderImplTest.java @@ -16,6 +16,7 @@ import java.util.Optional; import org.junit.Test; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.Restrictions; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.MethodSignatureBuilder; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; @@ -26,14 +27,17 @@ public class GeneratedTOBuilderImplTest { @Test public void testCreateNewInstance() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); assertNotNull(genTOBuilder); } @Test public void testSetExtendsType() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); - final CodegenGeneratedTOBuilder extendedTypeBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "ExtendedType"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); + final CodegenGeneratedTOBuilder extendedTypeBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "ExtendedType")); final GeneratedTransferObject extendedType = extendedTypeBuilder.build(); genTOBuilder.setExtendsType(extendedType); final GeneratedTransferObject genTO = genTOBuilder.build(); @@ -43,7 +47,8 @@ public class GeneratedTOBuilderImplTest { @Test public void testAddMethod() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); final MethodSignatureBuilder methodSignatureBuilder = genTOBuilder.addMethod("testMethod"); assertEquals(methodSignatureBuilder, genTOBuilder.getMethodDefinitions().get(0)); assertEquals("testMethod", genTOBuilder.getMethodDefinitions().get(0).getName()); @@ -51,7 +56,8 @@ public class GeneratedTOBuilderImplTest { @Test public void testAddEqualsIdentity() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); final GeneratedPropertyBuilderImpl propertyBuilder = new GeneratedPropertyBuilderImpl("testProperty"); genTOBuilder.addEqualsIdentity(propertyBuilder); @@ -62,7 +68,8 @@ public class GeneratedTOBuilderImplTest { @Test public void testAddHashIdentity() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); final GeneratedPropertyBuilderImpl propertyBuilder = new GeneratedPropertyBuilderImpl("testProperty"); genTOBuilder.addHashIdentity(propertyBuilder); @@ -73,7 +80,8 @@ public class GeneratedTOBuilderImplTest { @Test public void testAddToStringProperty() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); final GeneratedPropertyBuilderImpl propertyBuilder = new GeneratedPropertyBuilderImpl("testProperty"); genTOBuilder.addToStringProperty(propertyBuilder); @@ -84,7 +92,8 @@ public class GeneratedTOBuilderImplTest { @Test public void testSetRestrictions() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); final Restrictions restrictions = new Restrictions() { @Override @@ -115,7 +124,8 @@ public class GeneratedTOBuilderImplTest { @Test public void testSetSUID() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); final GeneratedPropertyBuilderImpl propertyBuilder = new GeneratedPropertyBuilderImpl("testProperty"); genTOBuilder.setSUID(propertyBuilder); @@ -125,13 +135,15 @@ public class GeneratedTOBuilderImplTest { @Test public void testToStringMethod() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); assertNotNull(genTOBuilder.toString()); } @Test public void testSetterMethods() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); genTOBuilder.setTypedef(true); genTOBuilder.setIsUnion(true); genTOBuilder.setIsUnionBuilder(true); @@ -153,7 +165,8 @@ public class GeneratedTOBuilderImplTest { @Test public void testMethodsOfGeneratedTransferObjectImpl() { - final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder("org.opendaylight.yangtools.test", "Test"); + final CodegenGeneratedTOBuilder genTOBuilder = new CodegenGeneratedTOBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Test")); final GeneratedTransferObject genTO = genTOBuilder.build(); assertNotNull(genTO.toString()); diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTOBuilderTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTOBuilderTest.java index e485e8317f..c72d82cdbe 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTOBuilderTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTOBuilderTest.java @@ -13,6 +13,7 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedPropertyBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder; @@ -21,7 +22,7 @@ public class GeneratedTOBuilderTest { @Test public void testBuilder() { final GeneratedTOBuilder genTypeBuilder = new CodegenGeneratedTOBuilder( - "org.opendaylight.controller", "AnnotClassCache"); + JavaTypeName.create("org.opendaylight.controller", "AnnotClassCache")); genTypeBuilder.setSUID(genTypeBuilder.addProperty("SUID")); genTypeBuilder.addMethod("addCount"); @@ -44,7 +45,7 @@ public class GeneratedTOBuilderTest { @Test public void testToString() { final GeneratedTOBuilder genTypeBuilder = new CodegenGeneratedTOBuilder( - "org.opendaylight.controller", "AnnotClassCache"); + JavaTypeName.create("org.opendaylight.controller", "AnnotClassCache")); String toString = genTypeBuilder.toString(); assertTrue(toString.contains("GeneratedTransferObject")); } @@ -52,7 +53,7 @@ public class GeneratedTOBuilderTest { @Test public void testTransferBuilderToString() { final GeneratedTOBuilder genTypeBuilder1 = new CodegenGeneratedTOBuilder( - "org.opendaylight.controller", "AnnotClassCache"); + JavaTypeName.create("org.opendaylight.controller", "AnnotClassCache")); genTypeBuilder1.setTypedef(true); GeneratedTransferObject genTO = genTypeBuilder1.build(); @@ -60,7 +61,7 @@ public class GeneratedTOBuilderTest { assertFalse(toString.contains("GeneratedTransferObject")); final GeneratedTOBuilder genTypeBuilder2 = new CodegenGeneratedTOBuilder( - "org.opendaylight.controller", "AnnotClassCache"); + JavaTypeName.create("org.opendaylight.controller", "AnnotClassCache")); genTypeBuilder2.setTypedef(false); genTO = genTypeBuilder2.build(); diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTypeBuilderTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTypeBuilderTest.java index d484fdab30..f77af510ad 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTypeBuilderTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTypeBuilderTest.java @@ -21,6 +21,7 @@ import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedType; import org.opendaylight.mdsal.binding.model.api.MethodSignature; import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedPropertyBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder; @@ -36,7 +37,8 @@ public class GeneratedTypeBuilderTest { @Test public void addConstantTest() { - GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); // assertNotNull(generatedTypeBuilder.addComment("My comment ...")); @@ -46,7 +48,7 @@ public class GeneratedTypeBuilderTest { // generatedTypeBuilder.addConstant(Types.typeForClass(String.class), // "myConstant", "myConstantValue"); Constant constant2 = generatedTypeBuilder.addConstant( - Types.primitiveType("int", BindingGeneratorUtil.getRestrictions(null)), "myIntConstant", 1); + Types.typeForClass(int.class, BindingGeneratorUtil.getRestrictions(null)), "myIntConstant", 1); Constant constant3 = new ConstantImpl(generatedTypeBuilder, Types.typeForClass(String.class), "myConstant", "myConstantValue"); @@ -101,22 +103,26 @@ public class GeneratedTypeBuilderTest { @Test(expected = IllegalArgumentException.class) public void addConstantIllegalArgumentTest() { - GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); - generatedTypeBuilder.addConstant(Types.typeForClass(String.class), null, "myConstantValue"); + new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addConstant( + Types.typeForClass(String.class), null, "myConstantValue"); } @Test(expected = IllegalArgumentException.class) public void addConstantIllegalArgumentTest2() { - GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); - generatedTypeBuilder.addConstant(null, "myConstantName", "myConstantValue"); + new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addConstant(null, "myConstantName", + "myConstantValue"); } @Test public void generatedTypeBuilderEqualsAndHashCodeTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); - CodegenGeneratedTypeBuilder generatedTypeBuilder2 = new CodegenGeneratedTypeBuilder("my.package", "MyName"); - CodegenGeneratedTypeBuilder generatedTypeBuilder3 = new CodegenGeneratedTypeBuilder("my.package", "MyName2"); - CodegenGeneratedTypeBuilder generatedTypeBuilder4 = new CodegenGeneratedTypeBuilder("my.package2", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); + CodegenGeneratedTypeBuilder generatedTypeBuilder2 = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); + CodegenGeneratedTypeBuilder generatedTypeBuilder3 = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName2")); + CodegenGeneratedTypeBuilder generatedTypeBuilder4 = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package2", "MyName")); assertFalse(generatedTypeBuilder.equals(null)); assertFalse(generatedTypeBuilder.equals(new Object())); @@ -132,7 +138,8 @@ public class GeneratedTypeBuilderTest { @Test public void addPropertyTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); GeneratedPropertyBuilder propertyBuilder = generatedTypeBuilder.addProperty("myProperty"); GeneratedPropertyBuilder propertyBuilder2 = generatedTypeBuilder.addProperty("myProperty2"); @@ -161,13 +168,13 @@ public class GeneratedTypeBuilderTest { @Test(expected = IllegalArgumentException.class) public void addMethodIllegalArgumentTest() { - GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); - generatedTypeBuilder.addMethod(null); + new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addMethod(null); } @Test public void addMethodTest() { - GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); MethodSignatureBuilder methodBuilder = generatedTypeBuilder.addMethod("myMethodName"); MethodSignatureBuilder methodBuilder2 = generatedTypeBuilder.addMethod("myMethodName2"); @@ -192,14 +199,13 @@ public class GeneratedTypeBuilderTest { @Test(expected = IllegalArgumentException.class) public void addEnumerationIllegalArgumentTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); - - generatedTypeBuilder.addEnumeration(null); + new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addEnumeration(null); } @Test public void addEnumerationTest() { - GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); EnumBuilder enumBuilder = generatedTypeBuilder.addEnumeration("myEnumName"); EnumBuilder enumBuilder2 = generatedTypeBuilder.addEnumeration("myEnumName2"); @@ -214,20 +220,20 @@ public class GeneratedTypeBuilderTest { assertTrue(enumerations.contains(enumBuilder.toInstance(instance))); assertTrue(enumerations.contains(enumBuilder2.toInstance(instance))); - assertFalse(enumerations.contains(new CodegenEnumerationBuilder("my.package", "myEnumName3").toInstance(instance))); + assertFalse(enumerations.contains(new CodegenEnumerationBuilder(JavaTypeName.create("my.package", "myEnumName3")) + .toInstance(instance))); } @Test(expected = IllegalArgumentException.class) public void addImplementsTypeIllegalArgumentTest() { - GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); - - generatedTypeBuilder.addImplementsType(null); + new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")).addImplementsType(null); } @Test public void addImplementsTypeTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); assertEquals(generatedTypeBuilder, generatedTypeBuilder.addImplementsType(Types.typeForClass(Serializable.class))); @@ -241,31 +247,29 @@ public class GeneratedTypeBuilderTest { assertTrue(implementTypes.contains(Types.typeForClass(Serializable.class))); assertTrue(implementTypes.contains(Types.typeForClass(Runnable.class))); assertFalse(implementTypes.contains(Types.typeForClass(Throwable.class))); - } @Test(expected = IllegalArgumentException.class) public void addEnclosingTransferObjectIllegalArgumentTest() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); - - generatedTypeBuilder.addEnclosingTransferObject((String) null); + new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")) + .addEnclosingTransferObject((String) null); } @Test(expected = IllegalArgumentException.class) public void addEnclosingTransferObjectIllegalArgumentTest2() { - CodegenGeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); - - generatedTypeBuilder.addEnclosingTransferObject((GeneratedTOBuilder) null); + new CodegenGeneratedTypeBuilder(JavaTypeName.create("my.package", "MyName")) + .addEnclosingTransferObject((GeneratedTOBuilder) null); } @Test public void addEnclosingTransferObjectTest() { - GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); GeneratedTOBuilder enclosingTransferObject = generatedTypeBuilder.addEnclosingTransferObject("myTOName"); GeneratedTOBuilder enclosingTransferObject2 = generatedTypeBuilder.addEnclosingTransferObject("myTOName2"); - assertEquals(generatedTypeBuilder, generatedTypeBuilder.addEnclosingTransferObject(new CodegenGeneratedTOBuilder( - generatedTypeBuilder.getFullyQualifiedName(), "myTOName3"))); + assertEquals(generatedTypeBuilder, generatedTypeBuilder.addEnclosingTransferObject( + new CodegenGeneratedTOBuilder(generatedTypeBuilder.getIdentifier().createEnclosed("myTOName3")))); assertNotNull(enclosingTransferObject); assertNotNull(enclosingTransferObject2); @@ -277,16 +281,16 @@ public class GeneratedTypeBuilderTest { assertTrue(enclosedTypes.contains(enclosingTransferObject.build())); assertTrue(enclosedTypes.contains(enclosingTransferObject2.build())); - assertTrue(enclosedTypes.contains(new CodegenGeneratedTOBuilder(generatedTypeBuilder.getFullyQualifiedName(), - "myTOName3").build())); - assertFalse(enclosedTypes.contains(new CodegenGeneratedTOBuilder(generatedTypeBuilder.getFullyQualifiedName(), - "myTOName4").build())); - + assertTrue(enclosedTypes.contains(new CodegenGeneratedTOBuilder( + generatedTypeBuilder.getIdentifier().createEnclosed("myTOName3")).build())); + assertFalse(enclosedTypes.contains(new CodegenGeneratedTOBuilder( + generatedTypeBuilder.getIdentifier().createEnclosed("myTOName4")).build())); } @Test public void generatedTypeTest() { - GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder("my.package", "MyName"); + GeneratedTypeBuilder generatedTypeBuilder = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("my.package", "MyName")); generatedTypeBuilder.setDescription("My description ..."); generatedTypeBuilder.setModuleName("myModuleName"); @@ -295,8 +299,9 @@ public class GeneratedTypeBuilderTest { assertNotNull(generatedTypeBuilder.addComment(TypeComments.javadoc("My comment..").get())); assertEquals( - "GeneratedTransferObject [packageName=my.package, name=MyName, comment=My comment.., annotations=[], implements=[], enclosedTypes=[], constants=[], enumerations=[], properties=, methods=[]]", - generatedTypeBuilder.toString()); + "GeneratedTransferObject [packageName=my.package, name=MyName, comment=My comment.., annotations=[], " + + "implements=[], enclosedTypes=[], constants=[], enumerations=[], properties=, methods=[]]", + generatedTypeBuilder.toString()); GeneratedType instance = generatedTypeBuilder.build(); diff --git a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/MethodSignatureBuilderImplTest.java b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/MethodSignatureBuilderImplTest.java index d00eff793d..044deb6216 100644 --- a/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/MethodSignatureBuilderImplTest.java +++ b/binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/MethodSignatureBuilderImplTest.java @@ -14,6 +14,7 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; import org.opendaylight.mdsal.binding.model.api.MethodSignature; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; public class MethodSignatureBuilderImplTest { @@ -34,7 +35,8 @@ public class MethodSignatureBuilderImplTest { @Test public void testAddParameterMethod() { final MethodSignatureBuilderImpl signatureBuilderImpl = new MethodSignatureBuilderImpl("testMethod"); - final CodegenGeneratedTypeBuilder ipAddressType = new CodegenGeneratedTypeBuilder("org.opendaylight.yangtools.test", "IpAddress"); + final CodegenGeneratedTypeBuilder ipAddressType = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "IpAddress")); signatureBuilderImpl.addParameter(ipAddressType, "ipAddress"); final MethodSignature methodSignature = signatureBuilderImpl.toInstance(null); assertEquals("ipAddress", methodSignature.getParameters().get(0).getName()); @@ -48,7 +50,8 @@ public class MethodSignatureBuilderImplTest { final MethodSignatureBuilderImpl signatureBuilderImpl4 = new MethodSignatureBuilderImpl(null); final MethodSignatureBuilderImpl signatureBuilderImpl5 = signatureBuilderImpl; final MethodSignatureBuilderImpl signatureBuilderImpl6 = new MethodSignatureBuilderImpl("testMethod"); - final CodegenGeneratedTypeBuilder returnType = new CodegenGeneratedTypeBuilder("org.opendaylight.yangtools.test", "Address"); + final CodegenGeneratedTypeBuilder returnType = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.yangtools.test", "Address")); signatureBuilderImpl6.setReturnType(returnType); assertEquals(signatureBuilderImpl.hashCode(), signatureBuilderImpl2.hashCode()); diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend index 9ef7618476..2168064fd8 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend @@ -29,6 +29,7 @@ import org.opendaylight.mdsal.binding.model.api.ConcreteType import org.opendaylight.mdsal.binding.model.api.GeneratedProperty import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject import org.opendaylight.mdsal.binding.model.api.GeneratedType +import org.opendaylight.mdsal.binding.model.api.JavaTypeName import org.opendaylight.mdsal.binding.model.api.MethodSignature import org.opendaylight.mdsal.binding.model.api.Type import org.opendaylight.mdsal.binding.model.api.ParameterizedType @@ -89,7 +90,7 @@ class BuilderTemplate extends BaseTemplate { new(GeneratedType genType) { super(genType) this.properties = propertiesFromMethods(createMethods) - addImport(Builder.simpleName, Builder.package.name) + addImport(Builder) } /** @@ -126,12 +127,10 @@ class BuilderTemplate extends BaseTemplate { } else if (implementedIfc.fullyQualifiedName == Augmentable.name) { for (m : Augmentable.methods) { if (m.name == GET_AUGMENTATION_METHOD_NAME) { - val fullyQualifiedName = m.returnType.name - val pkg = fullyQualifiedName.package - val name = fullyQualifiedName.name - val tmpGenTO = new CodegenGeneratedTOBuilder(pkg, name) - val refType = new ReferencedTypeImpl(pkg, name) - val generic = new ReferencedTypeImpl(type.packageName, type.name) + val identifier = JavaTypeName.create(m.returnType) + val tmpGenTO = new CodegenGeneratedTOBuilder(identifier) + val refType = new ReferencedTypeImpl(identifier) + val generic = new ReferencedTypeImpl(type.identifier) val parametrizedReturnType = Types.parameterizedTypeFor(refType, generic) tmpGenTO.addMethod(m.name).setReturnType(parametrizedReturnType) augmentField = tmpGenTO.build.methodDefinitions.first.propertyFromGetter @@ -150,28 +149,6 @@ class BuilderTemplate extends BaseTemplate { elements.get(0) } - /** - * Returns the name of the package from fullyQualifiedName. - * - * @param fullyQualifiedName string with fully qualified type name (package + type) - * @return string with the package name - */ - def private String getPackage(String fullyQualifiedName) { - val lastDotIndex = fullyQualifiedName.lastIndexOf(Constants.DOT) - return if (lastDotIndex == -1) "" else fullyQualifiedName.substring(0, lastDotIndex) - } - - /** - * Returns the name of tye type from fullyQualifiedName - * - * @param fullyQualifiedName string with fully qualified type name (package + type) - * @return string with the name of the type - */ - def private String getName(String fullyQualifiedName) { - val lastDotIndex = fullyQualifiedName.lastIndexOf(Constants.DOT) - return if (lastDotIndex == -1) fullyQualifiedName else fullyQualifiedName.substring(lastDotIndex + 1) - } - /** * Creates set of generated property instances from getter methods. * @@ -214,13 +191,13 @@ class BuilderTemplate extends BaseTemplate { } if (method.name.startsWith(prefix)) { val fieldName = method.getName().substring(prefix.length()).toFirstLower - val tmpGenTO = new CodegenGeneratedTOBuilder("foo", "foo") + val tmpGenTO = new CodegenGeneratedTOBuilder(JavaTypeName.create("foo", "foo")) tmpGenTO.addProperty(fieldName).setReturnType(method.returnType) return tmpGenTO.build.properties.first } } - override isLocalInnerClass(String importedTypePackageName) { + override isLocalInnerClass(JavaTypeName name) { // Builders do not have inner types return false; } diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorUtil.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorUtil.java index fcd5217722..3c719d15d2 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorUtil.java +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorUtil.java @@ -19,6 +19,7 @@ import org.opendaylight.mdsal.binding.model.api.Constant; import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.GeneratedType; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.MethodSignature; import org.opendaylight.mdsal.binding.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.model.api.Type; @@ -47,11 +48,11 @@ public final class GeneratorUtil { * @throws IllegalArgumentException * if genType equals null */ - static Map createImports(final GeneratedType genType) { + static Map createImports(final GeneratedType genType) { if (genType == null) { throw new IllegalArgumentException("Generated Type cannot be NULL!"); } - final Map imports = new LinkedHashMap<>(); + final Map imports = new LinkedHashMap<>(); List childGeneratedTypes = genType.getEnclosedTypes(); if (!childGeneratedTypes.isEmpty()) { @@ -124,7 +125,7 @@ public final class GeneratorUtil { * */ static void putTypeIntoImports(final GeneratedType parentGenType, final Type type, - final Map imports) { + final Map imports) { checkArgument(parentGenType != null, "Parent Generated Type parameter MUST be specified and cannot be " + "NULL!"); checkArgument(parentGenType.getName() != null, "Parent Generated Type name cannot be NULL!"); @@ -142,7 +143,7 @@ public final class GeneratorUtil { return; } if (!imports.containsKey(typeName)) { - imports.put(typeName, typePackageName); + imports.put(typeName, type.getIdentifier()); } if (type instanceof ParameterizedType) { final ParameterizedType paramType = (ParameterizedType) type; @@ -192,21 +193,18 @@ public final class GeneratorUtil { /** * Creates the map which maps the type name to package name and contains * only package names for enclosed types of genType and - * recursivelly their enclosed types. + * recursively their enclosed types. * * @param genType * JAVA Type for which is the map created * @return map of the package names for all the enclosed types and - * recursivelly their enclosed types + * recursively their enclosed types */ static Map createChildImports(final GeneratedType genType) { Map childImports = new LinkedHashMap<>(); - List childGeneratedTypes = genType.getEnclosedTypes(); - if (!childGeneratedTypes.isEmpty()) { - for (GeneratedType genTypeChild : childGeneratedTypes) { - createChildImports(genTypeChild); - childImports.put(genTypeChild.getName(), genTypeChild.getPackageName()); - } + for (GeneratedType genTypeChild : genType.getEnclosedTypes()) { + createChildImports(genTypeChild); + childImports.put(genTypeChild.getName(), genTypeChild.getPackageName()); } return childImports; } @@ -236,34 +234,23 @@ public final class GeneratorUtil { * */ static String getExplicitType(final GeneratedType parentGenType, final Type type, - final Map imports) { - + final Map imports) { checkArgument(type != null, "Type parameter MUST be specified and cannot be NULL!"); - checkArgument(type.getName() != null, "Type name cannot be NULL!"); - checkArgument(type.getPackageName() != null, "Type cannot have Package Name referenced as NULL!"); checkArgument(imports != null, "Imports Map cannot be NULL!"); - final String typePackageName = type.getPackageName(); - final String typeName = type.getName(); - final String importedPackageName = imports.get(typeName); - final StringBuilder builder; - - if (typePackageName.equals(importedPackageName)) { - builder = new StringBuilder(type.getName()); + final JavaTypeName importedType = imports.get(type.getName()); + final StringBuilder builder = new StringBuilder(); + if (type.getIdentifier().equals(importedType)) { + builder.append(type.getName()); addActualTypeParameters(builder, type, parentGenType, imports); if (builder.toString().equals("Void")) { return "void"; } } else { - builder = new StringBuilder(); - if (!typePackageName.isEmpty()) { - builder.append(typePackageName).append(Constants.DOT).append(type.getName()); - } else { - builder.append(type.getName()); - } if (type.equals(Types.voidType())) { return "void"; } + builder.append(type.getFullyQualifiedName()); addActualTypeParameters(builder, type, parentGenType, imports); } return builder.toString(); @@ -288,7 +275,7 @@ public final class GeneratorUtil { * parameters
  • else only builder
  • */ private static StringBuilder addActualTypeParameters(final StringBuilder builder, final Type type, - final GeneratedType parentGenType, final Map imports) { + final GeneratedType parentGenType, final Map imports) { if (type instanceof ParameterizedType) { final ParameterizedType pType = (ParameterizedType) type; final Type[] pTypes = pType.getActualTypeArguments(); @@ -312,7 +299,7 @@ public final class GeneratorUtil { * @return string with all actual type parameters from pTypes */ private static String getParameters(final GeneratedType parentGenType, final Type[] pTypes, - final Map availableImports) { + final Map availableImports) { if (pTypes == null || pTypes.length == 0) { return "?"; diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileTemplate.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileTemplate.java index b0d3c31644..67e2b6b4e8 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileTemplate.java +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileTemplate.java @@ -17,6 +17,7 @@ import org.opendaylight.mdsal.binding.model.api.ConcreteType; import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.GeneratedType; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.Restrictions; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.util.Types; @@ -26,7 +27,7 @@ import org.opendaylight.mdsal.binding.model.util.Types; */ class JavaFileTemplate { // Hidden to well-define operations - private final Map importMap = new HashMap<>(); + private final Map importMap = new HashMap<>(); protected final GeneratedType type; @@ -59,10 +60,9 @@ class JavaFileTemplate { return importMap.entrySet().stream() .filter(e -> isDefaultVisible(e.getValue())) .sorted((e1, e2) -> { - final int cmp = e1.getValue().compareTo(e2.getValue()); - return cmp != 0 ? cmp : e1.getKey().compareTo(e2.getKey()); + return e1.getValue().toString().compareTo(e2.getValue().toString()); }) - .map(e -> "import " + e.getValue() + "." + e.getKey() + ";\n") + .map(e -> "import " + e.getValue() + ";\n") .collect(Collectors.joining()); } @@ -75,8 +75,9 @@ class JavaFileTemplate { return importedName(Types.typeForClass(cls)); } - final void addImport(final String className, final String packageName) { - importMap.put(className, packageName); + final void addImport(final Class cls) { + final JavaTypeName name = JavaTypeName.create(cls); + importMap.put(name.simpleName(), name); } final void addImports(final JavaFileTemplate from) { @@ -84,12 +85,13 @@ class JavaFileTemplate { } // Exposed for BuilderTemplate - boolean isLocalInnerClass(final String importedTypePackageName) { - return type.getFullyQualifiedName().equals(importedTypePackageName); + boolean isLocalInnerClass(final JavaTypeName name) { + final Optional optEnc = name.immediatelyEnclosingClass(); + return optEnc.isPresent() && type.getIdentifier().equals(optEnc.get()); } - private boolean isDefaultVisible(final String prefix) { - return !hasSamePackage(prefix) || !isLocalInnerClass(prefix); + private boolean isDefaultVisible(final JavaTypeName name) { + return !hasSamePackage(name) || !isLocalInnerClass(name); } /** @@ -98,7 +100,7 @@ class JavaFileTemplate { * @param importedTypePackageName the package name of imported type * @return true if the packages are the same false otherwise */ - private boolean hasSamePackage(final String importedTypePackageName) { - return type.getPackageName().equals(importedTypePackageName); + private boolean hasSamePackage(final JavaTypeName name) { + return type.getPackageName().equals(name.packageName()); } } diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend index 3c7444e527..8ec3b58409 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend @@ -11,6 +11,7 @@ import static org.opendaylight.mdsal.binding.model.util.Types.BOOLEAN; import static org.opendaylight.mdsal.binding.model.util.Types.getOuterClassName; import com.google.common.base.Preconditions; +import com.google.common.io.BaseEncoding import java.beans.ConstructorProperties import org.opendaylight.mdsal.binding.model.api.GeneratedProperty import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject @@ -30,7 +31,7 @@ class UnionTemplate extends ClassTemplate { new(GeneratedTransferObject genType) { super(genType) if (isBaseEncodingImportRequired) { - addImport("BaseEncoding","com.google.common.io") + addImport(BaseEncoding) } } diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGeneratorTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGeneratorTest.java index c90ccaad3b..481bd92477 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGeneratorTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGeneratorTest.java @@ -19,6 +19,7 @@ import java.util.List; import org.junit.Test; import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedType; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.MethodSignature; import org.opendaylight.mdsal.binding.model.api.Type; @@ -26,6 +27,7 @@ public class BuilderGeneratorTest { private static final String PROPERTIES_FIELD_NAME = "properties"; private static final String TEST = "test"; + private static final JavaTypeName TYPE_NAME = JavaTypeName.create(TEST, TEST); @Test public void basicTest() { @@ -108,6 +110,7 @@ public class BuilderGeneratorTest { private static GeneratedType mockGenTypeMoreMeth(final String methodeName) { final GeneratedType genType = spy(GeneratedType.class); + doReturn(TYPE_NAME).when(genType).getIdentifier(); doReturn(TEST).when(genType).getName(); doReturn(TEST).when(genType).getPackageName(); @@ -137,6 +140,7 @@ public class BuilderGeneratorTest { private static GeneratedType mockGenType(final String methodeName) { final GeneratedType genType = spy(GeneratedType.class); + doReturn(TYPE_NAME).when(genType).getIdentifier(); doReturn(TEST).when(genType).getName(); doReturn(TEST).when(genType).getPackageName(); @@ -154,8 +158,7 @@ public class BuilderGeneratorTest { final MethodSignature methSign = mock(MethodSignature.class); doReturn(methodeName).when(methSign).getName(); final Type methType = mock(Type.class); - doReturn(TEST).when(methType).getName(); - doReturn(TEST).when(methType).getPackageName(); + doReturn(TYPE_NAME).when(methType).getIdentifier(); doReturn(methType).when(methSign).getReturnType(); return methSign; } diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorUtilTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorUtilTest.java index 471d86a494..caf103f2ab 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorUtilTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorUtilTest.java @@ -27,11 +27,15 @@ import org.opendaylight.mdsal.binding.model.api.Constant; import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.GeneratedType; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.MethodSignature; import org.opendaylight.mdsal.binding.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.model.api.Type; public class GeneratorUtilTest { + private static final JavaTypeName ANNOTATION = JavaTypeName.create("tst.package", "tstAnnotationName"); + private static final JavaTypeName PARAMETERIZED_TYPE = JavaTypeName.create("tst.package", "tstParametrizedType"); + private static final JavaTypeName TYPE = JavaTypeName.create("tst.package", "tstName"); private final GeneratedType generatedType = mock(GeneratedType.class); private final GeneratedTransferObject enclosedType = mock(GeneratedTransferObject.class); @@ -48,18 +52,23 @@ public class GeneratorUtilTest { doReturn("tst.package").when(parameterizedType).getPackageName(); doReturn("tstParametrizedType").when(parameterizedType).getName(); + doReturn(PARAMETERIZED_TYPE).when(parameterizedType).getIdentifier(); doReturn("tst.package").when(type).getPackageName(); doReturn("tstName").when(type).getName(); + doReturn(TYPE).when(type).getIdentifier(); doReturn(parameterizedType).when(property).getReturnType(); doReturn(new Type[] { type }).when(parameterizedType).getActualTypeArguments(); doReturn(ImmutableList.of(property)).when(enclosedType).getProperties(); doReturn(true).when(property).isReadOnly(); doReturn("tst.package").when(enclosedType).getPackageName(); doReturn("tstName").when(enclosedType).getName(); + doReturn(TYPE).when(enclosedType).getIdentifier(); + doReturn(ImmutableList.of(parameter)).when(methodSignature).getParameters(); doReturn("tst.package").when(annotationType).getPackageName(); doReturn("tstAnnotationName").when(annotationType).getName(); + doReturn(ANNOTATION).when(annotationType).getIdentifier(); doReturn(type).when(parameter).getType(); doReturn(type).when(methodSignature).getReturnType(); @@ -103,9 +112,9 @@ public class GeneratorUtilTest { @Test public void createImportsTest() throws Exception { - final Map generated = createImports(generatedType); + final Map generated = createImports(generatedType); assertNotNull(generated); - assertTrue(generated.get("tstAnnotationName").equals("tst.package")); + assertEquals(JavaTypeName.create("tst.package", "tstAnnotationName"), generated.get("tstAnnotationName")); } @Test(expected = IllegalArgumentException.class) diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/ClassCodeGeneratorTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/ClassCodeGeneratorTest.java index bd47d5c1e8..2bda5feb50 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/ClassCodeGeneratorTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/ClassCodeGeneratorTest.java @@ -21,6 +21,7 @@ import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.GeneratedType; import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedPropertyBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder; import org.opendaylight.mdsal.binding.model.util.Types; @@ -91,7 +92,7 @@ public class ClassCodeGeneratorTest { */ @Test public void defaultConstructorNotPresentInValueTypeTest() { - final GeneratedTOBuilder toBuilder = new CodegenGeneratedTOBuilder("simple.pack", "DefCtor"); + final GeneratedTOBuilder toBuilder = new CodegenGeneratedTOBuilder(JavaTypeName.create("simple.pack", "DefCtor")); GeneratedPropertyBuilder propBuilder = toBuilder.addProperty("foo"); propBuilder.setReturnType(Types.typeForClass(String.class)); @@ -112,7 +113,7 @@ public class ClassCodeGeneratorTest { @Test public void toStringTest() { - final GeneratedTOBuilder toBuilder = new CodegenGeneratedTOBuilder("simple.pack", "DefCtor"); + final GeneratedTOBuilder toBuilder = new CodegenGeneratedTOBuilder(JavaTypeName.create("simple.pack", "DefCtor")); GeneratedPropertyBuilder propBuilder = toBuilder.addProperty("foo"); propBuilder.setReturnType(Types.typeForClass(String.class)); diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java index 9227899ab9..61df9bba94 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java @@ -18,6 +18,7 @@ import java.util.Set; import org.junit.Test; import org.opendaylight.mdsal.binding.java.api.generator.GeneratorJavaFile; import org.opendaylight.mdsal.binding.model.api.GeneratedType; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder; import org.opendaylight.mdsal.binding.model.util.BindingTypes; import org.opendaylight.mdsal.binding.model.util.Types; @@ -36,7 +37,8 @@ public class GeneratorJavaFileTest { types.add(t1); types.add(t2); types.add(t3); - GeneratedTypeBuilder gtb = new CodegenGeneratedTypeBuilder("org.opendaylight.controller.gen", "Type4"); + GeneratedTypeBuilder gtb = new CodegenGeneratedTypeBuilder( + JavaTypeName.create("org.opendaylight.controller.gen", "Type4")); gtb.addImplementsType(Types.augmentableTypeFor(gtb)); types.add(gtb.build()); GeneratorJavaFile generator = new GeneratorJavaFile(types); @@ -54,7 +56,7 @@ public class GeneratorJavaFileTest { } private static GeneratedType createGeneratedType(final String pkgName, final String name) { - GeneratedTypeBuilder builder = new CodegenGeneratedTypeBuilder(pkgName, name); + GeneratedTypeBuilder builder = new CodegenGeneratedTypeBuilder(JavaTypeName.create(pkgName, name)); builder.addImplementsType(BindingTypes.DATA_OBJECT); return builder.build(); } -- 2.36.6