Correct YangModuleInfo.getInstance() nullness warning
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / main / java / org / opendaylight / mdsal / binding / java / api / generator / JavaFileTemplate.java
index aa3696136a4c82dc29016acbcac7c710f69377e4..5283f874be29ac893d30429259b3b281e9a45088 100644 (file)
@@ -11,9 +11,13 @@ 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.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.model.api.ConcreteType;
 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
@@ -23,21 +27,69 @@ 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");
-    static final JavaTypeName DEPRECATED = JavaTypeName.create(Deprecated.class);
-    static final JavaTypeName OVERRIDE = JavaTypeName.create(Override.class);
-    static final JavaTypeName SUPPRESS_WARNINGS = JavaTypeName.create(SuppressWarnings.class);
+    /**
+     * {@code java.lang.Class} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName CLASS = JavaTypeName.create(Class.class);
+    /**
+     * {@code java.lang.Deprecated} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName DEPRECATED = JavaTypeName.create(Deprecated.class);
+    /**
+     * {@code java.lang.Override} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName OVERRIDE = JavaTypeName.create(Override.class);
+
+    /**
+     * {@code java.lang.SuppressWarnings} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName SUPPRESS_WARNINGS = JavaTypeName.create(SuppressWarnings.class);
+
+    /**
+     * {@code java.util.Arrays} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName JU_ARRAYS = JavaTypeName.create(Arrays.class);
+    /**
+     * {@code java.util.List} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName JU_LIST = JavaTypeName.create(List.class);
+    /**
+     * {@code java.util.Map} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName JU_MAP = JavaTypeName.create(Map.class);
+    /**
+     * {@code java.util.Objects} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName JU_OBJECTS = JavaTypeName.create(Objects.class);
+    /**
+     * {@code java.util.regex.Pattern} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName JUR_PATTERN = JavaTypeName.create(Pattern.class);
+
+    /**
+     * {@code org.eclipse.jdt.annotation.NonNull} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName NONNULL = JavaTypeName.create("org.eclipse.jdt.annotation", "NonNull");
+    /**
+     * {@code org.eclipse.jdt.annotation.Nullable} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName NULLABLE = JavaTypeName.create("org.eclipse.jdt.annotation", "Nullable");
+
+    /**
+     * {@code org.opendaylight.yangtools.yang.binding.CodeHelpers} as a JavaTypeName.
+     */
+    static final @NonNull JavaTypeName CODEHELPERS = JavaTypeName.create(CodeHelpers.class);
 
     private final AbstractJavaGeneratedType javaType;
     private final GeneratedType type;
 
-    JavaFileTemplate(final GeneratedType type) {
+    JavaFileTemplate(final @NonNull GeneratedType type) {
         this(new TopLevelJavaGeneratedType(type), type);
     }
 
@@ -71,34 +123,34 @@ class JavaFileTemplate {
                 .collect(Collectors.joining());
     }
 
-    final String importedJavadocName(final Type intype) {
+    final @NonNull String importedJavadocName(final @NonNull Type intype) {
         return importedName(intype instanceof ParameterizedType ? ((ParameterizedType) intype).getRawType() : intype);
     }
 
-    final String importedName(final Type intype, final String... annotations) {
-        return javaType.getReferenceString(intype, annotations);
+    final @NonNull String importedName(final @NonNull Type intype) {
+        return javaType.getReferenceString(intype);
+    }
+
+    final @NonNull String importedName(final @NonNull Type intype, final @NonNull String annotation) {
+        return javaType.getReferenceString(intype, annotation);
     }
 
-    final String importedName(final Class<?> cls) {
+    final @NonNull String importedName(final Class<?> cls) {
         return importedName(Types.typeForClass(cls));
     }
 
-    final String importedName(final JavaTypeName intype) {
+    final @NonNull String importedName(final @NonNull JavaTypeName intype) {
         return javaType.getReferenceString(intype);
     }
 
-    final String importedNonNull(final Type intype) {
+    final @NonNull String importedNonNull(final @NonNull Type intype) {
         return importedName(intype, importedName(NONNULL));
     }
 
-    final String importedNullable(final Type intype) {
+    final @NonNull String importedNullable(final @NonNull Type intype) {
         return importedName(intype, importedName(NULLABLE));
     }
 
-    final void addImport(final Class<?> cls) {
-        javaType.getReferenceString(JavaTypeName.create(cls));
-    }
-
     // Exposed for BuilderTemplate
     boolean isLocalInnerClass(final JavaTypeName name) {
         final Optional<JavaTypeName> optEnc = name.immediatelyEnclosingClass();
@@ -124,7 +176,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) {