From 7d4dec14e8750aef2887c1b70935b7093ea5b0de Mon Sep 17 00:00:00 2001 From: mar-v-in Date: Sat, 11 Apr 2015 11:43:28 +0200 Subject: [PATCH] Fix Parcelable[] --- .../org/microg/safeparcel/SafeParcelUtil.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelUtil.java b/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelUtil.java index 24278bc..8f4b11e 100644 --- a/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelUtil.java +++ b/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelUtil.java @@ -96,11 +96,18 @@ public class SafeParcelUtil { } private static Parcelable.Creator getCreator(Field field) throws IllegalAccessException { - try { - return (Parcelable.Creator) field.getType().getDeclaredField("CREATOR").get(null); - } catch (NoSuchFieldException e) { - throw new RuntimeException(field.getType() + " is an Parcelable without CREATOR"); + Class clazz = field.getType(); + if (clazz.isArray()) { + clazz = clazz.getComponentType(); } + if (Parcelable.class.isAssignableFrom(clazz)) { + try { + return (Parcelable.Creator) clazz.getDeclaredField("CREATOR").get(null); + } catch (NoSuchFieldException e) { + throw new RuntimeException(clazz + " is an Parcelable without CREATOR"); + } + } + throw new RuntimeException(clazz + " is not an Parcelable"); } private static ClassLoader getClassLoader(Field field) {