java 如何使用openrewrite将注解替换为他属性?

rdlzhqv9  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(168)

要迁移一个java API,我需要用一个属性的值替换一个注解,我正在寻找如何做到这一点:
之前:

@Foo(values = {@Bar(value="one"), @Bar(Value="two")})
    private void stuff() {
    }

之后:

@Foo(values = { "one" ,  "two" })
    private void stuff() {
    }

我试过使用visitAnnotation()方法,但是它应该返回一个注解而不是一个文本。如果有人有任何想法或建议如何做到这一点。

qyuhtwio

qyuhtwio1#

通过在@Foo的“value”属性上调用此方法获得

List<Expression> extractBarAnnotation(@Nullable List<Expression> initializer) {
final List<Expression> barsArray = new ArrayList<>();

for (Expression expression : initializer) {
    J.Annotation innerAnnotation = (J.Annotation) expression;
    List<Expression> newArgs = ListUtils.map(innerAnnotation.getArguments(), it -> {
        if (it instanceof J.Assignment) {
            J.Assignment as = (J.Assignment) it;
            J.Identifier var = (J.Identifier) as.getVariable();
            if ("value".equals(var.getSimpleName())) {
                J.Literal value = (J.Literal) as.getAssignment();
                return value;
            }
        }
        return null;
    });
    barsArray.addAll(newArgs);
}
return barsArray;

}

相关问题