Fix ArrayStoreException reading subclassed enums

Fix ASM AnnotationAttributesReadingVisitor to correctly deal with
subclasses enums.

Issue: SPR-10914
(cherry picked from 8abe949)
This commit is contained in:
Phillip Webb
2013-09-24 17:19:29 -07:00
parent 7994b63c13
commit 7500caea52

View File

@@ -28,7 +28,6 @@ import java.util.Set;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.asm.AnnotationVisitor; import org.springframework.asm.AnnotationVisitor;
import org.springframework.asm.SpringAsmInfo; import org.springframework.asm.SpringAsmInfo;
import org.springframework.asm.Type; import org.springframework.asm.Type;
@@ -122,7 +121,13 @@ final class RecursiveAnnotationArrayVisitor extends AbstractRecursiveAnnotationV
newValue = ObjectUtils.addObjectToArray((Object[]) existingValue, newValue); newValue = ObjectUtils.addObjectToArray((Object[]) existingValue, newValue);
} }
else { 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; newArray[0] = newValue;
newValue = newArray; newValue = newArray;
} }