A Java API to generate Java source files [closed] A Java API to generate Java source files [closed] java java

A Java API to generate Java source files [closed]


Sun provides an API called CodeModel for generating Java source files using an API. It's not the easiest thing to get information on, but it's there and it works extremely well.

The easiest way to get hold of it is as part of the JAXB 2 RI - the XJC schema-to-java generator uses CodeModel to generate its java source, and it's part of the XJC jars. You can use it just for the CodeModel.

Grab it from http://codemodel.java.net/


Solution found with CodeModel
Thanks, skaffman.

For example, with this code:

JCodeModel cm = new JCodeModel();JDefinedClass dc = cm._class("foo.Bar");JMethod m = dc.method(0, int.class, "foo");m.body()._return(JExpr.lit(5));File file = new File("./target/classes");file.mkdirs();cm.build(file);

I can get this output:

package foo;public class Bar {    int foo() {        return  5;    }}


Solution found with Eclipse JDT's AST
Thanks, Giles.

For example, with this code:

AST ast = AST.newAST(AST.JLS3);CompilationUnit cu = ast.newCompilationUnit();PackageDeclaration p1 = ast.newPackageDeclaration();p1.setName(ast.newSimpleName("foo"));cu.setPackage(p1);ImportDeclaration id = ast.newImportDeclaration();id.setName(ast.newName(new String[] { "java", "util", "Set" }));cu.imports().add(id);TypeDeclaration td = ast.newTypeDeclaration();td.setName(ast.newSimpleName("Foo"));TypeParameter tp = ast.newTypeParameter();tp.setName(ast.newSimpleName("X"));td.typeParameters().add(tp);cu.types().add(td);MethodDeclaration md = ast.newMethodDeclaration();td.bodyDeclarations().add(md);Block block = ast.newBlock();md.setBody(block);MethodInvocation mi = ast.newMethodInvocation();mi.setName(ast.newSimpleName("x"));ExpressionStatement e = ast.newExpressionStatement(mi);block.statements().add(e);System.out.println(cu);

I can get this output:

package foo;import java.util.Set;class Foo<X> {  void MISSING(){    x();  }}