@@ -245,12 +245,10 @@ private String generateClass(TypeElement type, String className, String classToE
245245 List <VariableElement > nonPrivateFields = new ArrayList <>();
246246 List <VariableElement > mappedOnlyFields = new ArrayList <>();
247247 addNonPrivateFields (type , nonPrivateFields );
248- TypeElement sourceElement = null ;
249248
250249 if (mapFrom != null ) {
251- addNonPrivateFields (( TypeElement ) mapFrom , mappedOnlyFields );
250+ addNonPrivateFields (mapFrom , mappedOnlyFields );
252251 nonPrivateFields .addAll (mappedOnlyFields );
253- sourceElement = (TypeElement ) mapFrom ;
254252 }
255253
256254 if (nonPrivateFields .isEmpty ()) {
@@ -268,6 +266,8 @@ private String generateClass(TypeElement type, String className, String classToE
268266 // get the parcel version
269267 //noinspection ConstantConditions
270268 int version = type .getAnnotation (AutoMapper .class ).version ();
269+ boolean isImplementingParcelable = ancestoIsParcelable (processingEnv , type );
270+ boolean isParcelable = isImplementingParcelable || type .getAnnotation (AutoMapper .class ).parcelable ();
271271
272272 // Generate the AutoParcel_??? class
273273 String pkg = TypeUtil .packageNameOf (type );
@@ -283,30 +283,34 @@ private String generateClass(TypeElement type, String className, String classToE
283283 .addMethod (generateConstructor (properties ))
284284 // Add the private constructor
285285 .addMethod (generateConstructorFromParcel (processingEnv , properties , typeAdapters ))
286- // overrides describeContents()
287- .addMethod (generateDescribeContents ())
288- // static final CREATOR
289- .addField (generateCreator (processingEnv , properties , classTypeName , typeAdapters ))
290- // overrides writeToParcel()
291- .addMethod (generateWriteToParcel (version , processingEnv , properties , typeAdapters )) // generate writeToParcel()
292286 // create empty constructor
293287 .addMethod (MethodSpec .constructorBuilder ().addModifiers (PUBLIC ).build ())
294288 // Add fields from mapping only
295289 .addFields (generateFieldSpecs (properties ))
296290 // Add map from constructor
297- .addMethod (generateMapFromCreator (type , classTypeName , sourceElement , mappedProperties ));
291+ .addMethod (generateMapFromCreator (type , classTypeName , mapFrom , mappedProperties ));
292+
293+ if (isParcelable ) {
294+ subClass
295+ // overrides describeContents()
296+ .addMethod (generateDescribeContents ())
297+ // static final CREATOR
298+ .addField (generateCreator (processingEnv , properties , classTypeName , typeAdapters ))
299+ // overrides writeToParcel()
300+ .addMethod (generateWriteToParcel (version , processingEnv , properties , typeAdapters ));
298301
299- if (!ancestoIsParcelable (processingEnv , type )) {
300- // Implement android.os.Parcelable if the ancestor does not do it.
301- subClass .addSuperinterface (ClassName .get ("android.os" , "Parcelable" ));
302+ if (!isImplementingParcelable ) {
303+ // Implement android.os.Parcelable if the ancestor does not do it.
304+ subClass .addSuperinterface (ClassName .get ("android.os" , "Parcelable" ));
305+ }
302306 }
303307
304308 if (!typeAdapters .isEmpty ()) {
305309 typeAdapters .values ().forEach (subClass ::addField );
306310 }
307311
308-
309312 JavaFile javaFile = JavaFile .builder (pkg , subClass .build ()).build ();
313+
310314 return javaFile .toString ();
311315 }
312316
0 commit comments