Skip to content
This repository was archived by the owner on Feb 26, 2023. It is now read-only.

Commit 7c0ec68

Browse files
committed
Merge pull request #1214 from yDelouis/1070_extraNotAddedByServiceActionInIntentBuilder
Don't add the extra method in IntentBuilder with @ServiceAction
2 parents 2653ce6 + 9a06653 commit 7c0ec68

2 files changed

Lines changed: 35 additions & 24 deletions

File tree

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/ServiceActionHandler.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ private void addActionToIntentBuilder(EIntentServiceHolder holder, ExecutableEle
127127
JFieldVar paramVar = getStaticExtraField(holder, paramName);
128128
JVar methodParam = method.param(parameterClass, paramName);
129129

130-
JMethod putExtraMethod = holder.getIntentBuilder().getPutExtraMethod(param.asType(), paramName, paramVar);
131-
body.invoke(putExtraMethod).arg(methodParam);
130+
JInvocation putExtraInvocation = holder.getIntentBuilder().getSuperPutExtraInvocation(param.asType(), methodParam, paramVar);
131+
body.add(putExtraInvocation);
132132
}
133133
body._return(JExpr._this());
134134
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/IntentBuilder.java‎

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,16 @@
1515
*/
1616
package org.androidannotations.helper;
1717

18-
import com.sun.codemodel.*;
18+
import com.sun.codemodel.JClass;
19+
import com.sun.codemodel.JClassAlreadyExistsException;
20+
import com.sun.codemodel.JDefinedClass;
21+
import com.sun.codemodel.JExpression;
22+
import com.sun.codemodel.JFieldRef;
23+
import com.sun.codemodel.JFieldVar;
24+
import com.sun.codemodel.JInvocation;
25+
import com.sun.codemodel.JMethod;
26+
import com.sun.codemodel.JMod;
27+
import com.sun.codemodel.JVar;
1928
import org.androidannotations.holder.HasIntentBuilder;
2029

2130
import javax.lang.model.type.TypeKind;
@@ -25,9 +34,15 @@
2534
import java.util.HashMap;
2635
import java.util.Map;
2736

28-
import static com.sun.codemodel.JExpr.*;
29-
import static com.sun.codemodel.JMod.*;
30-
import static org.androidannotations.helper.CanonicalNameConstants.*;
37+
import static com.sun.codemodel.JExpr._new;
38+
import static com.sun.codemodel.JExpr._super;
39+
import static com.sun.codemodel.JExpr.cast;
40+
import static com.sun.codemodel.JExpr.ref;
41+
import static com.sun.codemodel.JMod.PUBLIC;
42+
import static com.sun.codemodel.JMod.STATIC;
43+
import static org.androidannotations.helper.CanonicalNameConstants.PARCELABLE;
44+
import static org.androidannotations.helper.CanonicalNameConstants.SERIALIZABLE;
45+
import static org.androidannotations.helper.CanonicalNameConstants.STRING;
3146

3247
public abstract class IntentBuilder {
3348

@@ -91,37 +106,33 @@ public JMethod getPutExtraMethod(TypeMirror elementType, String parameterName, J
91106
}
92107

93108
private JMethod addPutExtraMethod(TypeMirror elementType, String parameterName, JFieldVar extraKeyField) {
94-
boolean castToSerializable = false;
95-
boolean castToParcelable = false;
109+
JMethod method = holder.getIntentBuilderClass().method(PUBLIC, holder.getIntentBuilderClass(), parameterName);
110+
JClass parameterClass = codeModelHelper.typeMirrorToJClass(elementType, holder);
111+
JVar extraParameterVar = method.param(parameterClass, parameterName);
112+
JInvocation superCall = getSuperPutExtraInvocation(elementType, extraParameterVar, extraKeyField);
113+
method.body()._return(superCall);
114+
return method;
115+
}
116+
117+
public JInvocation getSuperPutExtraInvocation(TypeMirror elementType, JVar extraParam, JFieldVar extraKeyField) {
118+
JExpression extraParameterArg = extraParam;
119+
// Cast to Parcelable or Serializable if needed
96120
if (elementType.getKind() == TypeKind.DECLARED) {
97121
Elements elementUtils = holder.processingEnvironment().getElementUtils();
98122
TypeMirror parcelableType = elementUtils.getTypeElement(PARCELABLE).asType();
99123
if (!typeUtils.isSubtype(elementType, parcelableType)) {
100124
TypeMirror stringType = elementUtils.getTypeElement(STRING).asType();
101125
if (!typeUtils.isSubtype(elementType, stringType)) {
102-
castToSerializable = true;
126+
extraParameterArg = cast(holder.classes().SERIALIZABLE, extraParameterArg);
103127
}
104128
} else {
105129
TypeMirror serializableType = elementUtils.getTypeElement(SERIALIZABLE).asType();
106130
if (typeUtils.isSubtype(elementType, serializableType)) {
107-
castToParcelable = true;
131+
extraParameterArg = cast(holder.classes().PARCELABLE, extraParameterArg);
108132
}
109133
}
110134
}
111-
112-
JMethod method = holder.getIntentBuilderClass().method(PUBLIC, holder.getIntentBuilderClass(), parameterName);
113-
JClass parameterClass = codeModelHelper.typeMirrorToJClass(elementType, holder);
114-
JVar extraParameterVar = method.param(parameterClass, parameterName);
115-
JInvocation invocation = _super().invoke("extra").arg(extraKeyField);
116-
if (castToSerializable) {
117-
invocation.arg(cast(holder.classes().SERIALIZABLE, extraParameterVar));
118-
} else if (castToParcelable) {
119-
invocation.arg(cast(holder.classes().PARCELABLE, extraParameterVar));
120-
} else {
121-
invocation.arg(extraParameterVar);
122-
}
123-
method.body()._return(invocation);
124-
return method;
135+
return _super().invoke("extra").arg(extraKeyField).arg(extraParameterArg);
125136
}
126137

127138
protected abstract JClass getSuperClass();

0 commit comments

Comments
 (0)