2017-07-28 66 views
1

我在Eclipse Neon中使用JDT來編寫Java代碼生成器插件。在某一時刻,我已經有一個正確生成類的AST和用空體的方法,如下面的一個:如何使用ASTRewrite插入代碼片段插入方法的正文?

// Simplified for this question 
public class X { 
    public void x(void) { 
    } 
} 

現在我在StringBuilder實例的代碼段準備好被用作該空方法體的代碼。代碼被正確寫入,所以在插入之後,它將編譯時沒有錯誤。

經過大量的帖子,foruns和JDT文檔後,我找不到在AST中插入該代碼片段的方法。

PS .:我的一個嘗試是使用ASTParser類從我的代碼片段生成一個新的AST,實際上它的工作原理。但是,由於片段的AST與目標類AST不同,因此不能用作方法體。

回答

1

如果您的方法體已經有AST,則可以在將方法複製到正確的AST實例後將其插入到方法中。見方法org.eclipse.jdt.core.dom.ASTNode.copySubtree(AST, ASTNode)

或者,如果你控制的那一刻,當ASTRewrite產生TextEdit是你可以或許只是直接添加自己的InsertEdit,之前所有的編輯一起被應用。在這種情況下,找到正確的插入補償可能是棘手的部分。

+0

完美契合我的需求!非常感謝你!!! – AlexSC