Skip to content

Commit e1f0b49

Browse files
committed
Omit unnecessary brackets for single-valued container annotations
1 parent 00c5f58 commit e1f0b49

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

src/main/java/co/elastic/indytransformer/AdviceTransformationPlan.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -202,19 +202,20 @@ private List<ValueToReturn<?>> transformArgumentAssignments(List<Parameter> ente
202202
returns.add(new ValueToReturn<>(writtenArg, (method, index) -> {
203203
Utils.addImports(method, Advice.AssignReturned.class, Advice.AssignReturned.ToArguments.ToArgument.class);
204204
SingleMemberAnnotationExpr toArguments = findOrCreateRepeatableWrapperAnnotation(method, "AssignReturned.ToArguments");
205-
ArrayInitializerExpr toArgumentsInitializerList = (ArrayInitializerExpr) (toArguments).getMemberValue();
206205

206+
AnnotationExpr result;
207207
Name annoName = new Name("ToArgument");
208208
IntegerLiteralExpr argIndexExpr = new IntegerLiteralExpr(String.valueOf(argIndex));
209209
if (index == -1) {
210-
toArgumentsInitializerList.getValues().add(new SingleMemberAnnotationExpr(annoName, argIndexExpr));
210+
result = new SingleMemberAnnotationExpr(annoName, argIndexExpr);
211211
} else {
212-
toArgumentsInitializerList.getValues().add(new NormalAnnotationExpr(
212+
result = new NormalAnnotationExpr(
213213
annoName, new NodeList<>(
214214
new MemberValuePair("value", argIndexExpr),
215215
new MemberValuePair("index", new IntegerLiteralExpr(String.valueOf(index)))
216-
)));
216+
));
217217
}
218+
addToArrayAnnotationValue(toArguments, result);
218219
}));
219220
}
220221
return returns;
@@ -279,7 +280,6 @@ private List<ValueToReturn<Parameter>> transformFieldAssignments(List<Parameter>
279280
Utils.addImports(method, Advice.AssignReturned.class, Advice.AssignReturned.ToFields.ToField.class);
280281

281282
SingleMemberAnnotationExpr toFields = findOrCreateRepeatableWrapperAnnotation(method, "AssignReturned.ToFields");
282-
ArrayInitializerExpr toFieldsInitializerList = (ArrayInitializerExpr) (toFields).getMemberValue();
283283

284284
AnnotationExpr result;
285285
Name annoName = new Name("ToField");
@@ -292,12 +292,29 @@ private List<ValueToReturn<Parameter>> transformFieldAssignments(List<Parameter>
292292
new MemberValuePair("index", new IntegerLiteralExpr(String.valueOf(index)))
293293
));
294294
}
295-
toFieldsInitializerList.getValues().add(result);
295+
addToArrayAnnotationValue(toFields, result);
296296
});
297297
})
298298
.toList();
299299
}
300300

301+
private static void addToArrayAnnotationValue(SingleMemberAnnotationExpr containerAnnotation, AnnotationExpr valueToAdd) {
302+
Expression originalValue = containerAnnotation.getMemberValue();
303+
ArrayInitializerExpr newArrayValue = new ArrayInitializerExpr();
304+
if (originalValue instanceof ArrayInitializerExpr originalArray) {
305+
newArrayValue = originalArray;
306+
} else {
307+
newArrayValue.getValues().add(originalValue);
308+
}
309+
newArrayValue.getValues().add(valueToAdd);
310+
if (newArrayValue.getValues().size() == 1) {
311+
// No need to wrap in array initializer expression if we have exactly one element
312+
containerAnnotation.setMemberValue(newArrayValue.getValues().get(0));
313+
} else {
314+
containerAnnotation.setMemberValue(newArrayValue);
315+
}
316+
}
317+
301318

302319
private void removeParameterOrVariableIfNeverUsed(MethodDeclaration method, Node paramOrVarDeclaration) {
303320
AtomicBoolean isUsed = new AtomicBoolean(false);

0 commit comments

Comments
 (0)