Refactor GeneratedClassLoadingStrategy
[mdsal.git] / binding / mdsal-binding-generator-impl / src / main / java / org / opendaylight / mdsal / binding / generator / util / DefaultSourceCodeGenerator.java
index b873eb2624de398bea3a29c2d0240c8b00fd26aa..ce44f64c5be51d618f7701a17d66b1cf58fb404f 100644 (file)
@@ -5,19 +5,21 @@
  * 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.generator.util;
 
+import com.google.common.io.Files;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.nio.charset.StandardCharsets;
 import javassist.CtClass;
 import javassist.CtField;
 import javassist.CtMethod;
 import javassist.Modifier;
 import javassist.NotFoundException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * The default implementation of the SourceCodeGenerator interface that generates readable source code
@@ -26,7 +28,10 @@ import javassist.NotFoundException;
  * written to a file under a specified directory.
  *
  * @author Thomas Pantelis
+ *
+ * @deprecated Code generation is a concert separate from type mapping and is an implementation detail.
  */
+@Deprecated
 public class DefaultSourceCodeGenerator implements SourceCodeGenerator {
     private static final Logger LOG = LoggerFactory.getLogger(DefaultSourceCodeGenerator.class);
 
@@ -42,17 +47,16 @@ public class DefaultSourceCodeGenerator implements SourceCodeGenerator {
      *     is obtained from a system property (<i>org.opendaylight.yangtools.sal.generatedCodecSourceDir</i>) or
      *     defaults to "generated-codecs".
      */
-    public DefaultSourceCodeGenerator(String generatedSourceDir) {
-        if(generatedSourceDir != null) {
+    public DefaultSourceCodeGenerator(final String generatedSourceDir) {
+        if (generatedSourceDir != null) {
             this.generatedSourceDir = generatedSourceDir;
-        }
-        else {
+        } else {
             this.generatedSourceDir = System.getProperty(GENERATED_SOURCE_DIR_PROP, "generated-codecs");
         }
     }
 
     @Override
-    public void appendField(CtField field, String value) {
+    public void appendField(final CtField field, final String value) {
         try {
             builder.append('\n')
                     .append(Modifier.toString(field.getModifiers()))
@@ -64,12 +68,12 @@ public class DefaultSourceCodeGenerator implements SourceCodeGenerator {
 
             builder.append(";\n");
         } catch (NotFoundException e) {
-            LOG.error("Error building field source for " + field.getName(), e);
+            LOG.error("Error building field source for {}", field.getName(), e);
         }
     }
 
     @Override
-    public void appendMethod(CtMethod method, String code) {
+    public void appendMethod(final CtMethod method, final String code) {
         try {
             builder.append('\n')
                     .append(Modifier.toString(method.getModifiers()))
@@ -89,12 +93,13 @@ public class DefaultSourceCodeGenerator implements SourceCodeGenerator {
 
             builder.append(" )\n").append(code).append("\n\n");
         } catch (NotFoundException e) {
-            LOG.error("Error building method source for " + method.getName(), e);
+            LOG.error("Error building method source for {}", method.getName(), e);
         }
     }
 
     @Override
-    public void outputGeneratedSource(CtClass ctClass) {
+    @SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE")
+    public void outputGeneratedSource(final CtClass ctClass) {
         String name = ctClass.getName();
 
         StringBuilder classBuilder = new StringBuilder();
@@ -119,20 +124,22 @@ public class DefaultSourceCodeGenerator implements SourceCodeGenerator {
                 }
             }
 
-            classBuilder.append(" {\n").append(builder.toString())
-                    .append("\n}");
+            classBuilder.append(" {\n").append(builder).append("\n}");
         } catch (NotFoundException e) {
-            LOG.error("Error building class source for " + name, e);
+            LOG.error("Error building class source for {}", name, e);
             return;
         }
 
         File dir = new File(generatedSourceDir);
-        dir.mkdir();
-        try (FileWriter writer = new FileWriter(new File(dir, name + ".java"))) {
-            writer.append(classBuilder.toString());
+        if (!dir.mkdir()) {
+            LOG.warn("Failed to create directory {}, attempting to continue", generatedSourceDir);
+        }
+
+        try (BufferedWriter writer = Files.newWriter(new File(dir, name + ".java"), StandardCharsets.UTF_8)) {
+            writer.append(classBuilder);
             writer.flush();
         } catch (IOException e) {
-            LOG.error("Error writing class source for " + name, e);
+            LOG.error("Error writing class source for {}", name, e);
         }
     }
 }