From e5188e3cda22210c84df30c796444f95073437a1 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 28 May 2015 02:14:29 +0200 Subject: [PATCH] BUG-1485: move *Range* methods to BuilderTemplate printRangeConstraint and generateRangeMethod are used by BuilderTemplate only, move them there to preserve locality and stop them from spreading. Change-Id: I5d5421b50bd5e4ac65182ad1a11e7bfad199df51 Signed-off-by: Robert Varga (cherry picked from commit c49ff3a94cc0b0f98dc73647a7fdc308fdaa3052) --- .../sal/java/api/generator/BaseTemplate.xtend | 41 ------------------- .../java/api/generator/BuilderTemplate.xtend | 33 +++++++++++++++ 2 files changed, 33 insertions(+), 41 deletions(-) diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend index c93f428131..2f1388a593 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend @@ -451,47 +451,6 @@ abstract class BaseTemplate { return «varName»; ''' - def protected generateRangeMethod(String methodName, Restrictions restrictions, Type returnType, String className, String varName) ''' - «IF restrictions != null && !(restrictions.rangeConstraints.empty)» - «val number = returnType.importedNumber» - public static «List.importedName»<«Range.importedName»<«number»>> «methodName»() { - «IF returnType.fullyQualifiedName.equals(BigDecimal.canonicalName)» - «rangeBody(restrictions, BigDecimal, className, varName)» - «ELSE» - «rangeBody(restrictions, BigInteger, className, varName)» - «ENDIF» - } - «ENDIF» - ''' - - def protected generateRangeMethod(String methodName, Restrictions restrictions, String className, String varName, Iterable properties) ''' - «IF restrictions != null && !(restrictions.rangeConstraints.empty)» - «val returnType = properties.iterator.next.returnType» - public static «List.importedName»<«Range.importedName»<«returnType.importedNumber»>> «methodName»() { - «IF returnType.fullyQualifiedName.equals(BigDecimal.canonicalName)» - «rangeBody(restrictions, BigDecimal, className, varName)» - «ELSE» - «rangeBody(restrictions, BigInteger, className, varName)» - «ENDIF» - } - «ENDIF» - ''' - - def private rangeBody(Restrictions restrictions, Class numberClass, String className, String varName) ''' - if («varName» == null) { - synchronized («className».class) { - if («varName» == null) { - «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(); - } - } - } - return «varName»; - ''' - def protected String importedNumber(Class clazz) { if (clazz.equals(typeof(BigDecimal))) { return BigDecimal.importedName diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend index dc7f9d4390..9806ff5d2c 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend @@ -33,6 +33,10 @@ import org.opendaylight.yangtools.yang.binding.DataObject import org.opendaylight.yangtools.yang.binding.Identifiable import org.opendaylight.yangtools.concepts.Builder import org.opendaylight.yangtools.yang.binding.AugmentationHolder +import org.opendaylight.yangtools.sal.binding.model.api.Restrictions +import java.math.BigDecimal +import java.math.BigInteger +import com.google.common.collect.ImmutableList /** * Template for generating JAVA builder classes. @@ -528,6 +532,35 @@ class BuilderTemplate extends BaseTemplate { } ''' + + def private generateRangeMethod(String methodName, Restrictions restrictions, Type returnType, String className, String varName) ''' + «IF restrictions != null && !(restrictions.rangeConstraints.empty)» + «val number = returnType.importedNumber» + public static «List.importedName»<«Range.importedName»<«number»>> «methodName»() { + «IF returnType.fullyQualifiedName.equals(BigDecimal.canonicalName)» + «rangeBody(restrictions, BigDecimal, className, varName)» + «ELSE» + «rangeBody(restrictions, BigInteger, className, varName)» + «ENDIF» + } + «ENDIF» + ''' + + def private rangeBody(Restrictions restrictions, Class numberClass, String className, String varName) ''' + if («varName» == null) { + synchronized («className».class) { + if («varName» == null) { + «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(); + } + } + } + return «varName»; + ''' + def private CharSequence generateCopyConstructor(boolean impl) ''' «IF impl»private«ELSE»public«ENDIF» «type.name»«IF impl»«IMPL»«ELSE»«BUILDER»«ENDIF»(«type.name»«IF impl»«BUILDER»«ENDIF» base) { «val allProps = new ArrayList(properties)» -- 2.36.6