Skip to content

Commit 773f9b3

Browse files
committed
Fix method with @ReceiverAction not called
1 parent 2a3706a commit 773f9b3

6 files changed

Lines changed: 26 additions & 39 deletions

File tree

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

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.sun.codemodel.JExpr;
2020
import com.sun.codemodel.JExpression;
2121
import com.sun.codemodel.JInvocation;
22+
import com.sun.codemodel.JOp;
2223
import com.sun.codemodel.JVar;
2324
import org.androidannotations.annotations.OnActivityResult;
2425
import org.androidannotations.helper.CanonicalNameConstants;
@@ -34,6 +35,9 @@
3435
import javax.lang.model.type.TypeMirror;
3536
import java.util.List;
3637

38+
import static com.sun.codemodel.JExpr._new;
39+
import static com.sun.codemodel.JExpr._null;
40+
3741
public class OnActivityResultHandler extends BaseAnnotationHandler<HasOnActivityResult> {
3842

3943
private ExtraHandler extraHandler;
@@ -78,18 +82,24 @@ public void process(Element element, HasOnActivityResult holder) throws Exceptio
7882
JExpression activityRef = holder.getGeneratedClass().staticRef("this");
7983
JInvocation onResultInvocation = JExpr.invoke(activityRef, methodName);
8084

85+
JVar intent = holder.getOnActivityResultDataParam();
86+
JVar extras = null;
87+
8188
for (VariableElement parameter : parameters) {
8289
TypeMirror parameterType = parameter.asType();
8390
if (parameter.getAnnotation(OnActivityResult.Extra.class) != null) {
84-
JExpression extraParameter = extraHandler.getExtraValue(parameter, onResultBlock, holder);
91+
if (extras == null) {
92+
extras = onResultBlock.decl(classes().BUNDLE, "extras_",
93+
JOp.cond(intent.ne(_null()).cand(intent.invoke("getExtras").ne(_null())),
94+
intent.invoke("getExtras"), _new(classes().BUNDLE)));
95+
}
96+
JExpression extraParameter = extraHandler.getExtraValue(parameter, extras, onResultBlock, holder);
8597
onResultInvocation.arg(extraParameter);
8698
} else if (CanonicalNameConstants.INTENT.equals(parameterType.toString())) {
87-
JVar intentParameter = holder.getOnActivityResultDataParam();
88-
onResultInvocation.arg(intentParameter);
99+
onResultInvocation.arg(intent);
89100
} else if (parameterType.getKind().equals(TypeKind.INT) //
90101
|| CanonicalNameConstants.INTEGER.equals(parameterType.toString())) {
91-
JVar resultCodeParameter = holder.getOnActivityResultResultCodeParam();
92-
onResultInvocation.arg(resultCodeParameter);
102+
onResultInvocation.arg(holder.getOnActivityResultResultCodeParam());
93103
}
94104
}
95105
onResultBlock.add(onResultInvocation);
@@ -106,8 +116,8 @@ public String getAnnotationValue(VariableElement parameter) {
106116
return parameter.getAnnotation(OnActivityResult.Extra.class).value();
107117
}
108118

109-
public JExpression getExtraValue(VariableElement parameter, JBlock block, HasOnActivityResult holder) {
110-
return super.getExtraValue(parameter, holder.getOnActivityResultDataParam(), holder.getOnActivityResultExtras(), block, holder.getOnActivityResultMethod(), holder);
119+
public JExpression getExtraValue(VariableElement parameter, JVar extras, JBlock block, HasOnActivityResult holder) {
120+
return super.getExtraValue(parameter, holder.getOnActivityResultDataParam(), extras, block, holder.getOnActivityResultMethod(), holder);
111121
}
112122
}
113123

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717

1818
import com.sun.codemodel.JBlock;
1919
import com.sun.codemodel.JClass;
20-
import com.sun.codemodel.JExpr;
2120
import com.sun.codemodel.JExpression;
2221
import com.sun.codemodel.JFieldVar;
2322
import com.sun.codemodel.JInvocation;
23+
import com.sun.codemodel.JOp;
2424
import com.sun.codemodel.JVar;
2525
import org.androidannotations.annotations.ReceiverAction;
2626
import org.androidannotations.helper.APTCodeModelHelper;
@@ -35,6 +35,7 @@
3535
import javax.lang.model.element.VariableElement;
3636
import java.util.List;
3737

38+
import static com.sun.codemodel.JExpr._new;
3839
import static com.sun.codemodel.JExpr._null;
3940
import static com.sun.codemodel.JExpr.lit;
4041
import static com.sun.codemodel.JMod.FINAL;
@@ -93,8 +94,10 @@ private void addActionInOnReceive(EReceiverHolder holder, ExecutableElement exec
9394
// If action match, call the method
9495
JInvocation actionCondition = actionKeyField.invoke("equals").arg(holder.getOnReceiveIntentAction());
9596
JBlock callActionBlock = holder.getOnReceiveBody()._if(actionCondition)._then();
96-
JInvocation callActionInvocation = JExpr._super().invoke(methodName);
97+
JExpression receiverRef = holder.getGeneratedClass().staticRef("this");
98+
JInvocation callActionInvocation = receiverRef.invoke(methodName);
9799

100+
JVar intent = holder.getOnReceiveIntent();
98101
JVar extras = null;
99102

100103
List<? extends VariableElement> methodParameters = executableElement.getParameters();
@@ -104,12 +107,12 @@ private void addActionInOnReceive(EReceiverHolder holder, ExecutableElement exec
104107
if (extraParamClass.equals(classes().CONTEXT)) {
105108
callActionInvocation.arg(holder.getOnReceiveContext());
106109
} else if (extraParamClass.equals(classes().INTENT)) {
107-
callActionInvocation.arg(holder.getOnReceiveIntent());
110+
callActionInvocation.arg(intent);
108111
} else if (param.getAnnotation(ReceiverAction.Extra.class) != null) {
109112
if (extras == null){
110-
extras = callActionBlock.decl(classes().BUNDLE, "extras");
111-
extras.init(holder.getOnReceiveIntent().invoke("getExtras"));
112-
callActionBlock = callActionBlock._if(extras.ne(_null()))._then();
113+
extras = callActionBlock.decl(classes().BUNDLE, "extras_",
114+
JOp.cond(intent.invoke("getExtras").ne(_null()),
115+
intent.invoke("getExtras"), _new(classes().BUNDLE)));
113116
}
114117
callActionInvocation.arg(extraHandler.getExtraValue(param, extras, callActionBlock, holder));
115118
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -677,11 +677,6 @@ public JVar getOnActivityResultRequestCodeParam() {
677677
return onActivityResultHolder.getRequestCodeParam();
678678
}
679679

680-
@Override
681-
public JVar getOnActivityResultExtras() {
682-
return onActivityResultHolder.getResultExtras();
683-
}
684-
685680
@Override
686681
public JMethod getOnActivityResultMethod() {
687682
return onActivityResultHolder.getMethod();

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -462,11 +462,6 @@ public JVar getOnActivityResultResultCodeParam() {
462462
return onActivityResultHolder.getResultCodeParam();
463463
}
464464

465-
@Override
466-
public JVar getOnActivityResultExtras() {
467-
return onActivityResultHolder.getResultExtras();
468-
}
469-
470465
@Override
471466
public JMethod getOnActivityResultMethod() {
472467
return onActivityResultHolder.getMethod();

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/HasOnActivityResult.java‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,5 @@ public interface HasOnActivityResult extends GeneratedClassHolder {
2626

2727
JVar getOnActivityResultResultCodeParam();
2828

29-
JVar getOnActivityResultExtras();
30-
3129
JMethod getOnActivityResultMethod();
3230
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/holder/OnActivityResultHolder.java‎

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,12 @@
2121
import com.sun.codemodel.JExpr;
2222
import com.sun.codemodel.JMethod;
2323
import com.sun.codemodel.JMod;
24-
import com.sun.codemodel.JOp;
2524
import com.sun.codemodel.JSwitch;
2625
import com.sun.codemodel.JVar;
2726
import org.androidannotations.process.ProcessHolder;
2827

2928
import java.util.HashMap;
3029

31-
import static com.sun.codemodel.JExpr._new;
32-
import static com.sun.codemodel.JExpr._null;
3330
import static com.sun.codemodel.JExpr._super;
3431

3532
public class OnActivityResultHolder {
@@ -41,7 +38,6 @@ public class OnActivityResultHolder {
4138
private JVar requestCodeParam;
4239
private JVar dataParam;
4340
private JVar resultCodeParam;
44-
private JVar resultExtras;
4541
private HashMap<Integer, JBlock> caseBlocks = new HashMap<Integer, JBlock>();
4642

4743
public OnActivityResultHolder(EComponentHolder holder) {
@@ -76,13 +72,6 @@ public JVar getResultCodeParam() {
7672
return resultCodeParam;
7773
}
7874

79-
public JVar getResultExtras() {
80-
if (resultExtras == null) {
81-
setOnActivityResult();
82-
}
83-
return resultExtras;
84-
}
85-
8675
public JBlock getCaseBlock(int requestCode) {
8776
JBlock onActivityResultCaseBlock = caseBlocks.get(requestCode);
8877
if (onActivityResultCaseBlock == null) {
@@ -125,9 +114,6 @@ private void setOnActivityResult() {
125114
dataParam = method.param(classes().INTENT, "data");
126115
JBlock body = method.body();
127116
body.invoke(_super(), method).arg(requestCodeParam).arg(resultCodeParam).arg(dataParam);
128-
resultExtras = body.decl(classes().BUNDLE, "extras_",
129-
JOp.cond(dataParam.eq(_null()).cor(dataParam.invoke("getExtras").eq(_null())), _new(classes().BUNDLE),
130-
dataParam.invoke("getExtras")));
131117
afterSuperBlock = body.block();
132118
}
133119

0 commit comments

Comments
 (0)