java - 使用 JavaParser 更改方法级别的字符串变量
问题描述
我想使用 JavaParser 将 Java 源代码中的所有 String 变量值从任何值更改为""
.
我可以更改全局变量的值,但无法更改方法级别变量的值。
环顾四周,我从这个和这个答案中得到了帮助,现在我可以得到每个方法中每一行代码的值,如下所示:
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
现在,如果它是一个字符串声明,我该如何更改它的值?
解决方案
你的意思是这样吗?
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);
}
}
推荐阅读
- angularjs - 无法访问我的模板指令中的任何路由
- for-loop - For循环打印出相同的结果
- python - 向flask+sqlalchemy关系列添加过滤器
- python - 构建用于牛眼皮疹识别的卷积神经网络
- node.js - 节点请求实体太大 body-parser 限制设置
- github-api - 在作曲家休息服务器中使用 github 进行身份验证后获取用户数据
- php - CSV文件未加载到mysql数据库中
- sql - Oracle SQL - 用于复制具有不同结果的列的嵌套选择语句
- javascript - 如何在 Vue Native 中使用 Firebase 身份验证
- django - 从 Django 中的 PayPal 按钮检索自定义变量