|
29 | 29 | import javax.lang.model.type.TypeKind; |
30 | 30 | import javax.lang.model.type.TypeMirror; |
31 | 31 |
|
| 32 | +import org.androidannotations.holder.GeneratedClassHolder; |
| 33 | + |
32 | 34 | import com.sun.codemodel.JClass; |
33 | 35 | import com.sun.codemodel.JExpr; |
34 | 36 | import com.sun.codemodel.JExpression; |
@@ -114,7 +116,6 @@ public BundleHelper(AnnotationHelper helper, TypeMirror element) { |
114 | 116 | if (isTypeParcelable(elementType)) { |
115 | 117 | methodNameToSave = "put" + "ParcelableArray"; |
116 | 118 | methodNameToRestore = "get" + "ParcelableArray"; |
117 | | - restoreCallNeedCastStatement = true; |
118 | 119 |
|
119 | 120 | if (hasTypeArguments) { |
120 | 121 | restoreCallNeedsSuppressWarning = true; |
@@ -207,16 +208,23 @@ private boolean isTypeParcelable(TypeElement elementType) { |
207 | 208 | return elementType != null && annotationHelper.isSubtype(elementType, parcelableType); |
208 | 209 | } |
209 | 210 |
|
210 | | - public JExpression getExpressionToRestoreFromIntentOrBundle(JClass variableClass, JExpression intent, JExpression extras, JExpression extraKey, JMethod method) { |
| 211 | + public JExpression getExpressionToRestoreFromIntentOrBundle(JClass variableClass, JExpression intent, JExpression extras, JExpression extraKey, JMethod method, GeneratedClassHolder holder) { |
211 | 212 | if ("byte[]".equals(element.toString())) { |
212 | 213 | return intent.invoke("getByteArrayExtra").arg(extraKey); |
213 | 214 | } else { |
214 | | - return getExpressionToRestoreFromBundle(variableClass, extras, extraKey, method); |
| 215 | + return getExpressionToRestoreFromBundle(variableClass, extras, extraKey, method, holder); |
215 | 216 | } |
216 | 217 | } |
217 | 218 |
|
218 | | - public JExpression getExpressionToRestoreFromBundle(JClass variableClass, JExpression bundle, JExpression extraKey, JMethod method) { |
219 | | - JExpression expressionToRestore = JExpr.invoke(bundle, methodNameToRestore).arg(extraKey); |
| 219 | + public JExpression getExpressionToRestoreFromBundle(JClass variableClass, JExpression bundle, JExpression extraKey, JMethod method, GeneratedClassHolder holder) { |
| 220 | + JExpression expressionToRestore; |
| 221 | + if (methodNameToRestore.equals("getParcelableArray")) { |
| 222 | + JClass erasure = variableClass.elementType().erasure().array(); |
| 223 | + expressionToRestore = holder.refClass(org.androidannotations.api.bundle.BundleHelper.class).staticInvoke("getParcelableArray").arg(bundle).arg(extraKey).arg(erasure.dotclass()); |
| 224 | + } else { |
| 225 | + expressionToRestore = JExpr.invoke(bundle, methodNameToRestore).arg(extraKey); |
| 226 | + } |
| 227 | + |
220 | 228 | if (restoreCallNeedCastStatement()) { |
221 | 229 | expressionToRestore = JExpr.cast(variableClass, expressionToRestore); |
222 | 230 |
|
|
0 commit comments