Integrate JavaTypeName as Identifier 08/69408/16
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 12 Mar 2018 20:33:57 +0000 (21:33 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 20 Mar 2018 08:47:45 +0000 (09:47 +0100)
This changes 'Type' to implement Identifiable<JavaTypeName>, 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 <robert.varga@pantheon.tech>
54 files changed:
binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/Type.java
binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/AnnotableTypeBuilder.java [new file with mode: 0644]
binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/EnumBuilder.java
binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/GeneratedTypeBuilderBase.java
binding/mdsal-binding-generator-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/TypeMemberBuilder.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/util/BindingRuntimeContext.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypes.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/CodegenTypeProvider.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/RuntimeTypeProvider.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/BitAndUnionTOEnclosingTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GenEnumResolvingTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/UsesTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImplTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/AbstractBaseType.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/ReferencedTypeImpl.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/Types.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractEnumerationBuilder.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTOBuilder.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedType.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTypeBuilder.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractTypeMemberBuilder.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AnnotationTypeBuilderImpl.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenEnumerationBuilder.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenGeneratedTOBuilder.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/CodegenGeneratedTypeBuilder.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeEnumerationBuilder.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeGeneratedTOBuilder.java
binding/mdsal-binding-generator-util/src/main/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/RuntimeGeneratedTypeBuilder.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/AbstractBaseTypeTest.java [deleted file]
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/BindingGeneratorUtilTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/ReferencedTypeImplTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/TypeNameTest.java [new file with mode: 0644]
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/TypesTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractGeneratedTypeBuilderTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AbstractTypeMemberTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/AnnotationBuilderTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/ConstantImplTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/EnumerationBuilderImplTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedPropertyImplTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTOBuilderImplTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTOBuilderTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTypeBuilderTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/MethodSignatureBuilderImplTest.java
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorUtil.java
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileTemplate.java
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGeneratorTest.java
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorUtilTest.java
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/ClassCodeGeneratorTest.java
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java

index 6f5c0cb312708d9a3a53fe334e4fc8c3936fd724..c95bce565dc382a74ea6ee4f9b2b1d8fec5a5737 100644 (file)
@@ -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<JavaTypeName> {
     /**
      * 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. <br>
@@ -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 (file)
index 0000000..d1d3be0
--- /dev/null
@@ -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 <code>null</code> references. In case that any
+     * of parameters contains <code>null</code> the method SHOULD thrown {@link IllegalArgumentException}
+     *
+     * @param packageName Package Name of Annotation Type
+     * @param simpleName Name of Annotation Type
+     * @return <code>new</code> 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));
+    }
+}
index ef95d8cc6731af434d56a5ad1858240b2f0dd3e6..88eb12c859cbc24a06af82b30333743dcb1e37ad 100644 (file)
@@ -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. <br>
-     * Neither the package name or annotation name can contain <code>null</code>
-     * references. In case that any of parameters contains <code>null</code> the
-     * method SHOULD thrown {@link IllegalArgumentException}
-     *
-     * @param packageName
-     *            Package Name of Annotation Type
-     * @param name
-     *            Name of Annotation Type
-     * @return <code>new</code> 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 <code>enumTypeDef</code>.
-     * Specifically this data represents list of value-name pairs.
+     * Updates this builder with data from <code>enumTypeDef</code>. Specifically this data represents list
+     * of value-name pairs.
      *
-     * @param enumTypeDef
-     *            enum type definition as source of enum data for
-     *            <code>enumBuilder</code>
+     * @param enumTypeDef enum type definition as source of enum data for <code>enumBuilder</code>
      */
     void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef);
-
-    /**
-     * @param description
-     */
-    void setDescription(final String description);
-
 }
