Merge "Bug 1027: Improved instance identifier codec for augmentations"
authorRobert Varga <rovarga@cisco.com>
Mon, 19 May 2014 15:58:27 +0000 (15:58 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 19 May 2014 15:58:27 +0000 (15:58 +0000)
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedType.java
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractTypeMember.java
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/GeneratedTOBuilderImpl.java

index eefb847ff63046cb408857387390daea88c75614..a2bc6da9394ea0b0265313bcd9dcf38a8609f7a4 100644 (file)
@@ -39,13 +39,13 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat
     private final List<GeneratedProperty> properties;
     private final boolean isAbstract;
 
-    public AbstractGeneratedType(AbstractGeneratedTypeBuilder<?> builder) {
+    public AbstractGeneratedType(final AbstractGeneratedTypeBuilder<?> builder) {
         super(builder.getPackageName(), builder.getName());
         this.parent = builder.getParent();
         this.comment = builder.getComment();
         this.annotations = toUnmodifiableAnnotations(builder.getAnnotations());
-        this.implementsTypes = Collections.unmodifiableList(builder.getImplementsTypes());
-        this.constants = Collections.unmodifiableList(builder.getConstants());
+        this.implementsTypes = makeUnmodifiable(builder.getImplementsTypes());
+        this.constants = makeUnmodifiable(builder.getConstants());
         this.enumerations = toUnmodifiableEnumerations(builder.getEnumerations());
         this.methodSignatures = toUnmodifiableMethods(builder.getMethodDefinitions());
         this.enclosedTypes = toUnmodifiableEnclosedTypes(builder.getEnclosedTypes(),
@@ -64,19 +64,29 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat
         this.parent = parent;
         this.comment = comment;
         this.annotations = toUnmodifiableAnnotations(annotationBuilders);
-        this.implementsTypes = Collections.unmodifiableList(implementsTypes);
-        this.constants = Collections.unmodifiableList(constants);
+        this.implementsTypes = makeUnmodifiable(implementsTypes);
+        this.constants = makeUnmodifiable(constants);
         this.enumerations = toUnmodifiableEnumerations(enumBuilders);
         this.methodSignatures = toUnmodifiableMethods(methodBuilders);
         this.enclosedTypes = toUnmodifiableEnclosedTypes(enclosedGenTypeBuilders, enclosedGenTOBuilders);
         this.properties = toUnmodifiableProperties(propertyBuilders);
         this.isAbstract = isAbstract;
+    }
 
+    protected static final <T> List<T> makeUnmodifiable(final List<T> list) {
+        switch (list.size()) {
+        case 0:
+            return Collections.emptyList();
+        case 1:
+            return Collections.singletonList(list.get(0));
+        default:
+            return Collections.unmodifiableList(list);
+        }
     }
 
-    private List<GeneratedType> toUnmodifiableEnclosedTypes(final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
+    private static List<GeneratedType> toUnmodifiableEnclosedTypes(final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
             final List<GeneratedTOBuilder> enclosedGenTOBuilders) {
-        final List<GeneratedType> enclosedTypesList = new ArrayList<>();
+        final ArrayList<GeneratedType> enclosedTypesList = new ArrayList<>(enclosedGenTypeBuilders.size() + enclosedGenTOBuilders.size());
         for (final GeneratedTypeBuilder builder : enclosedGenTypeBuilders) {
             if (builder != null) {
                 enclosedTypesList.add(builder.toInstance());
@@ -88,39 +98,40 @@ abstract class AbstractGeneratedType extends AbstractBaseType implements Generat
                 enclosedTypesList.add(builder.toInstance());
             }
         }
-        return enclosedTypesList;
+
+        return makeUnmodifiable(enclosedTypesList);
     }
 
-    protected final List<AnnotationType> toUnmodifiableAnnotations(final List<AnnotationTypeBuilder> annotationBuilders) {
-        final List<AnnotationType> annotationList = new ArrayList<>();
+    protected static final List<AnnotationType> toUnmodifiableAnnotations(final List<AnnotationTypeBuilder> annotationBuilders) {
+        final List<AnnotationType> annotationList = new ArrayList<>(annotationBuilders.size());
         for (final AnnotationTypeBuilder builder : annotationBuilders) {
             annotationList.add(builder.toInstance());
         }
-        return Collections.unmodifiableList(annotationList);
+        return makeUnmodifiable(annotationList);
     }
 
-    protected final List<MethodSignature> toUnmodifiableMethods(List<MethodSignatureBuilder> methodBuilders) {
-        final List<MethodSignature> methods = new ArrayList<>();
+    protected final List<MethodSignature> toUnmodifiableMethods(final List<MethodSignatureBuilder> methodBuilders) {
+        final List<MethodSignature> methods = new ArrayList<>(methodBuilders.size());
         for (final MethodSignatureBuilder methodBuilder : methodBuilders) {
             methods.add(methodBuilder.toInstance(this));
         }
-        return Collections.unmodifiableList(methods);
+        return makeUnmodifiable(methods);
     }
 
-    protected final List<Enumeration> toUnmodifiableEnumerations(List<EnumBuilder> enumBuilders) {
-        final List<Enumeration> enums = new ArrayList<>();
+    protected final List<Enumeration> toUnmodifiableEnumerations(final List<EnumBuilder> enumBuilders) {
+        final List<Enumeration> enums = new ArrayList<>(enumBuilders.size());
         for (final EnumBuilder enumBuilder : enumBuilders) {
             enums.add(enumBuilder.toInstance(this));
         }
-        return Collections.unmodifiableList(enums);
+        return makeUnmodifiable(enums);
     }
 
-    protected final List<GeneratedProperty> toUnmodifiableProperties(List<GeneratedPropertyBuilder> methodBuilders) {
-        final List<GeneratedProperty> methods = new ArrayList<>();
+    protected final List<GeneratedProperty> toUnmodifiableProperties(final List<GeneratedPropertyBuilder> methodBuilders) {
+        final List<GeneratedProperty> methods = new ArrayList<>(methodBuilders.size());
         for (final GeneratedPropertyBuilder methodBuilder : methodBuilders) {
             methods.add(methodBuilder.toInstance(this));
         }
-        return Collections.unmodifiableList(methods);
+        return makeUnmodifiable(methods);
     }
 
     @Override
index 51721882883201c377ddb8e51c1a2e237aef3928..cfadce1a5e6f36938bbaacc8f06ea5af7759c0de 100644 (file)
@@ -29,11 +29,11 @@ abstract class AbstractTypeMember implements TypeMember {
 
     public AbstractTypeMember(final Type definingType, final String name,  final List<AnnotationType> annotations,
                               final String comment, final AccessModifier accessModifier, final Type returnType,
-                              boolean isFinal, boolean isStatic) {
+                              final boolean isFinal, final boolean isStatic) {
         super();
         this.definingType = definingType;
         this.name = name;
-        this.annotations = Collections.unmodifiableList(annotations);
+        this.annotations = annotations.isEmpty() ? Collections.<AnnotationType>emptyList() : Collections.unmodifiableList(annotations);
         this.comment = comment;
         this.accessModifier = accessModifier;
         this.returnType = returnType;
@@ -92,7 +92,7 @@ abstract class AbstractTypeMember implements TypeMember {
     }
 
     @Override
-    public boolean equals(Object obj) {
+    public boolean equals(final Object obj) {
         if (this == obj) {
             return true;
         }
index a2ecc1018d1d765fba3a1c5a5ae67baf47bf7d2a..b3b1c7ce256ddff61166bc341dbafdfdc1b966ab 100644 (file)
@@ -23,16 +23,16 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
         GeneratedTOBuilder {
 
     private GeneratedTransferObject extendsType;
-    private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();
-    private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();
-    private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<>();
+    private final ArrayList<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();
+    private final ArrayList<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();
+    private final ArrayList<GeneratedPropertyBuilder> toStringProperties = new ArrayList<>();
     private boolean isTypedef = false;
     private boolean isUnionType = false;
     private boolean isUnionTypeBuilder = false;
     private Restrictions restrictions;
     private GeneratedPropertyBuilder SUID;
 
-    public GeneratedTOBuilderImpl(String packageName, String name) {
+    public GeneratedTOBuilderImpl(final String packageName, final String name) {
         super(packageName, name);
         setAbstract(false);
     }
@@ -61,26 +61,26 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
      * @return <code>new</code> instance of Method Signature Builder.
      */
     @Override
-    public MethodSignatureBuilder addMethod(String name) {
+    public MethodSignatureBuilder addMethod(final String name) {
         final MethodSignatureBuilder builder = super.addMethod(name);
         builder.setAbstract(false);
         return builder;
     }
 
     @Override
-    public GeneratedTOBuilder addEqualsIdentity(GeneratedPropertyBuilder property) {
+    public GeneratedTOBuilder addEqualsIdentity(final GeneratedPropertyBuilder property) {
         equalsProperties.add(property);
         return this;
     }
 
     @Override
-    public GeneratedTOBuilder addHashIdentity(GeneratedPropertyBuilder property) {
+    public GeneratedTOBuilder addHashIdentity(final GeneratedPropertyBuilder property) {
         hashProperties.add(property);
         return this;
     }
 
     @Override
-    public GeneratedTOBuilder addToStringProperty(GeneratedPropertyBuilder property) {
+    public GeneratedTOBuilder addToStringProperty(final GeneratedPropertyBuilder property) {
         toStringProperties.add(property);
         return this;
     }
@@ -91,17 +91,18 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
     }
 
     @Override
-    public void setRestrictions(Restrictions restrictions) {
+    public void setRestrictions(final Restrictions restrictions) {
         this.restrictions = restrictions;
     }
 
     @Override
-    public void setSUID(GeneratedPropertyBuilder suid) {
+    public void setSUID(final GeneratedPropertyBuilder suid) {
         this.SUID = suid;
     }
 
     @Override
     public GeneratedTransferObject toInstance() {
+        // FIXME: can we compact the arrays now? It needs to be thread-safe, though
         return new GeneratedTransferObjectImpl(this);
     }
 
@@ -133,17 +134,17 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
     }
 
     @Override
-    public void setTypedef(boolean isTypedef) {
+    public void setTypedef(final boolean isTypedef) {
         this.isTypedef = isTypedef;
     }
 
     @Override
-    public void setIsUnion(boolean isUnion) {
+    public void setIsUnion(final boolean isUnion) {
         this.isUnionType = isUnion;
     }
 
     @Override
-    public void setIsUnionBuilder(boolean isUnionTypeBuilder) {
+    public void setIsUnionBuilder(final boolean isUnionTypeBuilder) {
         this.isUnionTypeBuilder = isUnionTypeBuilder;
     }
 
@@ -160,7 +161,7 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
         private final Restrictions restrictions;
         private final GeneratedProperty SUID;
 
-        public GeneratedTransferObjectImpl(GeneratedTOBuilderImpl builder) {
+        public GeneratedTransferObjectImpl(final GeneratedTOBuilderImpl builder) {
             super(builder);
             this.extendsType = builder.extendsType;
             this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
@@ -260,7 +261,7 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
             return builder.toString();
         }
 
-        public String serializeTypedef(Type type) {
+        public String serializeTypedef(final Type type) {
             if (type instanceof ParameterizedType) {
                 ParameterizedType parameterizedType = (ParameterizedType) type;
                 StringBuffer sb = new StringBuffer();