From c8705b0a997a4b296a9dfcaf56e8a6ac77a9344e Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 21 Oct 2019 20:46:29 +0200 Subject: [PATCH] Specialize JavaFileTemplate.importedName(Type) 95% of call sites do not use annotations, hence we specialize this method and support it through specialized AbstractJavaGeneratedType.getReferenceString(Type). This clearly separates the two codepaths and removes superfluous checks and indirections in both paths. Change-Id: I17bfef631d446d71147b17146d5b2cf71a8be623 Signed-off-by: Robert Varga (cherry picked from commit dbaae85acd37ba622f4f53a7335af14e768fb180) --- .../generator/AbstractJavaGeneratedType.java | 39 +++++++++++-------- .../java/api/generator/JavaFileTemplate.java | 4 ++ 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractJavaGeneratedType.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractJavaGeneratedType.java index 2326fbda61..a02843f01c 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractJavaGeneratedType.java +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractJavaGeneratedType.java @@ -79,29 +79,38 @@ abstract class AbstractJavaGeneratedType { return name.simpleName(); } + final String getReferenceString(final Type type) { + final String ref = getReferenceString(type.getIdentifier()); + return type instanceof ParameterizedType ? getReferenceString(new StringBuilder(ref), type, + ((ParameterizedType) type).getActualTypeArguments()) + : ref; + } + final String getReferenceString(final Type type, final String... annotations) { + // Package-private method, all callers who would be passing an empty array are bound to the more special + // case above, hence we know annotations.length >= 1 final String ref = getReferenceString(type.getIdentifier()); - if (!(type instanceof ParameterizedType)) { - return annotations.length == 0 ? ref : annotate(ref, annotations).toString(); - } + return type instanceof ParameterizedType ? getReferenceString(annotate(ref, annotations), type, + ((ParameterizedType) type).getActualTypeArguments()) + : annotate(ref, annotations).toString(); + } - final StringBuilder sb = annotate(ref, annotations).append('<'); - final Type[] types = ((ParameterizedType) type).getActualTypeArguments(); - if (types.length == 0) { - return sb.append("?>").toString(); + private String getReferenceString(final StringBuilder sb, final Type type, final Type[] arguments) { + if (arguments.length == 0) { + return sb.append("").toString(); } - for (int i = 0; i < types.length; i++) { - final Type t = types[i]; - if (t instanceof WildcardType) { + sb.append('<'); + for (int i = 0; i < arguments.length; i++) { + final Type arg = arguments[i]; + if (arg instanceof WildcardType) { sb.append("? extends "); } - sb.append(getReferenceString(t)); - if (i != types.length - 1) { + sb.append(getReferenceString(arg)); + if (i != arguments.length - 1) { sb.append(", "); } } - return sb.append('>').toString(); } @@ -162,10 +171,6 @@ abstract class AbstractJavaGeneratedType { private static StringBuilder annotate(final String ref, final String... annotations) { final StringBuilder sb = new StringBuilder(); - if (annotations.length == 0) { - return sb.append(ref); - } - final int dot = ref.lastIndexOf('.'); if (dot != -1) { sb.append(ref, 0, dot + 1); 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 7db1bc4e80..58282d64e2 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 @@ -67,6 +67,10 @@ class JavaFileTemplate { .collect(Collectors.joining()); } + final String importedName(final Type intype) { + return javaType.getReferenceString(intype); + } + final String importedName(final Type intype, final String... annotations) { return javaType.getReferenceString(intype, annotations); } -- 2.36.6