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