index a3e17c6f552c0054ae118283cbaf49f7b8b33487..d07c63a6d6e7f70e8238af0abac731592df77dd9 100644 (file)
@@ -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<T extends GeneratedTypeBuilderBase<T>> extends Type {
+public interface GeneratedTypeBuilderBase<T extends GeneratedTypeBuilderBase<T>> extends Type, AnnotableTypeBuilder {
 
     /**
      * Adds new Enclosing Transfer Object into definition of Generated Type and
@@ -64,21 +64,6 @@ public interface GeneratedTypeBuilderBase<T extends GeneratedTypeBuilderBase<T>>
      */
     T addComment(TypeComment comment);
 
-    /**
-     * The method creates new AnnotationTypeBuilder containing specified package
-     * name an annotation name. <br>
-     * Neither the package name or annotation name can contain <code>null</code>
-     * references. In case that any of parameters contains <code>null</code> the
-     * method SHOULD thrown {@link IllegalArgumentException}
-     *
-     * @param packageName
-     *            Package Name of Annotation Type
-     * @param name
-     *            Name of Annotation Type
-     * @return <code>new</code> instance of Annotation Type Builder.
-     */
-    AnnotationTypeBuilder addAnnotation(String packageName, String name);
-
     boolean isAbstract();
 
     /**
index 050a4131da3f0ab2582953192adcb45aedb8ee57..e88b33b70643f8eea376cee59ce0302a39f73a74 100644 (file)
@@ -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<T extends TypeMemberBuilder<T>> {
-
-    /**
-     * The method creates new AnnotationTypeBuilder containing specified package
-     * name an annotation name. <br>
-     * Neither the package name or annotation name can contain <code>null</code>
-     * references. In case that any of parameters contains <code>null</code> the
-     * method SHOULD thrown {@link IllegalArgumentException}
-     *
-     * @param packageName
-     *            Package Name of Annotation Type
-     * @param name
-     *            Name of Annotation Type
-     * @return <code>new</code> instance of Annotation Type Builder.
-     */
-    AnnotationTypeBuilder addAnnotation(final String packageName, final String name);
-
+public interface TypeMemberBuilder<T extends TypeMemberBuilder<T>> extends AnnotableTypeBuilder {
     /**
      * Returns the name of property.
      *
@@ -35,9 +19,8 @@ public interface TypeMemberBuilder<T extends TypeMemberBuilder<T>> {
     String getName();
 
     /**
-     * Adds return Type into Builder definition for Generated Property. <br>
-     * The return Type MUST NOT be <code>null</code>, otherwise the method
-     * SHOULD throw {@link IllegalArgumentException}
+     * Adds return Type into Builder definition for Generated Property. The return Type MUST NOT be <code>null</code>,
+     * otherwise the method SHOULD throw {@link IllegalArgumentException}
      *
      * @param returnType
      *            Return Type of property.
@@ -55,23 +38,19 @@ public interface TypeMemberBuilder<T extends TypeMemberBuilder<T>> {
     T setAccessModifier(final AccessModifier modifier);
 
     /**
-     * Adds String definition of comment into Method Signature definition. <br>
-     * 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. <br>
-     * 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);
 
index 728bc8e57d88c8e1789bf9ce09c010703a633da7..3945dc22c3ac5a4a9b3c405a404935e7620fb479 100644 (file)
@@ -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<String> 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<IdentitySchemaNode> 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<RoutingContext> 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<String> or similar, but there is no sense in generalizing
+        //       unless there is another caller.
+        Optional<JavaTypeName> outerClass = genTOBuilder.getIdentifier().immediatelyEnclosingClass();
+        if (outerClass.isPresent()) {
+            final Deque<String> 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 <code>packageName</code> and
      * <code>schemaNode</code>.
@@ -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 <code>schemaNode</code>
      */
-    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 {
      *             </ul>
      *
      */
-    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<String, GeneratedTypeBuilder> builders = new HashMap<>();
-            builders.put(genTypeName, newType);
+            builders.put(simpleName, newType);
             genTypeBuilders.put(packageName, builders);
         } else {
             final Map<String, GeneratedTypeBuilder> 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 {
      *         <code>list</code> or null if <code>list</code> 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 <code>typeBuilder</code> as
+     * enclosing transfer objects.
+     *
+     * @param typeDef
+     *            type definition which can be of type <code>UnionType</code> or
+     *            <code>BitsTypeDefinition</code>
+     * @param typeBuilder
+     *            generated type builder to which is added generated TO created
+     *            from <code>typeDef</code>
+     * @param leaf
+     *            string with name for generated TO builder
+     * @param parentModule
+     *            parent module
+     * @return generated TO builder for <code>typeDef</code>
+     */
+    private GeneratedTOBuilder addTOToTypeBuilder(final UnionTypeDefinition typeDef,
+            final GeneratedTypeBuilder typeBuilder, final DataSchemaNode leaf, final Module parentModule) {
+        final List<GeneratedTOBuilder> 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<GeneratedTOBuilder> 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 <code>typeDef</code> of type
-     * {@link UnionTypeDefinition} or {@link BitsTypeDefinition} which are
+     * Builds generated TO builders for <code>typeDef</code> of type {@link BitsTypeDefinition} which are
      * also added to <code>typeBuilder</code> 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 <code>typeDef</code>
      */
-    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<GeneratedTOBuilder> genTOBuilders = new ArrayList<>();
-        final String packageName = typeBuilder.getFullyQualifiedName();
-        if (typeDef instanceof UnionTypeDefinition) {
-            final List<GeneratedTOBuilder> 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<GeneratedTOBuilder> 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");
         }
     }
 }
index 3a3f2d92abadd706b66ce514283fa205861dd8f9..15fba00be2826aa6b675095462c13c1dc3f20039 100644 (file)
@@ -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<GeneratedType, WithStatus> getTypeWithSchema(final String type) {
-        return getTypeWithSchema(referencedType(type));
-    }
-
     private Entry<GeneratedType, WithStatus> 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<String, String> getEnumMapping(final String enumClass) {
-        final Entry<GeneratedType, WithStatus> typeWithSchema = getTypeWithSchema(enumClass);
-        return getEnumMapping(typeWithSchema);
-    }
-
     private static BiMap<String, String> getEnumMapping(final Entry<GeneratedType, WithStatus> 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<Type> collectAllContainerTypes(final GeneratedType type, final Set<Type> collection) {
index d4e9603d77dc5b004fd231793583756cdb8dbf9c..0f8cea0723816aaef5f7ae19597d13bb7848b9de 100644 (file)
@@ -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<Module> modulesSortedByDependency = ModuleDependencySort.sort(modules);
 
         for (Module module : modulesSortedByDependency) {
-            Map<Optional<Revision>, Map<String, Type>> dateTypeMap = genTypeDefsContextMap.get(module.getName());
-            if (dateTypeMap == null) {
-                dateTypeMap = new HashMap<>();
-            }
+            Map<Optional<Revision>, Map<String, Type>> dateTypeMap = genTypeDefsContextMap.computeIfAbsent(
+                module.getName(), key -> new HashMap<>());
             dateTypeMap.put(module.getRevision(), Collections.<String, Type>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<Revision> 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<Type> types = additionalTypes.get(module);
-                    if (types == null) {
-                        types = Sets.<Type> 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<Optional<Revision>, Map<String, Type>> modulesByDate =
-                            genTypeDefsContextMap.get(moduleName);
-                    Map<String, Type> 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<Type> types = additionalTypes.get(module);
+            if (types == null) {
+                types = Sets.<Type> 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<Optional<Revision>, Map<String, Type>> modulesByDate =
+                    genTypeDefsContextMap.get(module.getName());
+            final Optional<Revision> moduleRevision = module.getRevision();
+            Map<String, Type> 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
-     *            <code>UnionTypeDefinition</code>
-     * @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<GeneratedTOBuilder> builders = provideGeneratedTOBuildersForUnionTypeDef(basePackageName,
-                typedef, typeDefName, parentNode);
+    public GeneratedTOBuilder provideGeneratedTOBuilderForUnionTypeDef(final JavaTypeName typeName,
+            final UnionTypeDefinition typedef, final TypeDefinition<?> parentNode) {
+        final List<GeneratedTOBuilder> 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 {
      * <code>typeDefName</code>. Every union type from <code>typedef</code> 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
      *            <code>UnionTypeDefinition</code>
-     * @param typeDefName
-     *            string with name for generated TO
      * @return generated TO builder which represents <code>typedef</code>
      * @throws NullPointerException
      *             <ul>
@@ -972,9 +959,8 @@ public abstract class AbstractTypeProvider implements TypeProvider {
      *             <li>if Qname of <code>typedef</code> is null</li>
      *             </ul>
      */
-    public List<GeneratedTOBuilder> provideGeneratedTOBuildersForUnionTypeDef(final String basePackageName,
-            final UnionTypeDefinition typedef, final String typeDefName, final SchemaNode parentNode) {
-        Preconditions.checkNotNull(basePackageName, "Base Package Name cannot be NULL!");
+    public List<GeneratedTOBuilder> 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<TypeDefinition<?>> 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 {
      *         <code>provideGeneratedTOBuildersForUnionTypeDef</code> method.
      */
     private List<GeneratedTOBuilder> 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<GeneratedTOBuilder> 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 <code>typeDef</code>
      * @throws IllegalArgumentException
      *             <ul>
@@ -1233,38 +1206,28 @@ public abstract class AbstractTypeProvider implements TypeProvider {
      *             <li>if <code>basePackageName</code> equals null</li>
      *             </ul>
      */
-    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<Bit> 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<Bit> 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 <code>name</code> 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) {
index 7e70a29f03bbe43b6eb727e1a1855f7ea70fbe03..8914c63a129c0c30602606eec4ac816287d15216 100644 (file)
@@ -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 {
     /**
      * <code>Type</code> representation of <code>binary</code> 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;
+        }
     }
 }
index f9f4ee34ff6adaf3ab383d2ee6f165ec059da750..8b8ecbb46edf716e5c1d70a8b82022a9e71194e9 100644 (file)
@@ -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);
     }
 }
index 4e47f540b5da3a3f25d604f6295cda2bd338842f..19e00f8ed063cedd5b89462928d58c90ea12882a 100644 (file)
@@ -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);
     }
 }
index e63a5ae696f6c35ba9527aefa9b1481f8ba3a88a..8a1817a459e9e659bdc078132df52ae7b6fee02a 100644 (file)
@@ -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<GeneratedProperty> propertiesBitLeaf = bitLeaf.getProperties();
         GeneratedProperty firstBitProperty = null;
index 12906d2c2665f8bf3dc41c16918378e41a19cb42..639eba1e19b71eb8304134b191d87fe55fb0dcdc 100644 (file)
@@ -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());
     }
 
 }
index b4b1fac15213e490e1616251237cb660aa256459..e6b1ac9676348357f6e6dece7efaa2997da60875 100644 (file)
@@ -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);
index 690fe4ef1b57ba09a5678109029b10b3395a4cd0..a8fdcbd8f4edfaade447ad1cb7e25675732ff216 100644 (file)
@@ -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();
 
index 187b74a709ab48608ced8100edcc2b14981dc8dd..757c867b1e71d4f83aa378123ef68ed6adb65c92 100644 (file)
@@ -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();
index 546394475a2ecabac9cc9667e0dfbf190d80f51c..7347716be0e178f7cb256fbed5af6e70cb368532 100644 (file)
@@ -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 <code>Type</code>s
  */
 public class AbstractBaseType implements Type {
-
-    /**
-     * Name of the package to which this <code>Type</code> belongs.
-     */
-    private final String packageName;
-
     /**
      * Name of this <code>Type</code>.
      */
-    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 <code>Type</code>
-     *            belongs
-     * @param name
-     *            string with the name for this <code>Type</code>
+     * @param identifier for this <code>Type</code>
      */
-    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() + ")";
     }
 }
index a49cb564b903a7d091835cad2a836e716f81e013..cbe6c82b68db37df309045c065266b862ce78d31 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.mdsal.binding.model.util;
 
+import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
+
 /**
  *
  * Wraps combination of <code>packageName</code> and <code>name</code> 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
index 97b15049cdabcb3ebebec02a4dd62081f9a818dd..380848c2e4a4aab82a902fa42c33f3093ac8aed9 100644 (file)
@@ -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<Class<?>, 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<Class<?>, 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 <code>ConcreteType</code> 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 <code>WildcardType</code> representation of
-     *         <code>packageName</code> and <code>typeName</code>
+     * @param identifier JavaTypeName of the type
+     * @return <code>WildcardType</code> 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);
         }
     }
 
index 803710239324081d7cfdd23892df7a1c45bb249c..8eef6aab77960bebe55f1b75a1ac4427c3ef8818 100644 (file)
@@ -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<Enumeration.Pair> values = ImmutableList.of();
     private List<AnnotationTypeBuilder> 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<Pair> values;
         private final List<AnnotationType> 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);
 
index efefac8db698b7f31a505963c664a3557a3d557d..c6786ece75d0181695e3e145413ad7ff92558220 100644 (file)
@@ -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<G
     private boolean isUnionTypeBuilder = false;
     private TypeDefinition<?> baseType = null;
 
-    AbstractGeneratedTOBuilder(final String packageName, final String name) {
-        super(packageName, name);
+    AbstractGeneratedTOBuilder(final JavaTypeName identifier) {
+        super(identifier);
         setAbstract(false);
     }
 
index 5801adada10ae21b1246e38d57155e5f3d9dff39..b3c2891db5332d847aa359959b122686f79740d8 100644 (file)
@@ -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<AnnotationTypeBuilder> annotationBuilders, final boolean isAbstract,
+    AbstractGeneratedType(final Type parent, final JavaTypeName identifier, final TypeComment comment,
+            final List<AnnotationTypeBuilder> annotationBuilders, final boolean isAbstract,
             final List<Type> implementsTypes, final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
             final List<GeneratedTOBuilder> enclosedGenTOBuilders, final List<EnumBuilder> enumBuilders,
             final List<Constant> constants, final List<MethodSignatureBuilder> methodBuilders,
             final List<GeneratedPropertyBuilder> propertyBuilders) {
-        super(packageName, name);
+        super(identifier);
         this.parent = parent;
         this.comment = comment;
         this.annotations = toUnmodifiableAnnotations(annotationBuilders);
index 89ef28a27933d3a69166845d2e8b629f8a5b1b51..e7ac745d10a3d0d4981ec385eef14e5496c73fb9 100644 (file)
@@ -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<T extends GeneratedTypeBuilderBase<T
     private boolean isAbstract;
     private YangSourceDefinition yangSourceDefinition;
 
-    protected AbstractGeneratedTypeBuilder(final String packageName, final String name) {
-        super(packageName, name);
+    protected AbstractGeneratedTypeBuilder(final JavaTypeName identifier) {
+        super(identifier);
     }
 
     protected TypeComment getComment() {
@@ -87,12 +88,12 @@ abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T
 
     protected abstract T thisInstance();
 
-    abstract AbstractEnumerationBuilder newEnumerationBuilder(String packageName, String name);
+    abstract AbstractEnumerationBuilder newEnumerationBuilder(JavaTypeName identifier);
 
     @Override
     public GeneratedTOBuilder addEnclosingTransferObject(final String name) {
         Preconditions.checkArgument(name != null, "Name for Enclosing Generated Transfer Object cannot be null!");
-        final GeneratedTOBuilder builder = new CodegenGeneratedTOBuilder(getFullyQualifiedName(), name);
+        final GeneratedTOBuilder builder = new CodegenGeneratedTOBuilder(getIdentifier().createEnclosed(name));
 
         Preconditions.checkArgument(!this.enclosedTransferObjects.contains(builder),
             "This generated type already contains equal enclosing transfer object.");
@@ -116,11 +117,8 @@ abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T
     }
 
     @Override
-    public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
-        Preconditions.checkArgument(packageName != null, "Package Name for Annotation Type cannot be null!");
-        Preconditions.checkArgument(name != null, "Name of Annotation Type cannot be null!");
-
-        final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
+    public AnnotationTypeBuilder addAnnotation(final JavaTypeName identifier) {
+        final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(identifier);
 
         Preconditions.checkArgument(!this.annotationBuilders.contains(builder),
             "This generated type already contains equal annotation.");
@@ -168,7 +166,7 @@ abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T
     @Override
     public EnumBuilder addEnumeration(final String name) {
         Preconditions.checkArgument(name != null, "Name of enumeration cannot be null!");
-        final EnumBuilder builder = newEnumerationBuilder(getFullyQualifiedName(), name);
+        final EnumBuilder builder = newEnumerationBuilder(getIdentifier().createEnclosed(name));
 
         Preconditions.checkArgument(!this.enumDefinitions.contains(builder),
             "This generated type already contains equal enumeration.");
@@ -261,6 +259,6 @@ abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T
             return false;
         }
         final AbstractGeneratedTypeBuilder<?> other = (AbstractGeneratedTypeBuilder<?>) obj;
-        return Objects.equals(getName(), other.getName()) && Objects.equals(getPackageName(), other.getPackageName());
+        return getIdentifier().equals(other.getIdentifier());
     }
 }
index c746714b310e9fe47e60eb2940b0ddaf1f6bf08a..d94e9509353e3b10b0af84054655d3eaf998cb6d 100644 (file)
@@ -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<T extends TypeMemberBuilder<T>> 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;
     }
index 316eb5701de8c109eb294c9cf4954b336fd914aa..8ddafc9dee5daeb2a57bcb36f2fab2889d02bb1e 100644 (file)
@@ -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<AnnotationTypeBuilder> annotationBuilders = Collections.emptyList();
     private List<AnnotationType.Parameter> 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<AnnotationType> annotations;
         private final List<AnnotationType.Parameter> parameters;
         private final List<String> paramNames;
 
-        public AnnotationTypeImpl(final String packageName, final String name,
-                final List<AnnotationTypeBuilder> annotationBuilders,
+        AnnotationTypeImpl(final JavaTypeName identifier, final List<AnnotationTypeBuilder> annotationBuilders,
                 final List<AnnotationType.Parameter> parameters) {
-            this.packageName = packageName;
-            this.name = name;
+            this.identifier = requireNonNull(identifier);
 
             final List<AnnotationType> 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=");
index ad76012bbd211ca6378be440060b00c0bfd62a17..5c82e2e63626f95e9a2aedaeb9c17993fbbfa897 100644 (file)
@@ -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
index 2a0f45297a012a91678436f7c673b900f3baa10e..798142e3a0e5e5ec787a06b1e8eee8f647ab18c2 100644 (file)
@@ -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 {
index 57615bccea975050f66336b4c760f33200241a24..d2dde0fe0a5e5f705a566b658a7d7b4faf128909 100644 (file)
@@ -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
index 82920ce2e72ec6e67358de42bceee1539193a93b..46ddfc72cc9cd826a350febf97f84a1597f38fc9 100644 (file)
@@ -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
index a7a8e9d35df4d568d3ddfd7cff85bb1113f44941..4136a60884a963e952c2b96adbb5d803d1ce10b7 100644 (file)
@@ -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 {
index 51bbcbc5194e89d74ff0a022fc3c1fa2a1651393..27d3ff27c05545b765618138a120fc3bd590c003 100644 (file)
@@ -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<GeneratedTypeBuilder> 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 (file)
index ec433ee..0000000
+++ /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));
-    }
-}
index 0112eb0bb143137804cbccf95a7e54edc97c2f2a..d280336187768f27f90786e41cc70b81e56a8f2d 100644 (file)
@@ -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);
index 65adcb7a3e79fee6cc77c996e371101d9c5addb3..5105bb574431c04e54081e0bd43f4d9f2314a581 100644 (file)
@@ -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 (file)
index 0000000..ed42b77
--- /dev/null
@@ -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));
+    }
+}
index 7e9e87cacf4e5df3dc807d161e7c1ac2b1cdb567..376c7a1ade2be4f4b1e327680b63fbc1092b60f1 100644 (file)
@@ -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
index 3bc0e0ff9bca2d091e5dd76a0fd6e08e821cdab9..713c6667ccbd0fc18662e13407e473867f7ac59a 100644 (file)
@@ -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");
     }
-
 }
index 820aac7b180bc97462e6733e03e6524c974ac659..8bb1824154d2dde1832df7abfeb258407820b8ba 100644 (file)
@@ -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);
index ca372df4c347d1fd58e5341b4bdba3ff18a1fb4d..a68d7cfa55935e496500b378f9112f57e14ca88a 100644 (file)
@@ -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<String> 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<String> 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");
index c6604540d472c78ece416103e13dfd72340c6a4b..4f16e951b67bea22ac726f51bc6d74714b327625 100644 (file)
@@ -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");
index 2d40cf93d2f935235e696e8337ffd95d29988b9f..80125e85211b6f21f179b547673ac611aab4838f 100644 (file)
@@ -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());
index b0e3b14aec4eb6eb9122f20cd7f22a6f77c57773..5c7180dbf34bbfc98e31e27e9e852b14082e22fe 100644 (file)
@@ -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
index fa217f39c744eb2a8c900d2f2d000f4c541095e5..839a1162fc83d7a45c02e85b004ff2ada09ddfd4 100644 (file)
@@ -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());
index e485e8317f0390357d358f8a956fec9fd9044f07..c72d82cdbe2d34c5405053894bd8eeb6dd769517 100644 (file)
@@ -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();
index d484fdab3051d994b55000a031f83ba8a766e162..f77af510ad3e01cd073f5d6d0b4246db07870cef 100644 (file)
@@ -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();
 
index d00eff793dc07343924eecb886af29079fe08ea6..044deb62162016040e8ac4a53aa3ce5a6abc47b0 100644 (file)
@@ -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());
index 9ef7618476f772e3a25732733e5ba65d381ed0e6..2168064fd8cb0b2989c67acc890789281517e1e9 100644 (file)
@@ -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 <code>fullyQualifiedName</code>.
-     *
-     * @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 <code>fullyQualifiedName</code>
-     *
-     * @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 <code>methods</code>.
      *
@@ -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;
     }
index fcd5217722db6a8b3e0774e68b4060db17d2031d..3c719d15d2151f2a5753e6ff5816f0b46e7ee140 100644 (file)
@@ -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 <code>genType</code> equals <code>null</code>
      */
-    static Map<String, String> createImports(final GeneratedType genType) {
+    static Map<String, JavaTypeName> createImports(final GeneratedType genType) {
         if (genType == null) {
             throw new IllegalArgumentException("Generated Type cannot be NULL!");
         }
-        final Map<String, String> imports = new LinkedHashMap<>();
+        final Map<String, JavaTypeName> imports = new LinkedHashMap<>();
 
         List<GeneratedType> childGeneratedTypes = genType.getEnclosedTypes();
         if (!childGeneratedTypes.isEmpty()) {
@@ -124,7 +125,7 @@ public final class GeneratorUtil {
      *             </ul>
      */
     static void putTypeIntoImports(final GeneratedType parentGenType, final Type type,
-                                   final Map<String, String> imports) {
+                                   final Map<String, JavaTypeName> 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 <code>genType</code> and
-     * recursivelly their enclosed types.
+     * recursively their enclosed types.
      *
      * @param genType
      *            JAVA <code>Type</code> 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<String, String> createChildImports(final GeneratedType genType) {
         Map<String, String> childImports = new LinkedHashMap<>();
-        List<GeneratedType> 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 {
      *             </ul>
      */
     static String getExplicitType(final GeneratedType parentGenType, final Type type,
-                                  final Map<String, String> imports) {
-
+                                  final Map<String, JavaTypeName> 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</li> <li>else only <code>builder</code></li>
      */
     private static StringBuilder addActualTypeParameters(final StringBuilder builder, final Type type,
-                                                         final GeneratedType parentGenType, final Map<String, String> imports) {
+            final GeneratedType parentGenType, final Map<String, JavaTypeName> 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 <code>pTypes</code>
      */
     private static String getParameters(final GeneratedType parentGenType, final Type[] pTypes,
-                                        final Map<String, String> availableImports) {
+                                        final Map<String, JavaTypeName> availableImports) {
 
         if (pTypes == null || pTypes.length == 0) {
             return "?";
index b0d3c316443609285f10d70cd3e80b3b6e31728c..67e2b6b4e8a5c484a4dfd59c6ff9746a6f426798 100644 (file)
@@ -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<String, String> importMap = new HashMap<>();
+    private final Map<String, JavaTypeName> 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<JavaTypeName> 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());
     }
 }
index 3c7444e52791bfffd526a5981ee42d5173cff3eb..8ec3b584097e96d1444decbb0f0a109daeaee04b 100644 (file)
@@ -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)
         }
     }
 
index c90ccaad3bb75e1c0441ed8f16e5c3fc02af2a61..481bd924770946c4df975573a3d3e4ebef768814 100644 (file)
@@ -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;
     }
index 471d86a4949eede7c8f350803f1faf3faa5f6cbc..caf103f2abda8cb34eca8a97d830ca223fa99474 100644 (file)
@@ -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<String, String> generated = createImports(generatedType);
+        final Map<String, JavaTypeName> 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)
index bd47d5c1e840341f906487e5ee91bcdb8ef5c168..2bda5feb50b28994f5ddd98bef646e7bd9688905 100644 (file)
@@ -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));
index 9227899ab9edf7a8166c3d1cfde6802065dff412..61df9bba9433f7082357a60459f8430e2df8f414 100644 (file)
@@ -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();
     }