From e8523240fb6f731dfffdf80e18a674e49b6aaafe Mon Sep 17 00:00:00 2001 From: Ladislav Borak Date: Tue, 5 Aug 2014 13:13:58 +0200 Subject: [PATCH] Bug 1434 - Make arrays non-mutable - changed getters, if fields return type is array, create local copy and send temporary reference - constructor which has field of type array, save this array by temporary reference Change-Id: Ifd96bd8f16eabec95409675723d5c13684914e16 Signed-off-by: Ladislav Borak --- .../sal/java/api/generator/BaseTemplate.xtend | 17 ++++------------- .../sal/java/api/generator/ClassTemplate.xtend | 6 +++++- .../sal/java/api/generator/UnionTemplate.xtend | 8 ++++++++ 3 files changed, 17 insertions(+), 14 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 272a9f6438..3cb9d8ce61 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 @@ -101,7 +101,11 @@ abstract class BaseTemplate { final protected def getterMethod(GeneratedProperty field) { ''' public «field.returnType.importedName» «field.getterMethodName»() { + «IF field.returnType.importedName.contains("[]")» + return Arrays.copyOf(«field.fieldName», «field.fieldName».length); + «ELSE» return «field.fieldName»; + «ENDIF» } ''' } @@ -310,19 +314,6 @@ abstract class BaseTemplate { return sb.toString } - def isDocumentationParametersNullOrEmtpy(GeneratedType type) { - val boolean isTypeDescriptionNullOrEmpty = type.description.nullOrEmpty - val boolean isTypeReferenceNullOrEmpty = type.reference.nullOrEmpty - val boolean isTypeModuleNameNullOrEmpty = type.moduleName.nullOrEmpty - val boolean isTypeSchemaPathNullOrEmpty = type.schemaPath.nullOrEmpty - - if (isTypeDescriptionNullOrEmpty && isTypeReferenceNullOrEmpty && isTypeModuleNameNullOrEmpty - && isTypeSchemaPathNullOrEmpty) { - return true - } - return false - } - def generateRestrictions(Type type, String paramName, Type returnType) ''' «val restrictions = type.getRestrictions» «IF restrictions !== null» diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend index dba7356f9b..1f9d9d0a4b 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend @@ -296,7 +296,11 @@ class ClassTemplate extends BaseTemplate { «ENDIF» «FOR p : properties» + «IF p.returnType.importedName.contains("[]")» + this.«p.fieldName» = Arrays.copyOf(«p.fieldName», «p.fieldName».length); + «ELSE» this.«p.fieldName» = «p.fieldName»; + «ENDIF» «ENDFOR» } @@ -513,7 +517,7 @@ class ClassTemplate extends BaseTemplate { «ENDIF» «IF !properties.empty» «FOR f : properties» - «IF f.readOnly»final«ENDIF» private «f.returnType.importedName» «f.fieldName»; + private«IF f.readOnly» final«ENDIF» «f.returnType.importedName» «f.fieldName»; «ENDFOR» «ENDIF» ''' diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionTemplate.xtend index 2b56179964..ecaaf8af01 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionTemplate.xtend @@ -52,7 +52,11 @@ class UnionTemplate extends ClassTemplate { «type.name» defInst = «type.name»Builder.getDefaultInstance(defVal); «FOR other : finalProperties» «IF other.name.equals("value")» + «IF other.returnType.importedName.contains("[]")» + this.«other.fieldName» = Arrays.copyOf(«other.fieldName», «other.fieldName».length); + «ELSE» this.«other.fieldName» = «other.fieldName»; + «ENDIF» «ELSE» this.«other.fieldName» = defInst.«other.fieldName»; «ENDIF» @@ -121,7 +125,11 @@ class UnionTemplate extends ClassTemplate { «ENDIF» «IF !properties.empty» «FOR p : properties» + «IF p.returnType.importedName.contains("[]")» + this.«p.fieldName» = Arrays.copyOf(source.«p.fieldName», source.«p.fieldName».length); + «ELSE» this.«p.fieldName» = source.«p.fieldName»; + «ENDIF» «ENDFOR» «ENDIF» } -- 2.36.6