BUG-1485: remove holder for deprecated Class ranges 70/21370/9
authorRobert Varga <rovarga@cisco.com>
Thu, 28 May 2015 20:34:01 +0000 (22:34 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 2 Jun 2015 08:26:31 +0000 (08:26 +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>
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 aeec8bdceca6b276a2c78ef929884dd21b21792b..dc1d88110c91173025911ba129dbd30e6e8f3b1e 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»
@@ -568,9 +559,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");