JavaParser:如何向链式调用添加方法调用?
给定链接调用(生成器模式):JavaParser:如何向链式调用添加方法调用?,java,javaparser,Java,Javaparser,给定链接调用(生成器模式): returnnewthingbuilder().withA(a).withB(b.build(); 如何使用JavaParser添加另一个链式调用,最终得到如下代码: returnnewthingbuilder().withA(a).withB(b).withC(c.build(); 我已经熟悉了修饰符visitor,但找不到一个好方法将调用添加到正确的位置,即添加到相关的MethodCallExpr(其中表达式为newthingbuilder().withA(
returnnewthingbuilder().withA(a).withB(b.build();
如何使用JavaParser添加另一个链式调用,最终得到如下代码:
returnnewthingbuilder().withA(a).withB(b).withC(c.build();
我已经熟悉了修饰符visitor
,但找不到一个好方法将调用添加到正确的位置,即添加到相关的MethodCallExpr
(其中表达式为newthingbuilder().withA(a).withB(b)
,方法为build()
)
如果可能的话,也可以将其添加到顶层:
returnnewthingbuilder().withC(c).withA(a).withB(b.build();
我能够让它工作:
@覆盖
公众可访问访问访问(最终方法调用Expr n,最终无效参数){
最终就诊=超级就诊(n,arg);
如果(!n.getName().getIdentifier().equals(“构建”)){
回访;
}
n、 getScope()
.filter(表达式::isMethodCallExpr)
.map(表达式::asMethodCallExpr)
.filter(方法->方法.getName().getIdentifier().equals(“withB”))
.ifPresent(方法->{
final Node leftSide=n.getChildNodes().get(0);
最终可选范围=n.getScope();
final MethodCallExpr withC=新MethodCallExpr(“withC”,新名称expr(“c”);
左侧。替换(用C);
范围。如果存在(使用C::设置范围);
});
回访;
}
我很乐意知道是否有更优雅的方法来做这件事。我会接受这样的回答:“这是最不粗俗的方法”