Search code examples
javacode-generation

Editing/Modifying a .java file programmatically? (not the .class file)


So, here is a piece of code using CodeModel that generates java 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 f = new File("C:/target/classes");
    f.mkdirs();
    cm.build(f);

This code generates a .java file:

package foo;
public class Bar {

       int foo() {
        return  5;
    }
}

However, I DO NOT want CodeModel to create a new java file for me. I do have a .java file already and would like to add a few lines of code to a method inside it. So, I would like the API to modify the java file directly/ create a modified copy of it. Is there a way to doing this?


Solution

  • I know it's been a while since the original post, but one of the more accessible looking Java transformation libraries appears to be Spoon.

    From the Spoon Homepage:

    Spoon enables you to transform (see below) and analyze (see example) source code. Spoon provides a complete and fine-grained Java metamodel where any program element (classes, methods, fields, statements, expressions...) can be accessed both for reading and modification. Spoon takes as input source code and produces transformed source code ready to be compiled.

    Update: Square have also created the JavaPoet source-code generation library, the fluent API looks simple enough to grasp.