BUG-1485: remove holder for deprecated Class ranges 70/21970/2
authorRobert Varga <rovarga@cisco.com>
Thu, 28 May 2015 20:34:01 +0000 (22:34 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 5 Jun 2015 21:08:37 +0000 (21:08 +0000)
With the switchover to new range checks, the static caching field is not
needed. We still retain compatibility with possible users out there, but
they are now responsible for caching the result.

Change-Id: I119615255559263f98fc382b324026c4f5d35cfc
Signed-off-by: Robert Varga <rovarga@cisco.com>
(cherry picked from commit 924235feb5540c5a453c522e85d13fbd1d140c5a)

code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/CompilationTestUtils.java
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java

index 350d579dcd3cfb414002c37d7ef7146e35022225..70703cf3f293537da58162c9ce4b6458bccc0cbd 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.sal.java.api.generator
 
+import com.google.common.base.Preconditions
 import com.google.common.collect.ImmutableList
 import com.google.common.collect.Lists
 import com.google.common.collect.Range
@@ -20,16 +21,16 @@ import java.util.Collections
 import java.util.List
 import java.util.regex.Pattern
 import org.opendaylight.yangtools.binding.generator.util.TypeConstants
+import org.opendaylight.yangtools.sal.binding.model.api.ConcreteType
 import org.opendaylight.yangtools.sal.binding.model.api.Constant
 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration
 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.Restrictions
-import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition
-import com.google.common.base.Preconditions
 import org.opendaylight.yangtools.sal.binding.model.api.Type
-import org.opendaylight.yangtools.sal.binding.model.api.ConcreteType
+import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition
+import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint
 
 /**
  * Template for generating JAVA class.
@@ -154,7 +155,7 @@ class ClassTemplate extends BaseTemplate {
 
             «generateLengthMethod("length", "_length")»
 
-            «generateRangeMethod("range", "_range"
+            «generateRangeMethod()»
 
         }
 
@@ -190,15 +191,27 @@ class ClassTemplate extends BaseTemplate {
         «ENDIF»
     '''
 
-    def private generateRangeMethod(String methodName, String varName) '''
+    private def rangeBody(List<RangeConstraint> restrictions, Class<? extends Number> numberClass) '''
+        «List.importedName»<«Range.importedName»<«numberClass.importedName»>> ret = new java.util.ArrayList<>(«restrictions.size»);
+        «FOR r : restrictions»
+            ret.add(«Range.importedName».closed(«numericValue(numberClass, r.min)», «numericValue(numberClass, r.max)»));
+        «ENDFOR»
+    '''
+
+    def private generateRangeMethod() '''
         «IF restrictions != null && !(restrictions.rangeConstraints.empty)»
             «val returnType = allProperties.iterator.next.returnType»
             /**
              * @deprecated This method is slated for removal in a future release. See BUG-1485 for details.
              */
             @Deprecated
-            public static «List.importedName»<«Range.importedName»<«returnType.importedNumber»>> «methodName»() {
-                return «varName»;
+            public static «List.importedName»<«Range.importedName»<«returnType.importedNumber»>> range() {
+            «IF returnType.fullyQualifiedName.equals(BigDecimal.canonicalName)»
+                «rangeBody(restrictions.rangeConstraints, BigDecimal)»
+            «ELSE»
+                «rangeBody(restrictions.rangeConstraints, BigInteger)»
+            «ENDIF»
+                return ret;
             }
         «ENDIF»
     '''
@@ -236,34 +249,12 @@ class ClassTemplate extends BaseTemplate {
 
     def private generateConstraints() '''
         static {
-            «IF !restrictions.rangeConstraints.nullOrEmpty»
-            «generateRangeConstraints»
-            «ENDIF»
             «IF !restrictions.lengthConstraints.nullOrEmpty»
             «generateLengthConstraints»
             «ENDIF»
         }
     '''
 
-    private def generateRangeConstraints() '''
-        «IF !allProperties.nullOrEmpty»
-            «val returnType = allProperties.iterator.next.returnType»
-            «IF returnType.fullyQualifiedName.equals(BigDecimal.canonicalName)»
-                «rangeBody(restrictions, BigDecimal, genTO.importedName, "_range")»
-            «ELSE»
-                «rangeBody(restrictions, BigInteger, genTO.importedName, "_range")»
-            «ENDIF»
-        «ENDIF»
-    '''
-
-    private def rangeBody(Restrictions restrictions, Class<? extends Number> numberClass, String className, String varName) '''
-        «ImmutableList.importedName».Builder<«Range.importedName»<«numberClass.importedName»>> builder = «ImmutableList.importedName».builder();
-        «FOR r : restrictions.rangeConstraints»
-            builder.add(«Range.importedName».closed(«numericValue(numberClass, r.min)», «numericValue(numberClass, r.max)»));
-        «ENDFOR»
-        «varName» = builder.build();
-    '''
-
     private def lengthBody(Restrictions restrictions, Class<? extends Number> numberClass, String className, String varName) '''
         «ImmutableList.importedName».Builder<«Range.importedName»<«numberClass.importedName»>> builder = «ImmutableList.importedName».builder();
         «FOR r : restrictions.lengthConstraints»
@@ -563,9 +554,6 @@ class ClassTemplate extends BaseTemplate {
                 «IF !(restrictions.lengthConstraints.empty)»
                     private static final «List.importedName»<«Range.importedName»<«prop.returnType.importedNumber»>> _length;
                 «ENDIF»
-                «IF !(restrictions.rangeConstraints.empty)»
-                    private static final «List.importedName»<«Range.importedName»<«prop.returnType.importedNumber»>> _range;
-                «ENDIF»
             «ENDIF»
         «ENDIF»
         «IF !properties.empty»
index 6c607dab10c520e6112f857d630acb4fa1487451..0657835e1f3091c8aa84da4dd8ec096e4a92628e 100644 (file)
@@ -78,7 +78,7 @@ public class CompilationTestUtils {
             assertEquals(type, f.getType());
             return f;
         } catch (NoSuchFieldException e) {
-            throw new AssertionError("Field " + name + " does not exists in class " + clazz.getSimpleName());
+            throw new AssertionError("Field " + name + " does not exist in class " + clazz.getSimpleName());
         }
     }
 
index 5d3f1f89b2fbf0ce5c049a3c5e751c9d3e93ae7a..f82b9d7d4d5728b8e0efe389ac96de8ca7d506a8 100644 (file)
@@ -51,7 +51,6 @@ public class TypedefCompilationTest extends BaseCompilationTest {
     private static final String GET_VAL = "getValue";
     private static final String UNITS = "_UNITS";
     private static final String LENGTH = "_length";
-    private static final String RANGE = "_range";
 
     @Test
     public void test() throws Exception {
@@ -138,7 +137,6 @@ public class TypedefCompilationTest extends BaseCompilationTest {
         // typedef int32-ext1
         assertFalse(int32Ext1Class.isInterface());
         assertContainsField(int32Ext1Class, VAL, Integer.class);
-        assertContainsField(int32Ext1Class, RANGE, List.class);
         assertContainsFieldWithValue(int32Ext1Class, "serialVersionUID", Long.TYPE, 5351634010010233292L, Integer.class);
         // assertEquals(3, int32Ext1Class.getDeclaredFields().length);
 
@@ -161,7 +159,6 @@ public class TypedefCompilationTest extends BaseCompilationTest {
 
         // typedef int32-ext2
         assertFalse(int32Ext2Class.isInterface());
-        assertContainsField(int32Ext1Class, RANGE, List.class);
         assertContainsFieldWithValue(int32Ext2Class, UNITS, String.class, "mile", Integer.class);
         assertContainsFieldWithValue(int32Ext2Class, "serialVersionUID", Long.TYPE, 317831889060130988L, Integer.class);
         // assertEquals(3, int32Ext2Class.getDeclaredFields().length);
@@ -248,7 +245,6 @@ public class TypedefCompilationTest extends BaseCompilationTest {
         // typedef my-decimal-type
         assertFalse(myDecimalTypeClass.isInterface());
         assertContainsField(myDecimalTypeClass, VAL, BigDecimal.class);
-        assertContainsField(myDecimalTypeClass, RANGE, List.class);
         assertContainsFieldWithValue(myDecimalTypeClass, "serialVersionUID", Long.TYPE, 3143735729419861095L,
                 BigDecimal.class);
         // assertEquals(3, myDecimalTypeClass.getDeclaredFields().length);
@@ -273,7 +269,6 @@ public class TypedefCompilationTest extends BaseCompilationTest {
         // typedef my-decimal-type2
         assertFalse(myDecimalType2Class.isInterface());
         assertContainsField(myDecimalType2Class, VAL, BigDecimal.class);
-        assertContainsField(myDecimalType2Class, RANGE, List.class);
         assertContainsFieldWithValue(myDecimalType2Class, "serialVersionUID", Long.TYPE, -672265764962082714L, BigDecimal.class);
         // assertEquals(3, myDecimalType2Class.getDeclaredFields().length);
         assertContainsMethod(myDecimalType2Class, BigDecimal.class, "getValue");