Как добавить новый оператор в ту же строку с помощью JavaParser

Я знаю, что JavaParser работает с AST, но мне было любопытно, можно ли добавлять новые операторы в ту же строку, что и другой . Позвольте мне привести пример того, чего я хотел бы достичь.

Пример ввода (не обращайте внимания на "логику"):

      public class X {
    public static void main(String[] args) {
        int a = 1;
        while(a < 100) {
            a *= 2;
        }
    }
}

Чего я хотел бы добиться, так это добавить утверждение в конце каждого тела цикла - но, если возможно, я хотел бы добавить этот новый оператор рядом с последним оператором в теле. Таким образом, результат должен выглядеть примерно так:

      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\");")
        }
    }
}

0 ответов

Другие вопросы по тегам