private void addCreateFromParcel(JDefinedClass jclass, JDefinedClass creatorClass) { JMethod createFromParcel = creatorClass.method(JMod.PUBLIC, jclass, "createFromParcel"); JVar in = createFromParcel.param(Parcel.class, "in"); JVar instance = createFromParcel.body().decl(jclass, "instance", JExpr._new(jclass)); suppressWarnings(createFromParcel, "unchecked"); for (JFieldVar f : jclass.fields().values()) { if ((f.mods().getValue() & JMod.STATIC) == JMod.STATIC) { continue; } if (f.type().erasure().name().equals("List")) { createFromParcel .body() .invoke(in, "readList") .arg(instance.ref(f)) .arg(JExpr.direct(getGenericType(f.type()) + ".class.getClassLoader()")); } else { createFromParcel .body() .assign( instance.ref(f), JExpr.cast( f.type(), in.invoke("readValue") .arg(JExpr.direct(f.type().erasure().name() + ".class.getClassLoader()")))); } } createFromParcel.body()._return(instance); }
public void addWriteToParcel(JDefinedClass jclass) { JMethod method = jclass.method(JMod.PUBLIC, void.class, "writeToParcel"); JVar dest = method.param(Parcel.class, "dest"); method.param(int.class, "flags"); for (JFieldVar f : jclass.fields().values()) { if ((f.mods().getValue() & JMod.STATIC) == JMod.STATIC) { continue; } if (f.type().erasure().name().equals("List")) { method.body().invoke(dest, "writeList").arg(f); } else { method.body().invoke(dest, "writeValue").arg(f); } } }