From d4ac9a98a59f340e8270a0579d972a5a962c9e75 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 21 Oct 2019 20:44:10 +0200 Subject: [PATCH] Cache most common importedName(Class) references Going through importedName(Class) incurs some cost to look up the JavaTypeName in the global cache. There is a number of common classes we end up using very frequently. We express these references as JavaTypeName constants, hence reducing the need for cache lookups in the hot path. Change-Id: I7f0430f529e82a7d4838ebe2200520d20a5a44a0 Signed-off-by: Robert Varga --- .../generator/AbstractBuilderTemplate.xtend | 11 ++-- .../java/api/generator/BaseTemplate.xtend | 8 +-- .../api/generator/BuilderImplTemplate.xtend | 8 +-- .../java/api/generator/BuilderTemplate.xtend | 22 +++---- .../java/api/generator/ClassTemplate.xtend | 19 +++---- .../java/api/generator/EnumTemplate.xtend | 19 +++---- .../api/generator/InterfaceTemplate.xtend | 5 +- .../java/api/generator/JavaFileTemplate.java | 57 ++++++++++++++++++- .../java/api/generator/UnionTemplate.xtend | 7 +-- 9 files changed, 100 insertions(+), 56 deletions(-) diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBuilderTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBuilderTemplate.xtend index 870be6c1cc..923b78ff22 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBuilderTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBuilderTemplate.xtend @@ -7,6 +7,7 @@ */ package org.opendaylight.mdsal.binding.java.api.generator +import static org.opendaylight.mdsal.binding.model.util.Types.STRING; import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTATION_FIELD import com.google.common.base.MoreObjects @@ -15,7 +16,6 @@ import java.util.Collection import java.util.Collections import java.util.Comparator import java.util.List -import java.util.Map import java.util.Set import org.opendaylight.mdsal.binding.model.api.AnnotationType import org.opendaylight.mdsal.binding.model.api.GeneratedProperty @@ -24,7 +24,6 @@ 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.CodeHelpers import org.opendaylight.yangtools.yang.binding.Identifiable abstract class AbstractBuilderTemplate extends BaseTemplate { @@ -85,20 +84,20 @@ abstract class AbstractBuilderTemplate extends BaseTemplate { def protected final generateAugmentField() { val augmentTypeRef = augmentType.importedName return ''' - «Map.importedName»<«Class.importedName», «augmentTypeRef»> «AUGMENTATION_FIELD» = «Collections.importedName».emptyMap(); + «JU_MAP.importedName»<«CLASS.importedName», «augmentTypeRef»> «AUGMENTATION_FIELD» = «Collections.importedName».emptyMap(); ''' } override generateToString(Collection properties) ''' «IF properties !== null» @«OVERRIDE.importedName» - public «String.importedName» toString() { + public «STRING.importedName» toString() { final «MoreObjects.importedName».ToStringHelper helper = «MoreObjects.importedName».toStringHelper("«targetType.name»"); «FOR property : properties» - «CodeHelpers.importedName».appendValue(helper, "«property.fieldName»", «property.fieldName»); + «CODEHELPERS.importedName».appendValue(helper, "«property.fieldName»", «property.fieldName»); «ENDFOR» «IF augmentType !== null» - «CodeHelpers.importedName».appendValue(helper, "«AUGMENTATION_FIELD»", augmentations().values()); + «CODEHELPERS.importedName».appendValue(helper, "«AUGMENTATION_FIELD»", augmentations().values()); «ENDIF» return helper.toString(); } diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BaseTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BaseTemplate.xtend index fb97640c1a..e1dc45caaf 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BaseTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BaseTemplate.xtend @@ -8,6 +8,7 @@ package org.opendaylight.mdsal.binding.java.api.generator import static org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil.encodeAngleBrackets +import static org.opendaylight.mdsal.binding.model.util.Types.STRING; import com.google.common.base.CharMatcher import com.google.common.base.MoreObjects @@ -37,7 +38,6 @@ import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition.Multiple import org.opendaylight.mdsal.binding.model.util.TypeConstants import org.opendaylight.mdsal.binding.model.util.Types import org.opendaylight.mdsal.binding.spec.naming.BindingMapping -import org.opendaylight.yangtools.yang.binding.CodeHelpers import org.opendaylight.yangtools.yang.common.QName import org.opendaylight.yangtools.yang.common.Uint8 import org.opendaylight.yangtools.yang.common.Uint16 @@ -416,10 +416,10 @@ abstract class BaseTemplate extends JavaFileTemplate { def protected generateToString(Collection properties) ''' «IF !properties.empty» @«OVERRIDE.importedName» - public «String.importedName» toString() { + public «STRING.importedName» toString() { final «MoreObjects.importedName».ToStringHelper helper = «MoreObjects.importedName».toStringHelper(«type.importedName».class); «FOR property : properties» - «CodeHelpers.importedName».appendValue(helper, "«property.fieldName»", «property.fieldName»); + «CODEHELPERS.importedName».appendValue(helper, "«property.fieldName»", «property.fieldName»); «ENDFOR» return helper.toString(); } @@ -481,7 +481,7 @@ abstract class BaseTemplate extends JavaFileTemplate { «FOR currentConstant : type.getConstantDefinitions» «IF currentConstant.getName.startsWith(TypeConstants.PATTERN_CONSTANT_NAME) && fieldUpperCase.equals(currentConstant.getName.substring(TypeConstants.PATTERN_CONSTANT_NAME.length))» - «CodeHelpers.importedName».checkPattern(value, «Constants.MEMBER_PATTERN_LIST»«fieldName», «Constants.MEMBER_REGEX_LIST»«fieldName»); + «CODEHELPERS.importedName».checkPattern(value, «Constants.MEMBER_PATTERN_LIST»«fieldName», «Constants.MEMBER_REGEX_LIST»«fieldName»); «ENDIF» «ENDFOR» ''' 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 137b24f07d..a57d5778de 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 @@ -12,8 +12,6 @@ import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTA import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME import java.util.List -import java.util.Map -import java.util.Objects import org.opendaylight.mdsal.binding.model.api.AnnotationType import org.opendaylight.mdsal.binding.model.api.GeneratedProperty import org.opendaylight.mdsal.binding.model.api.GeneratedType @@ -76,7 +74,7 @@ class BuilderImplTemplate extends AbstractBuilderTemplate { «hashCodeResult(properties)» «IF augmentType !== null» - result = prime * result + «Objects.importedName».hashCode(augmentations()); + result = prime * result + «JU_OBJECTS.importedName».hashCode(augmentations()); «ENDIF» hash = result; @@ -115,12 +113,12 @@ class BuilderImplTemplate extends AbstractBuilderTemplate { if (getClass() == obj.getClass()) { // Simple case: we are comparing against self «type.name» otherImpl = («type.name») obj; - if (!«Objects.importedName».equals(augmentations(), otherImpl.augmentations())) { + if (!«JU_OBJECTS.importedName».equals(augmentations(), otherImpl.augmentations())) { return false; } } else { // Hard case: compare our augments with presence there... - for («Map.importedName».Entry<«Class.importedName», «augmentType.importedName»> e : augmentations().entrySet()) { + for («JU_MAP.importedName».Entry<«CLASS.importedName», «augmentType.importedName»> e : augmentations().entrySet()) { if (!e.getValue().equals(other.«AUGMENTABLE_AUGMENTATION_NAME»(e.getKey()))) { return false; } 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 854114bfb1..89c1ed1861 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 @@ -19,7 +19,6 @@ import java.util.HashSet import java.util.List import java.util.Map import java.util.Set -import java.util.regex.Pattern import org.opendaylight.mdsal.binding.model.api.AnnotationType import org.opendaylight.mdsal.binding.model.api.GeneratedProperty import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject @@ -32,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.CodeHelpers import org.opendaylight.yangtools.yang.binding.DataObject /** @@ -165,7 +163,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { «FOR impl : targetType.getAllIfcs» «generateIfCheck(impl, done)» «ENDFOR» - «CodeHelpers.importedName».validValue(isValidArg, arg, "«targetType.getAllIfcs.toListOfNames»"); + «CODEHELPERS.importedName».validValue(isValidArg, arg, "«targetType.getAllIfcs.toListOfNames»"); } «ENDIF» «ENDIF» @@ -256,12 +254,13 @@ class BuilderTemplate extends AbstractBuilderTemplate { «IF c.getName.startsWith(TypeConstants.PATTERN_CONSTANT_NAME)» «val cValue = c.value as Map» «val String fieldSuffix = c.getName.substring(TypeConstants.PATTERN_CONSTANT_NAME.length)» + «val jurPatternRef = JUR_PATTERN.importedName» «IF cValue.size == 1» «val firstEntry = cValue.entrySet.iterator.next» - private static final «Pattern.importedName» «Constants.MEMBER_PATTERN_LIST»«fieldSuffix» = «Pattern.importedName».compile("«firstEntry.key.escapeJava»"); + private static final «jurPatternRef» «Constants.MEMBER_PATTERN_LIST»«fieldSuffix» = «jurPatternRef».compile("«firstEntry.key.escapeJava»"); private static final String «Constants.MEMBER_REGEX_LIST»«fieldSuffix» = "«firstEntry.value.escapeJava»"; «ELSE» - private static final «Pattern.importedName»[] «Constants.MEMBER_PATTERN_LIST»«fieldSuffix» = «CodeHelpers.importedName».compilePatterns(«ImmutableList.importedName».of( + private static final «jurPatternRef»[] «Constants.MEMBER_PATTERN_LIST»«fieldSuffix» = «CODEHELPERS.importedName».compilePatterns(«ImmutableList.importedName».of( «FOR v : cValue.keySet SEPARATOR ", "»"«v.escapeJava»"«ENDFOR»)); private static final String[] «Constants.MEMBER_REGEX_LIST»«fieldSuffix» = { « FOR v : cValue.values SEPARATOR ", "»"«v.escapeJava»"«ENDFOR» }; @@ -320,7 +319,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { */ @Deprecated(forRemoval = true) public «type.getName» «setterName»(final «uintType.importedName» value) { - return «setterName»(«CodeHelpers.importedName».compatUint(value)); + return «setterName»(«CODEHELPERS.importedName».compatUint(value)); } «ENDIF» ''' @@ -351,7 +350,8 @@ class BuilderTemplate extends AbstractBuilderTemplate { «IF augmentType !== null» «val augmentTypeRef = augmentType.importedName» - public «type.name» add«AUGMENTATION_FIELD_UPPER»(«Class.importedName» augmentationType, «augmentTypeRef» augmentationValue) { + «val jlClassRef = CLASS.importedName» + public «type.name» add«AUGMENTATION_FIELD_UPPER»(«jlClassRef» augmentationType, «augmentTypeRef» augmentationValue) { if (augmentationValue == null) { return remove«AUGMENTATION_FIELD_UPPER»(augmentationType); } @@ -364,7 +364,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { return this; } - public «type.name» remove«AUGMENTATION_FIELD_UPPER»(«Class.importedName» augmentationType) { + public «type.name» remove«AUGMENTATION_FIELD_UPPER»(«jlClassRef» augmentationType) { if (this.«AUGMENTATION_FIELD» instanceof «HashMap.importedName») { this.«AUGMENTATION_FIELD».remove(augmentationType); } @@ -427,8 +427,8 @@ class BuilderTemplate extends AbstractBuilderTemplate { private def generateAugmentation() ''' @«SUPPRESS_WARNINGS.importedName»({ "unchecked", "checkstyle:methodTypeParameterName"}) - public E$$ «AUGMENTABLE_AUGMENTATION_NAME»(«Class.importedName» augmentationType) { - return (E$$) «AUGMENTATION_FIELD».get(«CodeHelpers.importedName».nonNullValue(augmentationType, "augmentationType")); + public E$$ «AUGMENTABLE_AUGMENTATION_NAME»(«CLASS.importedName» augmentationType) { + return (E$$) «AUGMENTATION_FIELD».get(«CODEHELPERS.importedName».nonNullValue(augmentationType, "augmentationType")); } ''' @@ -447,7 +447,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { return ''' if (base instanceof «augmentationHolderRef») { @SuppressWarnings("unchecked") - «Map.importedName»<«Class.importedName», «augmentTypeRef»> aug =((«augmentationHolderRef»<«typeRef»>) base).augmentations(); + «JU_MAP.importedName»<«CLASS.importedName», «augmentTypeRef»> aug =((«augmentationHolderRef»<«typeRef»>) base).augmentations(); if (!aug.isEmpty()) { this.«AUGMENTATION_FIELD» = new «hashMapRef»<>(aug); } 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 6c330ef91b..7000c109fd 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,7 +22,6 @@ import java.util.Base64; import java.util.Comparator import java.util.List import java.util.Map -import java.util.regex.Pattern import javax.management.ConstructorParameters import org.gaul.modernizer_maven_annotations.SuppressModernizer import org.opendaylight.mdsal.binding.model.api.ConcreteType @@ -33,7 +32,6 @@ import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject import org.opendaylight.mdsal.binding.model.api.Restrictions import org.opendaylight.mdsal.binding.model.api.Type import org.opendaylight.mdsal.binding.model.util.TypeConstants -import org.opendaylight.yangtools.yang.binding.CodeHelpers import org.opendaylight.yangtools.yang.common.Empty import org.opendaylight.yangtools.yang.common.Uint16 import org.opendaylight.yangtools.yang.common.Uint32 @@ -251,7 +249,7 @@ class ClassTemplate extends BaseTemplate { * If we have patterns, we need to apply them to the value field. This is a sad consequence of how this code is * structured. */» - «CodeHelpers.importedName».requireValue(_value); + «CODEHELPERS.importedName».requireValue(_value); «genPatternEnforcer("_value")» «FOR p : properties» @@ -270,7 +268,7 @@ class ClassTemplate extends BaseTemplate { return "" } - val compatUint = CodeHelpers.importedName + ".compatUint(" + val compatUint = CODEHELPERS.importedName + ".compatUint(" return ''' /** @@ -316,7 +314,7 @@ class ClassTemplate extends BaseTemplate { def private genPatternEnforcer(String ref) ''' «FOR c : consts» «IF c.name == TypeConstants.PATTERN_CONSTANT_NAME» - «CodeHelpers.importedName».checkPattern(«ref», «Constants.MEMBER_PATTERN_LIST», «Constants.MEMBER_REGEX_LIST»); + «CODEHELPERS.importedName».checkPattern(«ref», «Constants.MEMBER_PATTERN_LIST», «Constants.MEMBER_REGEX_LIST»); «ENDIF» «ENDFOR» ''' @@ -415,7 +413,7 @@ class ClassTemplate extends BaseTemplate { ''' def protected bitsArgs() ''' - «List.importedName»<«String.importedName»> properties = «Lists.importedName».newArrayList(«allProperties.propsAsArgs»); + «JU_LIST.importedName»<«STRING.importedName»> properties = «Lists.importedName».newArrayList(«allProperties.propsAsArgs»); if (!properties.contains(defaultValue)) { throw new «IllegalArgumentException.importedName»("invalid default parameter"); } @@ -496,13 +494,14 @@ class ClassTemplate extends BaseTemplate { «FOR c : consts» «IF c.name == TypeConstants.PATTERN_CONSTANT_NAME» «val cValue = c.value as Map» - public static final «List.importedName» «TypeConstants.PATTERN_CONSTANT_NAME» = «ImmutableList.importedName».of(« + «val jurPatternRef = JUR_PATTERN.importedName» + public static final «JU_LIST.importedName» «TypeConstants.PATTERN_CONSTANT_NAME» = «ImmutableList.importedName».of(« FOR v : cValue.keySet SEPARATOR ", "»"«v.escapeJava»"«ENDFOR»); «IF cValue.size == 1» - private static final «Pattern.importedName» «Constants.MEMBER_PATTERN_LIST» = «Pattern.importedName».compile(«TypeConstants.PATTERN_CONSTANT_NAME».get(0)); + private static final «jurPatternRef» «Constants.MEMBER_PATTERN_LIST» = «jurPatternRef».compile(«TypeConstants.PATTERN_CONSTANT_NAME».get(0)); private static final String «Constants.MEMBER_REGEX_LIST» = "«cValue.values.iterator.next.escapeJava»"; «ELSE» - private static final «Pattern.importedName»[] «Constants.MEMBER_PATTERN_LIST» = «CodeHelpers.importedName».compilePatterns(«TypeConstants.PATTERN_CONSTANT_NAME»); + private static final «jurPatternRef»[] «Constants.MEMBER_PATTERN_LIST» = «CODEHELPERS.importedName».compilePatterns(«TypeConstants.PATTERN_CONSTANT_NAME»); private static final String[] «Constants.MEMBER_REGEX_LIST» = { « FOR v : cValue.values SEPARATOR ", "»"«v.escapeJava»"«ENDFOR» }; «ENDIF» @@ -547,7 +546,7 @@ class ClassTemplate extends BaseTemplate { «hashCodeResult(genTO.hashCodeIdentifiers)» return result; «ELSE» - return «CodeHelpers.importedName».wrapperHashCode(«genTO.hashCodeIdentifiers.get(0).fieldName»); + return «CODEHELPERS.importedName».wrapperHashCode(«genTO.hashCodeIdentifiers.get(0).fieldName»); «ENDIF» } ''' diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/EnumTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/EnumTemplate.xtend index ca45d66ff4..51cfab310e 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/EnumTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/EnumTemplate.xtend @@ -8,11 +8,10 @@ package org.opendaylight.mdsal.binding.java.api.generator import static org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil.encodeAngleBrackets +import static org.opendaylight.mdsal.binding.model.util.Types.STRING; import com.google.common.collect.ImmutableMap import com.google.common.collect.ImmutableMap.Builder -import java.util.Map -import java.util.Objects import java.util.Optional import org.opendaylight.mdsal.binding.model.api.Enumeration import org.opendaylight.mdsal.binding.model.api.GeneratedType @@ -70,11 +69,11 @@ class EnumTemplate extends BaseTemplate { public enum «enums.name» implements «org.opendaylight.yangtools.yang.binding.Enumeration.importedName» { «writeEnumeration(enums)» - private static final «Map.importedName»<«String.importedName», «enums.name»> NAME_MAP; - private static final «Map.importedName»<«Integer.importedName», «enums.name»> VALUE_MAP; + private static final «JU_MAP.importedName»<«STRING.importedName», «enums.name»> NAME_MAP; + private static final «JU_MAP.importedName»<«Integer.importedName», «enums.name»> VALUE_MAP; static { - final «Builder.importedName»<«String.importedName», «enums.name»> nb = «ImmutableMap.importedName».builder(); + final «Builder.importedName»<«STRING.importedName», «enums.name»> nb = «ImmutableMap.importedName».builder(); final «Builder.importedName»<«Integer.importedName», «enums.name»> vb = «ImmutableMap.importedName».builder(); for («enums.name» enumItem : «enums.name».values()) { vb.put(enumItem.value, enumItem); @@ -85,16 +84,16 @@ class EnumTemplate extends BaseTemplate { VALUE_MAP = vb.build(); } - private final «String.importedName» name; + private final «STRING.importedName» name; private final int value; - private «enums.name»(int value, «String.importedName» name) { + private «enums.name»(int value, «STRING.importedName» name) { this.value = value; this.name = name; } @«OVERRIDE.importedName» - public «String.importedName» getName() { + public «STRING.importedName» getName() { return name; } @@ -110,8 +109,8 @@ class EnumTemplate extends BaseTemplate { * @return corresponding «enums.name» item, if present * @throws NullPointerException if name is null */ - public static «Optional.importedName»<«enums.name»> forName(«String.importedName» name) { - return «Optional.importedName».ofNullable(NAME_MAP.get(«Objects.importedName».requireNonNull(name))); + public static «Optional.importedName»<«enums.name»> forName(«STRING.importedName» name) { + return «Optional.importedName».ofNullable(NAME_MAP.get(«JU_OBJECTS.importedName».requireNonNull(name))); } /** diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/InterfaceTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/InterfaceTemplate.xtend index b5b62a3ba3..afe3651461 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/InterfaceTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/InterfaceTemplate.xtend @@ -21,7 +21,6 @@ import org.opendaylight.mdsal.binding.model.api.GeneratedType import org.opendaylight.mdsal.binding.model.api.MethodSignature import org.opendaylight.mdsal.binding.model.api.Type import org.opendaylight.mdsal.binding.model.util.TypeConstants -import org.opendaylight.yangtools.yang.binding.CodeHelpers /** * Template for generating JAVA interfaces. @@ -195,7 +194,7 @@ class InterfaceTemplate extends BaseTemplate { def private generateDefaultImplementedInterface() ''' @«OVERRIDE.importedName» - default «Class.importedName»<«type.fullyQualifiedName»> «DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME»() { + default «CLASS.importedName»<«type.fullyQualifiedName»> «DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME»() { return «type.fullyQualifiedName».class; } ''' @@ -206,7 +205,7 @@ class InterfaceTemplate extends BaseTemplate { «formatDataForJavaDoc(method, "@return " + asCode(ret.fullyQualifiedName) + " " + asCode(propertyNameFromGetter(method)) + ", or an empty list if it is not present")» «method.annotations.generateAnnotations» default «ret.importedNonNull» «name»() { - return «CodeHelpers.importedName».nonnull(«getGetterMethodForNonnull(name)»()); + return «CODEHELPERS.importedName».nonnull(«getGetterMethodForNonnull(name)»()); } ''' 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 1da129d4ae..5cceeef759 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,8 +11,11 @@ import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import java.util.Arrays; +import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.regex.Pattern; import java.util.stream.Collectors; import org.opendaylight.mdsal.binding.model.api.ConcreteType; import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; @@ -23,17 +26,65 @@ import org.opendaylight.mdsal.binding.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.model.api.Restrictions; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.util.Types; +import org.opendaylight.yangtools.yang.binding.CodeHelpers; /** * Base Java file template. Contains a non-null type and imports which the generated code refers to. */ class JavaFileTemplate { - static final JavaTypeName NONNULL = JavaTypeName.create("org.eclipse.jdt.annotation", "NonNull"); - static final JavaTypeName NULLABLE = JavaTypeName.create("org.eclipse.jdt.annotation", "Nullable"); + /** + * {@code java.lang.Class} as a JavaTypeName. + */ + static final JavaTypeName CLASS = JavaTypeName.create(Class.class); + /** + * {@code java.lang.Deprecated} as a JavaTypeName. + */ static final JavaTypeName DEPRECATED = JavaTypeName.create(Deprecated.class); + /** + * {@code java.lang.Override} as a JavaTypeName. + */ static final JavaTypeName OVERRIDE = JavaTypeName.create(Override.class); + + /** + * {@code java.lang.SuppressWarnings} as a JavaTypeName. + */ static final JavaTypeName SUPPRESS_WARNINGS = JavaTypeName.create(SuppressWarnings.class); + /** + * {@code java.util.Arrays} as a JavaTypeName. + */ + static final JavaTypeName JU_ARRAYS = JavaTypeName.create(Arrays.class); + /** + * {@code java.util.List} as a JavaTypeName. + */ + static final JavaTypeName JU_LIST = JavaTypeName.create(List.class); + /** + * {@code java.util.Map} as a JavaTypeName. + */ + static final JavaTypeName JU_MAP = JavaTypeName.create(Map.class); + /** + * {@code java.util.Objects} as a JavaTypeName. + */ + static final JavaTypeName JU_OBJECTS = JavaTypeName.create(Objects.class); + /** + * {@code java.util.regex.Pattern} as a JavaTypeName. + */ + static final JavaTypeName JUR_PATTERN = JavaTypeName.create(Pattern.class); + + /** + * {@code org.eclipse.jdt.annotation.NonNull} as a JavaTypeName. + */ + static final JavaTypeName NONNULL = JavaTypeName.create("org.eclipse.jdt.annotation", "NonNull"); + /** + * {@code org.eclipse.jdt.annotation.Nullable} as a JavaTypeName. + */ + static final JavaTypeName NULLABLE = JavaTypeName.create("org.eclipse.jdt.annotation", "Nullable"); + + /** + * {@code org.opendaylight.yangtools.yang.binding.CodeHelpers} as a JavaTypeName. + */ + static final JavaTypeName CODEHELPERS = JavaTypeName.create(CodeHelpers.class); + private final AbstractJavaGeneratedType javaType; private final GeneratedType type; @@ -128,7 +179,7 @@ class JavaFileTemplate { * @return Imported class name */ final String importedUtilClass(final GeneratedProperty property) { - return importedName(property.getReturnType().getName().indexOf('[') != -1 ? Arrays.class : Objects.class); + return importedName(property.getReturnType().getName().indexOf('[') != -1 ? JU_ARRAYS : JU_OBJECTS); } static final Restrictions restrictionsForSetter(final Type actualType) { diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend index 9f1582cdc4..78c3b2eafd 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend @@ -12,7 +12,6 @@ import static org.opendaylight.mdsal.binding.model.util.Types.BYTE_ARRAY; import static org.opendaylight.mdsal.binding.model.util.Types.STRING; import static org.opendaylight.mdsal.binding.model.util.Types.getOuterClassName; -import java.util.Arrays import java.util.Base64; import org.gaul.modernizer_maven_annotations.SuppressModernizer import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject @@ -102,7 +101,7 @@ class UnionTemplate extends ClassTemplate { * * @return String representation of this union's value. */ - public «String.importedName» stringValue() { + public «STRING.importedName» stringValue() { «FOR property : finalProperties» «val field = property.fieldName» if («field» != null) { @@ -115,7 +114,7 @@ class UnionTemplate extends ClassTemplate { return «field».toString(); «ELSEIF BYTE_ARRAY.equals(propRet)» ««« type binary - return new «String.importedName»(«field»); + return new «STRING.importedName»(«field»); «ELSEIF propRet.fullyQualifiedName.startsWith("java.lang") || propRet instanceof Enumeration || propRet.fullyQualifiedName.startsWith("java.math")» ««« type int*, decimal64 or enumeration* @@ -140,7 +139,7 @@ class UnionTemplate extends ClassTemplate { && (propRet as GeneratedTransferObject).typedef // Is it a typedef && (propRet as GeneratedTransferObject).baseType instanceof BitsTypeDefinition» ««« generated bits typedef - return «Arrays.importedName».toString(«field».getValue()); + return «JU_ARRAYS.importedName».toString(«field».getValue()); «ELSE» ««« generated type return «field».getValue().toString(); -- 2.36.6