package com.supermathie.sourcegen.test;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import com.supermathie.sourcegen.ClassSource;
import com.supermathie.sourcegen.FormattingRules;
import com.supermathie.sourcegen.JavaSourceFile;
import com.supermathie.sourcegen.MethodSource;
/**
* This class illustrates the basic usage of SourceGen.
*/
public class SourceGenExample {
public static void main(String[] args) throws IOException {
// The JavaSourceFile object represents a Java source file, which
// could be an interface or a class. In this case, we will be
// creating a new class.
JavaSourceFile sourceFile = new JavaSourceFile("com.example.foo");
ArrayList imports = new ArrayList();
imports.add("com.example.bar.*");
sourceFile.setImports(imports);
// Create the public class for the Java source file. Each Java
// source file must contain exactly one public class. It is not
// allowed to change a class from public to non-public or
// vice-versa. An attempt to change the modifiers in this way
// results in an IllegalArgumentException.
boolean publicClass = true;
ClassSource classSource = new ClassSource(publicClass, "Foo");
sourceFile.setPublicClass(classSource);
// If we wanted to create an interface, we would change the class
// modifiers like so:
// classSource.setModifiers(Modifier.INTERFACE);
// This class will implement the IFoo interface.
classSource.setImplements("IFoo");
// Foo will extend Bar.
classSource.setSuperClass("Bar");
// Create a private field "baz" of type "Baz" and add a getter
// and setter method.
classSource.addProperty("Baz", "baz");
// Create a toString method that is not a constructor and returns a
// String.
MethodSource methodSource = new MethodSource(false, "toString", "String");
classSource.addMethod(methodSource);
// Just for fun, we'll make it public and synchronized.
methodSource.setModifiers(Modifier.PUBLIC | Modifier.SYNCHRONIZED);
ArrayList codeLines = new ArrayList();
codeLines.add("StringBuffer sb = new StringBuffer();");
codeLines.add("sb.append(\"Foo: \\\"\");");
codeLines.add("sb.append(baz.toString());");
codeLines.add("sb.append(\"\\\"\");");
codeLines.add("");
codeLines.add("return sb.toString()");
methodSource.setCodeLines(codeLines);
// Use 4 spaces for the indent.
FormattingRules rules = new FormattingRules(true, 4);
// Create the file on disk.
StringBuffer sb = new StringBuffer();
sourceFile.output(rules, sb);
BufferedWriter bw = new BufferedWriter(new FileWriter("c:\\temp\\Foo.java"));
bw.write(sb.toString());
bw.close();
}
}