Skip to content

Commit 87be909

Browse files
committed
fix generation of ParameterizedTypeReference subclasses for arrays of generic types
1 parent c0a4b24 commit 87be909

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

  • AndroidAnnotations/androidannotations-rest-spring/rest-spring/src/main/java/org/androidannotations/rest/spring/helper

AndroidAnnotations/androidannotations-rest-spring/rest-spring/src/main/java/org/androidannotations/rest/spring/helper/RestAnnotationHelper.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)