Introduce AbstractBaseTemplate 78/106278/3
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 28 May 2023 20:24:49 +0000 (22:24 +0200)
committerRobert Varga <nite@hq.sk>
Mon, 19 Jun 2023 09:52:30 +0000 (09:52 +0000)
Pull down some of the more obvious methods from BaseTemplate to an
abstract class. This improves things by introducing static methods
and having them in Java.

JIRA: MDSAL-562
Change-Id: I1b04477695c7a966e7a829e67d0340c8a551d7f6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBaseTemplate.java [new file with mode: 0644]
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BaseTemplate.xtend

diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBaseTemplate.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBaseTemplate.java
new file mode 100644 (file)
index 0000000..31c5918
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2023 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.mdsal.binding.java.api.generator;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
+import org.opendaylight.mdsal.binding.model.api.GeneratedType;
+import org.opendaylight.yangtools.yang.binding.contract.Naming;
+
+/**
+ * Intermediate Java-based parts under {@link BaseTemplate}.
+ */
+abstract class AbstractBaseTemplate extends JavaFileTemplate {
+    AbstractBaseTemplate(final @NonNull GeneratedType type) {
+        super(type);
+    }
+
+    AbstractBaseTemplate(final AbstractJavaGeneratedType javaType, final GeneratedType type) {
+        super(javaType, type);
+    }
+
+    final @NonNull String generate() {
+        final var sb = new StringBuilder()
+            .append("package ").append(type().getPackageName()).append(";\n");
+
+        // Has side-effects
+        final var body = body();
+
+        final var importBlock = generateImportBlock();
+        if (!importBlock.isEmpty()) {
+            sb.append(importBlock).append('\n');
+        }
+        return sb.append(body).toString();
+    }
+
+    /**
+     * Generate the body of this Java file, i.e. the entire class declaration.
+     *
+     * @return Body of this Java file
+     */
+    abstract @NonNull CharSequence body();
+
+    // Helper patterns
+    static final @NonNull String fieldName(final GeneratedProperty property) {
+        return "_" + property.getName();
+    }
+
+    static final @NonNull String getterMethodName(final @NonNull String propName) {
+        return Naming.GETTER_PREFIX + Naming.toFirstUpper(propName);
+    }
+
+    static final @NonNull String getterMethodName(final GeneratedProperty field) {
+        return getterMethodName(field.getName());
+    }
+}
index 6639d3854c9de407d94d81dbd483ec72788b9652..742b9640b5967d18d3d20b19c0c3370ba748b814 100644 (file)
@@ -35,7 +35,7 @@ import org.opendaylight.yangtools.yang.binding.BaseIdentity
 import org.opendaylight.yangtools.yang.binding.contract.Naming
 import org.opendaylight.yangtools.yang.common.YangDataName
 
-abstract class BaseTemplate extends JavaFileTemplate {
+abstract class BaseTemplate extends AbstractBaseTemplate {
     static final char NEW_LINE = '\n'
     static final char SPACE = ' '
     static val WS_MATCHER = CharMatcher.anyOf("\n\t")
@@ -50,23 +50,7 @@ abstract class BaseTemplate extends JavaFileTemplate {
         super(javaType, type)
     }
 
-    final def generate() {
-        val _body = body()
-        '''
-            package «type.packageName»;
-            «generateImportBlock»
-
-            «_body»
-        '''.toString
-    }
-
-    protected abstract def CharSequence body();
-
     // Helper patterns
-    final protected def fieldName(GeneratedProperty property) {
-        "_" + property.name
-    }
-
     /**
      * Template method which generates the getter method for <code>field</code>
      *
@@ -86,14 +70,6 @@ abstract class BaseTemplate extends JavaFileTemplate {
         }
     '''
 
-    final protected def getterMethodName(GeneratedProperty field) {
-        return field.name.getterMethodName
-    }
-
-    final protected def getterMethodName(String propName) {
-        return '''«Naming.GETTER_PREFIX»«propName.toFirstUpper»'''
-    }
-
     /**
      * Template method which generates the setter method for <code>field</code>
      *