* 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
* 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);
* 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()))
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()))
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();
}
}
- 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);
}
}
}