@@ -287,10 +287,9 @@ public JExpression getResponseClass(Element element, RestHolder holder) {
287287 JExpression responseClassExpr = nullCastedToNarrowedClass (holder );
288288 TypeMirror returnType = executableElement .getReturnType ();
289289 if (returnType .getKind () != TypeKind .VOID ) {
290- if (getElementUtils ().getTypeElement (RestSpringClasses .PARAMETERIZED_TYPE_REFERENCE ) != null //
291- && returnType .getKind () == TypeKind .DECLARED && !((DeclaredType ) returnType ).getTypeArguments ().isEmpty () //
292- && !returnType .toString ().startsWith (RestSpringClasses .RESPONSE_ENTITY )) {
293- return createParameterizedTypeReferenceAnonymousSubclassInstance (returnType , holder );
290+ if (getElementUtils ().getTypeElement (RestSpringClasses .PARAMETERIZED_TYPE_REFERENCE ) != null && !returnType .toString ().startsWith (RestSpringClasses .RESPONSE_ENTITY )
291+ && checkIfParameterizedTypeReferenceShouldBeUsed (returnType )) {
292+ return createParameterizedTypeReferenceAnonymousSubclassInstance (returnType );
294293 }
295294
296295 JClass responseClass = retrieveResponseClass (returnType , holder );
@@ -301,9 +300,22 @@ public JExpression getResponseClass(Element element, RestHolder holder) {
301300 return responseClassExpr ;
302301 }
303302
304- public JExpression createParameterizedTypeReferenceAnonymousSubclassInstance (TypeMirror returnType , RestHolder holder ) {
305- JClass narrowedTypeReference = holder .getEnvironment ().getJClass (RestSpringClasses .PARAMETERIZED_TYPE_REFERENCE ).narrow (codeModelHelper .typeMirrorToJClass (returnType ));
306- JDefinedClass anonymousClass = holder .getEnvironment ().getCodeModel ().anonymousClass (narrowedTypeReference );
303+ private boolean checkIfParameterizedTypeReferenceShouldBeUsed (TypeMirror returnType ) {
304+ switch (returnType .getKind ()) {
305+ case DECLARED :
306+ return !((DeclaredType ) returnType ).getTypeArguments ().isEmpty ();
307+
308+ case ARRAY :
309+ ArrayType arrayType = (ArrayType ) returnType ;
310+ TypeMirror componentType = arrayType .getComponentType ();
311+ return checkIfParameterizedTypeReferenceShouldBeUsed (componentType );
312+ }
313+ return false ;
314+ }
315+
316+ public JExpression createParameterizedTypeReferenceAnonymousSubclassInstance (TypeMirror returnType ) {
317+ JClass narrowedTypeReference = getEnvironment ().getJClass (RestSpringClasses .PARAMETERIZED_TYPE_REFERENCE ).narrow (codeModelHelper .typeMirrorToJClass (returnType ));
318+ JDefinedClass anonymousClass = getEnvironment ().getCodeModel ().anonymousClass (narrowedTypeReference );
307319 return JExpr ._new (anonymousClass );
308320 }
309321
0 commit comments