From 7500caea523e4232beb8edf3fc3e07e2452dbf03 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 24 Sep 2013 17:19:29 -0700 Subject: [PATCH] Fix ArrayStoreException reading subclassed enums Fix ASM AnnotationAttributesReadingVisitor to correctly deal with subclasses enums. Issue: SPR-10914 (cherry picked from 8abe949) --- .../classreading/AnnotationAttributesReadingVisitor.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/type/classreading/AnnotationAttributesReadingVisitor.java b/spring-core/src/main/java/org/springframework/core/type/classreading/AnnotationAttributesReadingVisitor.java index 0b89eeec783..661ba304485 100644 --- a/spring-core/src/main/java/org/springframework/core/type/classreading/AnnotationAttributesReadingVisitor.java +++ b/spring-core/src/main/java/org/springframework/core/type/classreading/AnnotationAttributesReadingVisitor.java @@ -28,7 +28,6 @@ import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.springframework.asm.AnnotationVisitor; import org.springframework.asm.SpringAsmInfo; import org.springframework.asm.Type; @@ -122,7 +121,13 @@ final class RecursiveAnnotationArrayVisitor extends AbstractRecursiveAnnotationV newValue = ObjectUtils.addObjectToArray((Object[]) existingValue, newValue); } else { - Object[] newArray = (Object[]) Array.newInstance(newValue.getClass(), 1); + Class arrayClass = newValue.getClass(); + if(Enum.class.isAssignableFrom(arrayClass)) { + while(arrayClass.getSuperclass() != null && !arrayClass.isEnum()) { + arrayClass = arrayClass.getSuperclass(); + } + } + Object[] newArray = (Object[]) Array.newInstance(arrayClass, 1); newArray[0] = newValue; newValue = newArray; }