Tag generated QNAME field with @NonNull 45/81645/1
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 14 Apr 2019 07:33:15 +0000 (09:33 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 14 Apr 2019 14:04:41 +0000 (16:04 +0200)
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 <robert.varga@pantheon.tech>
(cherry picked from commit 046cf58dc3b606edb90ebb8919f1121b8e4f2540)

binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BaseTemplate.xtend
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/InterfaceTemplate.xtend
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileTemplate.java

index 7c0658f41b6fb328e63a107197ab3a1a8c890b6f..a3aca129c5d36377c622b1bd28a00944da833ba0 100644 (file)
@@ -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<JavaTypeName, String>»
-            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»
index 8efa940ae895b811bbde165223ef12b418480ecc..a3ba65c000d21fd118fbab2b93b6cb1e2019b486 100644 (file)
@@ -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
     }
index 7aee12a6f9ca04fc29136fac0cc2088efe303f2a..7db1bc4e801a75f9c92245a891f8fd75906b0f82 100644 (file)
@@ -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));
     }