如何用openrewrite替换他的属性注释?



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

:

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

:后

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

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

在@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;

}

最新更新