From 26a80dadde97a6da2e1ab8f55736eeba31a3a1d8 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 20 Apr 2020 20:28:29 +0200 Subject: [PATCH] Improve often-used class imports importedName(Class) is slightly slower than importName(JavaTypeName), hence improve performance by creating a few more often-used constants. Change-Id: I2af9ad97bc2122a83c26cd247faf15e136bdb768 Signed-off-by: Robert Varga --- .../java/api/generator/BuilderGenerator.java | 4 ++-- .../api/generator/BuilderImplTemplate.xtend | 9 ++++---- .../java/api/generator/BuilderTemplate.xtend | 21 ++++++++++--------- .../java/api/generator/ClassTemplate.xtend | 3 ++- .../java/api/generator/JavaFileTemplate.java | 5 +++++ .../java/api/generator/LengthGenerator.java | 9 ++++---- 6 files changed, 29 insertions(+), 22 deletions(-) diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGenerator.java index 350a2e1ccb..a632394a75 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGenerator.java +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGenerator.java @@ -93,7 +93,7 @@ public final class BuilderGenerator implements CodeGenerator { @Override public String getUnitName(final Type type) { - return type.getName() + BuilderTemplate.BUILDER; + return type.getName() + BuilderTemplate.BUILDER_STR; } @VisibleForTesting @@ -107,7 +107,7 @@ public final class BuilderGenerator implements CodeGenerator { .addAll(methods).build(); final GeneratedTypeBuilder builderTypeBuilder = new CodegenGeneratedTypeBuilder( - origName.createSibling(origName.simpleName() + BuilderTemplate.BUILDER)); + origName.createSibling(origName.simpleName() + BuilderTemplate.BUILDER_STR)); final GeneratedTOBuilder implTypeBuilder = builderTypeBuilder.addEnclosingTransferObject( origName.simpleName() + "Impl"); diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderImplTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderImplTemplate.xtend index a57d5778de..e782775166 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderImplTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderImplTemplate.xtend @@ -7,6 +7,7 @@ */ package org.opendaylight.mdsal.binding.java.api.generator +import static org.opendaylight.mdsal.binding.model.util.BindingTypes.DATA_OBJECT import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTATION_FIELD import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTABLE_AUGMENTATION_NAME import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME @@ -16,9 +17,9 @@ import org.opendaylight.mdsal.binding.model.api.AnnotationType import org.opendaylight.mdsal.binding.model.api.GeneratedProperty import org.opendaylight.mdsal.binding.model.api.GeneratedType import org.opendaylight.mdsal.binding.model.api.Type +import org.opendaylight.mdsal.binding.model.util.Types import org.opendaylight.mdsal.binding.spec.naming.BindingMapping import org.opendaylight.yangtools.yang.binding.AbstractAugmentable -import org.opendaylight.yangtools.yang.binding.DataObject class BuilderImplTemplate extends AbstractBuilderTemplate { val Type builderType; @@ -92,14 +93,14 @@ class BuilderImplTemplate extends AbstractBuilderTemplate { def protected generateEquals() ''' «IF !properties.empty || augmentType !== null» @«OVERRIDE.importedName» - public boolean equals(«Object.importedName» obj) { + public boolean equals(«Types.objectType().importedName» obj) { if (this == obj) { return true; } - if (!(obj instanceof «DataObject.importedName»)) { + if (!(obj instanceof «DATA_OBJECT.importedName»)) { return false; } - if (!«targetType.importedName».class.equals(((«DataObject.importedName»)obj).«DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME»())) { + if (!«targetType.importedName».class.equals(((«DATA_OBJECT.importedName»)obj).«DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME»())) { return false; } «targetType.importedName» other = («targetType.importedName»)obj; diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend index 0194697f14..b57296bf5b 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend @@ -8,13 +8,13 @@ package org.opendaylight.mdsal.binding.java.api.generator import static extension org.apache.commons.text.StringEscapeUtils.escapeJava +import static org.opendaylight.mdsal.binding.model.util.BindingTypes.DATA_OBJECT import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTABLE_AUGMENTATION_NAME import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTATION_FIELD import com.google.common.collect.ImmutableList import java.util.ArrayList import java.util.Collection -import java.util.HashMap import java.util.HashSet import java.util.List import java.util.Map @@ -31,7 +31,6 @@ import org.opendaylight.mdsal.binding.model.util.Types import org.opendaylight.mdsal.binding.spec.naming.BindingMapping import org.opendaylight.yangtools.concepts.Builder import org.opendaylight.yangtools.yang.binding.AugmentationHolder -import org.opendaylight.yangtools.yang.binding.DataObject /** * Template for generating JAVA builder classes. @@ -40,9 +39,10 @@ class BuilderTemplate extends AbstractBuilderTemplate { /** * Constant used as suffix for builder name. */ - public static val BUILDER = "Builder"; + package static val BUILDER_STR = "Builder"; static val AUGMENTATION_FIELD_UPPER = AUGMENTATION_FIELD.toFirstUpper + static val BUILDER = JavaTypeName.create(Builder) /** * Constructs new instance of this class. @@ -66,7 +66,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { override body() ''' «wrapToDocumentation(formatDataForJavaDoc(targetType))» «targetType.annotations.generateDeprecatedAnnotation» - public class «type.name» implements «Builder.importedName»<«targetType.importedName»> { + public class «type.name» implements «BUILDER.importedName»<«targetType.importedName»> { «generateFields(false)» @@ -158,7 +158,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { «IF targetType.hasImplementsFromUses» «val List done = targetType.getBaseIfcs» «generateMethodFieldsFromComment(targetType)» - public void fieldsFrom(«DataObject.importedName» arg) { + public void fieldsFrom(«DATA_OBJECT.importedName» arg) { boolean isValidArg = false; «FOR impl : targetType.getAllIfcs» «generateIfCheck(impl, done)» @@ -340,13 +340,14 @@ class BuilderTemplate extends AbstractBuilderTemplate { «IF augmentType !== null» «val augmentTypeRef = augmentType.importedName» «val jlClassRef = CLASS.importedName» + «val hashMapRef = JU_HASHMAP.importedName» public «type.name» add«AUGMENTATION_FIELD_UPPER»(«jlClassRef» augmentationType, «augmentTypeRef» augmentationValue) { if (augmentationValue == null) { return remove«AUGMENTATION_FIELD_UPPER»(augmentationType); } - if (!(this.«AUGMENTATION_FIELD» instanceof «HashMap.importedName»)) { - this.«AUGMENTATION_FIELD» = new «HashMap.importedName»<>(); + if (!(this.«AUGMENTATION_FIELD» instanceof «hashMapRef»)) { + this.«AUGMENTATION_FIELD» = new «hashMapRef»<>(); } this.«AUGMENTATION_FIELD».put(augmentationType, augmentationValue); @@ -354,7 +355,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { } public «type.name» remove«AUGMENTATION_FIELD_UPPER»(«jlClassRef» augmentationType) { - if (this.«AUGMENTATION_FIELD» instanceof «HashMap.importedName») { + if (this.«AUGMENTATION_FIELD» instanceof «hashMapRef») { this.«AUGMENTATION_FIELD».remove(augmentationType); } return this; @@ -400,7 +401,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { @see «target» - @see «Builder.importedName» + @see «BUILDER.importedName» ''' } @@ -431,7 +432,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { override protected generateCopyAugmentation(Type implType) { val augmentationHolderRef = AugmentationHolder.importedName val typeRef = targetType.importedName - val hashMapRef = HashMap.importedName + val hashMapRef = JU_HASHMAP.importedName val augmentTypeRef = augmentType.importedName return ''' if (base instanceof «augmentationHolderRef») { diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend index 5af4d01a43..fac6cf25c5 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend @@ -22,6 +22,7 @@ import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.UINT32_TYP import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.UINT64_TYPE import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.UINT8_TYPE import static org.opendaylight.mdsal.binding.model.util.BindingTypes.SCALAR_TYPE_OBJECT +import static org.opendaylight.mdsal.binding.model.util.Types.BOOLEAN import static org.opendaylight.mdsal.binding.model.util.Types.STRING; import static extension org.apache.commons.text.StringEscapeUtils.escapeJava @@ -430,7 +431,7 @@ class ClassTemplate extends BaseTemplate { int i = 0; return new «genTO.name»( «FOR prop : allProperties SEPARATOR ","» - properties.get(i++).equals(defaultValue) ? «Boolean.importedName».TRUE : null + properties.get(i++).equals(defaultValue) ? «BOOLEAN.importedName».TRUE : null «ENDFOR» ); ''' diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileTemplate.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileTemplate.java index bbe7e66ad1..7da0b97487 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileTemplate.java +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileTemplate.java @@ -11,6 +11,7 @@ import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -55,6 +56,10 @@ class JavaFileTemplate { * {@code java.util.Arrays} as a JavaTypeName. */ static final @NonNull JavaTypeName JU_ARRAYS = JavaTypeName.create(Arrays.class); + /** + * {@code java.util.HashMap} as a JavaTypeName. + */ + static final @NonNull JavaTypeName JU_HASHMAP = JavaTypeName.create(HashMap.class); /** * {@code java.util.List} as a JavaTypeName. */ diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/LengthGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/LengthGenerator.java index b96c4d5ad9..4684e3dfe5 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/LengthGenerator.java +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/LengthGenerator.java @@ -14,7 +14,6 @@ import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.model.api.Type; -import org.opendaylight.yangtools.yang.binding.CodeHelpers; import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -83,8 +82,8 @@ final class LengthGenerator { sb.append(" }\n"); } - sb.append(" ").append(template.importedName(CodeHelpers.class)).append(".throwInvalidLength(\"") - .append(createLengthString(constraint)).append("\", value);\n"); + sb.append(" ").append(template.importedName(JavaFileTemplate.CODEHELPERS)) + .append(".throwInvalidLength(\"").append(createLengthString(constraint)).append("\", value);\n"); } return sb.append("}\n").toString(); @@ -106,8 +105,8 @@ final class LengthGenerator { sb.append(" }\n"); } - sb.append(" ").append(template.importedName(CodeHelpers.class)).append(".throwInvalidLength(\"") - .append(createLengthString(constraint)).append("\", value);\n"); + sb.append(" ").append(template.importedName(JavaFileTemplate.CODEHELPERS)) + .append(".throwInvalidLength(\"").append(createLengthString(constraint)).append("\", value);\n"); } return sb.append("}\n").toString(); -- 2.36.6