微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaParser:如何将方法调用添加到链接的调用中?

如何解决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 举报,一经查实,本站将立刻删除。