我知道JavaParser在 AST 上运行,但我很好奇是否可以在与另一行相同的行上添加新语句。让我举例说明我想要实现的目标。
示例输入X.java
(不要介意“逻辑”):
public class X {
public static void main(String[] args) {
int a = 1;
while(a < 100) {
a *= 2;
}
}
}
我想要实现的是System.out.println("End of loop reached");
在每个循环体的末尾添加语句 - 但是,如果可能的话,我想在循环体中的最后一个语句旁边添加这个新语句。因此,结果应如下所示:
public class X {
public static void main(String[] args) {
int a = 1;
while(a < 100) {
a *= 2; System.out.println("End of loop reached");
}
}
}
目前我使用以下访问者(用 Kotlin 编写),只是为了了解 JavaParser。然而,这会导致为打印语句添加新行。关于如何指示 JavaParser 在同一行添加新节点的任何想法?
class WhileVisitor : VoidVisitorAdapter<Void>() {
override fun visit(whileStatement: WhileStmt, arg: Void?) {
super.visit(whileStatement, arg)
val oldBody = whileStatement.body
if (oldBody.isBlockStmt) {
(oldBody as BlockStmt).addStatement("System.out.println(\"End of loop reached\");")
} else {
whileStatement
.createBlockStatementAsBody()
.addStatement(oldBody)
.addStatement("System.out.println(\"End of loop reached\");")
}
}
}