利用Eclipse JDT ASTRewrite向java源码添加代码

来源:互联网 发布:程序员修炼之道 mobi 编辑:程序博客网 时间:2024/05/18 01:23

1、修改前

public class Main {    public static void main(String[] args) {    }    public static void add() {        int i = 1;        System.out.println(i);    }}

2、修改后

public class Main {    public static void main(String[] args) {        add();    }    public static void add() {        int i = 1;        System.out.println(i);    }}

3、源码

private void AddStatements() throws MalformedTreeException, BadLocationException, CoreException {        IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("testAddComments");        IJavaProject javaProject = JavaCore.create(project);        IPackageFragment package1 = javaProject.getPackageFragments()[0];        // get first compilation unit        ICompilationUnit unit = package1.getCompilationUnits()[0];        // parse compilation unit        CompilationUnit astRoot = parse(unit);        // create a ASTRewrite        AST ast = astRoot.getAST();        ASTRewrite rewriter = ASTRewrite.create(ast);        // for getting insertion position        TypeDeclaration typeDecl = (TypeDeclaration) astRoot.types().get(0);        MethodDeclaration methodDecl = typeDecl.getMethods()[0];        Block block = methodDecl.getBody();        // create new statements for insertion        MethodInvocation newInvocation = ast.newMethodInvocation();        newInvocation.setName(ast.newSimpleName("add"));        Statement newStatement = ast.newExpressionStatement(newInvocation);        //create ListRewrite        ListRewrite listRewrite = rewriter.getListRewrite(block, Block.STATEMENTS_PROPERTY);        listRewrite.insertFirst(newStatement, null);        TextEdit edits = rewriter.rewriteAST();        // apply the text edits to the compilation unit        Document document = new Document(unit.getSource());        edits.apply(document);        // this is the code for adding statements        unit.getBuffer().setContents(document.get());    }