From: Robert Varga Date: Sun, 14 Apr 2019 07:33:15 +0000 (+0200) Subject: Tag generated QNAME field with @NonNull X-Git-Tag: v3.0.9~22 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=c073b95acc499c3e3a185c6b806c9c910e94dbbf;p=mdsal.git Tag generated QNAME field with @NonNull Improve code generation, so that users can be sure QNAME is never nullable, improving interactions with APIs which take a QName. Change-Id: I0454ba448fb9edb605d04e97901381ae0f8a79d0 JIRA: MDSAL-441 Signed-off-by: Robert Varga (cherry picked from commit 046cf58dc3b606edb90ebb8919f1121b8e4f2540) --- 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 7c0658f41b..a3aca129c5 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 @@ -436,7 +436,7 @@ abstract class BaseTemplate extends JavaFileTemplate { def protected emitConstant(Constant c) ''' «IF BindingMapping.QNAME_STATIC_FIELD_NAME.equals(c.name)» «val entry = c.value as Entry» - public static final «c.type.importedName» «c.name» = «entry.key.importedName».«BindingMapping.MODULE_INFO_QNAMEOF_METHOD_NAME»("«entry.value»"); + public static final «c.type.importedNonNull» «c.name» = «entry.key.importedName».«BindingMapping.MODULE_INFO_QNAMEOF_METHOD_NAME»("«entry.value»"); «ELSE» public static final «c.type.importedName» «c.name» = «c.value»; «ENDIF» 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 8efa940ae8..a3ba65c000 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 @@ -16,7 +16,6 @@ import org.opendaylight.mdsal.binding.model.api.AnnotationType import org.opendaylight.mdsal.binding.model.api.Constant import org.opendaylight.mdsal.binding.model.api.Enumeration import org.opendaylight.mdsal.binding.model.api.GeneratedType -import org.opendaylight.mdsal.binding.model.api.JavaTypeName import org.opendaylight.mdsal.binding.model.api.MethodSignature import org.opendaylight.mdsal.binding.model.api.Type import org.opendaylight.mdsal.binding.model.util.TypeConstants @@ -26,9 +25,6 @@ import org.opendaylight.yangtools.yang.binding.CodeHelpers * Template for generating JAVA interfaces. */ class InterfaceTemplate extends BaseTemplate { - static val JavaTypeName NONNULL = JavaTypeName.create("org.eclipse.jdt.annotation", "NonNull") - static val JavaTypeName NULLABLE = JavaTypeName.create("org.eclipse.jdt.annotation", "Nullable") - /** * List of constant instances which are generated as JAVA public static final attributes. */ @@ -207,14 +203,14 @@ class InterfaceTemplate extends BaseTemplate { «val name = method.name» «formatDataForJavaDoc(method, "@return " + asCode(ret.fullyQualifiedName) + " " + asCode(propertyNameFromGetter(method)) + ", or an empty list if it is not present")» «method.annotations.generateAnnotations» - default «ret.importedName(NONNULL.importedName)» «name»() { + default «ret.importedNonNull» «name»() { return «CodeHelpers.importedName».nonnull(«getGetterMethodForNonnull(name)»()); } ''' def private String nullableType(Type type) { if (type.isObject) { - return type.importedName(NULLABLE.importedName) + return type.importedNullable } return type.importedName } 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 7aee12a6f9..7db1bc4e80 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 @@ -27,6 +27,9 @@ import org.opendaylight.mdsal.binding.model.util.Types; * 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"); + private final AbstractJavaGeneratedType javaType; private final GeneratedType type; @@ -76,6 +79,14 @@ class JavaFileTemplate { return javaType.getReferenceString(intype); } + final String importedNonNull(final Type intype) { + return importedName(intype, importedName(NONNULL)); + } + + final String importedNullable(final Type intype) { + return importedName(intype, importedName(NULLABLE)); + } + final void addImport(final Class cls) { javaType.getReferenceString(JavaTypeName.create(cls)); }