Изменить строковые переменные уровня метода с помощью JavaParser - PullRequest
0 голосов
/ 10 мая 2018

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

Я могу изменить значение глобальных переменных, но не могуизмените значение переменных уровня метода.

Оглядываясь вокруг, я получил помощь от this и this ответов, и теперь я могу получить значение для каждой строки кодав каждом методе, например, так:

static void removeStrings(CompilationUnit cu) {
        for (TypeDeclaration typeDec : cu.getTypes()) {
            List<BodyDeclaration> members = typeDec.getMembers();
            if (members != null) {
                for (BodyDeclaration member : members) {
                    if (member.isMethodDeclaration()) {                                                  // If it is a method variable
                        MethodDeclaration method = (MethodDeclaration) member;
                        Optional<BlockStmt> block = method.getBody();
                        NodeList<Statement> statements = block.get().getStatements();

                        for (Statement tmp : statements) {
                            // How do I change the values here?
                        }

                    }
                }
            }
        }
    }

Теперь, как мне изменить значения tmp, если это объявление String?

1 Ответ

0 голосов
/ 10 мая 2018

Вы имеете в виду, как это?

static void removeStrings(CompilationUnit cu) {
    cu.walk(StringLiteralExpr.class, e -> e.setString(""));
}

Тест

CompilationUnit code = JavaParser.parse(
        "class Test {\n" +
            "private static final String CONST = \"This is a constant\";\n" +
            "public static void main(String[] args) {\n" +
                "System.out.println(\"Hello: \" + CONST);" +
            "}\n" +
        "}"
);
System.out.println("BEFORE:");
System.out.println(code);

removeStrings(code);

System.out.println("AFTER:");
System.out.println(code);

Выход

BEFORE:
class Test {

    private static final String CONST = "This is a constant";

    public static void main(String[] args) {
        System.out.println("Hello: " + CONST);
    }
}

AFTER:
class Test {

    private static final String CONST = "";

    public static void main(String[] args) {
        System.out.println("" + CONST);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...