Fix ordering fields in generated type builder 14/9814/5
authorLadislav Borak <lborak@cisco.com>
Fri, 8 Aug 2014 13:38:38 +0000 (15:38 +0200)
committerRobert Varga <rovarga@cisco.com>
Wed, 13 Aug 2014 18:46:17 +0000 (20:46 +0200)
Methods is sorted alphabetically to make the order of evaluation
predictable.

Change-Id: Ie1171a78a17e6eab71b629411f0b0a1bb1807d7d
Signed-off-by: Ladislav Borak <lborak@cisco.com>
Signed-off-by: Robert Varga <rovarga@cisco.com>
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/AlphabeticallyTypeMemberComparator.java [new file with mode: 0644]
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend

diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/AlphabeticallyTypeMemberComparator.java b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/AlphabeticallyTypeMemberComparator.java
new file mode 100644 (file)
index 0000000..058ba9a
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * 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.yangtools.sal.java.api.generator;
+
+import java.util.Comparator;
+import org.opendaylight.yangtools.sal.binding.model.api.TypeMember;
+
+/**
+ * Alphabetically type member {@link Comparator} which provides sorting by name for type members
+ * (variables and methods) in generated class.
+ *
+ * @param <T>
+ */
+public class AlphabeticallyTypeMemberComparator<T extends TypeMember> implements Comparator<T>{
+
+    @Override
+    public int compare(T member1, T member2) {
+        return member1.getName().compareTo(member2.getName());
+    }
+}
index a49edfdfb7e5ad4ac4cc8962f8952653f029292c..c258e12092b2188c444203470e6131430e1b4824 100644 (file)
@@ -25,7 +25,6 @@ import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType
 import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature
 import org.opendaylight.yangtools.sal.binding.model.api.Restrictions
 import org.opendaylight.yangtools.sal.binding.model.api.Type
-import org.opendaylight.yangtools.yang.common.QName
 
 abstract class BaseTemplate {
     protected val GeneratedType type;
index 96e3af8d96c33194d72238dc0c6509e9bfbfa24f..286b5f06b17017a6c01fe9ad678db612a65af16b 100644 (file)
@@ -7,7 +7,14 @@
  */
 package org.opendaylight.yangtools.sal.java.api.generator
 
-import java.util.Arrays;
+import com.google.common.collect.ImmutableSortedSet
+import com.google.common.collect.Range
+import java.util.ArrayList
+import java.util.Arrays
+import java.util.Collection
+import java.util.Collections
+import java.util.HashMap
+import java.util.HashSet
 import java.util.LinkedHashSet
 import java.util.List
 import java.util.Map
@@ -15,22 +22,15 @@ import java.util.Set
 import org.opendaylight.yangtools.binding.generator.util.ReferencedTypeImpl
 import org.opendaylight.yangtools.binding.generator.util.Types
 import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl
+import org.opendaylight.yangtools.sal.binding.model.api.ConcreteType
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType
 import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature
 import org.opendaylight.yangtools.sal.binding.model.api.Type
 import org.opendaylight.yangtools.yang.binding.Augmentable
-import static org.opendaylight.yangtools.binding.generator.util.Types.*
-import java.util.HashMap
-import java.util.Collections
 import org.opendaylight.yangtools.yang.binding.DataObject
-import java.util.ArrayList
-import java.util.HashSet
-import java.util.Collection
 import org.opendaylight.yangtools.yang.binding.Identifiable
-import com.google.common.collect.Range
-import org.opendaylight.yangtools.sal.binding.model.api.ConcreteType
 
 /**
  * Template for generating JAVA builder classes. 
@@ -63,6 +63,8 @@ class BuilderTemplate extends BaseTemplate {
      */
     val Set<GeneratedProperty> properties
 
+    private static val METHOD_COMPARATOR = new AlphabeticallyTypeMemberComparator<MethodSignature>();
+
     /**
      * Constructs new instance of this class.
      * @throws IllegalArgumentException if <code>genType</code> equals <code>null</code>
@@ -79,15 +81,17 @@ class BuilderTemplate extends BaseTemplate {
      * @returns set of method signature instances
      */
     def private Set<MethodSignature> createMethods() {
-        val Set<MethodSignature> methods = new LinkedHashSet
+        val Set<MethodSignature> methods = new LinkedHashSet();
         methods.addAll(type.methodDefinitions)
         collectImplementedMethods(methods, type.implements)
-        return methods
+        val Set<MethodSignature> sortedMethods = ImmutableSortedSet.orderedBy(METHOD_COMPARATOR).addAll(methods).build()
+
+        return sortedMethods
     }
 
     /**
      * Adds to the <code>methods</code> set all the methods of the <code>implementedIfcs</code> 
-     * and recursivelly their implemented interfaces.
+     * and recursively their implemented interfaces.
      * 
      * @param methods set of method signatures
      * @param implementedIfcs list of implemented interfaces
@@ -187,7 +191,7 @@ class BuilderTemplate extends BaseTemplate {
             throw new IllegalArgumentException("Method, method name, method return type reference cannot be NULL or empty!")
         }
         var prefix = "get";
-        if(BOOLEAN.equals(method.returnType)) {
+        if(Types.BOOLEAN.equals(method.returnType)) {
             prefix = "is";
         } 
         if (method.name.startsWith(prefix)) {