如何解决JavaParser:如何将方法调用添加到链接的调用中?
return new ThingBuilder().withA(a).withB(b).build();
我如何使用JavaParser添加另一个链接的调用以最终得到如下代码:
return new ThingBuilder().withA(a).withB(b).withC(c).build();
我已经熟悉ModifierVisitor
,但是找不到在正确位置添加呼叫的好方法,即添加到相关的MethodCallExpr
(表达式为{ {1}},方法是new ThingBuilder().withA(a).withB(b)
)。
如果可能的话,也可以将其添加到顶层:
build()
解决方法
我能够使它起作用:
@Override
public Visitable visit(final MethodCallExpr n,final Void arg) {
final Visitable visit = super.visit(n,arg);
if (!n.getName().getIdentifier().equals("build")) {
return visit;
}
n.getScope()
.filter(Expression::isMethodCallExpr)
.map(Expression::asMethodCallExpr)
.filter(method -> method.getName().getIdentifier().equals("withB"))
.ifPresent(method -> {
final Node leftSide = n.getChildNodes().get(0);
final Optional<Expression> scope = n.getScope();
final MethodCallExpr withC = new MethodCallExpr("withC",new NameExpr("c"));
leftSide.replace(withC);
scope.ifPresent(withC::setScope);
});
return visit;
}
如果有更优雅的方式可以做到这一点,我将很高兴学习。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。