Skip to content

Commit 9dcfe8d

Browse files
committed
Merge pull request androidannotations#733 from excilys/731_fixExtra
731 fix extra
2 parents 015e780 + b95475d commit 9dcfe8d

5 files changed

Lines changed: 37 additions & 23 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ private void addIntentBuilder(JCodeModel codeModel, EBeanHolder holder, Annotati
422422
}
423423
}
424424

425-
public JInvocation addIntentBuilderPutExtraMethod(JCodeModel codeModel, EBeanHolder holder, APTCodeModelHelper helper, ProcessingEnvironment processingEnv, JMethod method, TypeMirror elementType, String parameterName, String extraName) {
425+
public JInvocation addIntentBuilderPutExtraMethod(JCodeModel codeModel, EBeanHolder holder, APTCodeModelHelper helper, ProcessingEnvironment processingEnv, JMethod method, TypeMirror elementType, String parameterName, JFieldVar extraKeyField) {
426426
boolean castToSerializable = false;
427427
boolean castToParcelable = false;
428428
if (elementType.getKind() == TypeKind.DECLARED) {
@@ -445,7 +445,7 @@ public JInvocation addIntentBuilderPutExtraMethod(JCodeModel codeModel, EBeanHol
445445
JClass parameterClass = helper.typeMirrorToJClass(elementType, holder);
446446
JVar extraParameterVar = method.param(parameterClass, parameterName);
447447
JBlock body = method.body();
448-
JInvocation invocation = body.invoke(holder.intentField, "putExtra").arg(extraName);
448+
JInvocation invocation = body.invoke(holder.intentField, "putExtra").arg(extraKeyField);
449449
if (castToSerializable) {
450450
return invocation.arg(cast(holder.classes().SERIALIZABLE, extraParameterVar));
451451
} else if (castToParcelable) {

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ExtraProcessor.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
123123
// flags()
124124
JMethod method = holder.intentBuilderClass.method(PUBLIC, holder.intentBuilderClass, fieldName);
125125

126-
helper.addIntentBuilderPutExtraMethod(codeModel, holder, helper, processingEnv, method, elementType, fieldName, staticFieldName);
126+
helper.addIntentBuilderPutExtraMethod(codeModel, holder, helper, processingEnv, method, elementType, fieldName, extraKeyField);
127127

128128
JBlock body = method.body();
129129
body._return(_this());

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ServiceActionProcessor.java‎

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
import static com.sun.codemodel.JMod.STATIC;
2323

2424
import java.util.ArrayList;
25+
import java.util.HashMap;
2526
import java.util.List;
27+
import java.util.Map;
2628

2729
import javax.annotation.processing.ProcessingEnvironment;
2830
import javax.lang.model.element.Element;
@@ -62,6 +64,8 @@ public String getTarget() {
6264

6365
@Override
6466
public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
67+
Map<String, JFieldVar> extraKeyFields = new HashMap<String, JFieldVar>();
68+
6569
ExecutableElement executableElement = (ExecutableElement) element;
6670
String methodName = element.getSimpleName().toString();
6771

@@ -113,13 +117,17 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
113117
JClass extraParamClass = helper.typeMirrorToJClass(param.asType(), holder);
114118
boolean isPrimitive = param.asType().getKind().isPrimitive();
115119

120+
String extraKeyName = CaseHelper.camelCaseToUpperSnakeCase(null, methodName + paramName, "Extra");
121+
JFieldVar extraKeyField = holder.generatedClass.field(PUBLIC | STATIC | FINAL, classes.STRING, extraKeyName, lit(extraKeyName));
122+
extraKeyFields.put(methodName + paramName, extraKeyField);
123+
116124
JExpression extraInvok;
117125
if (isPrimitive) {
118126
JPrimitiveType primitiveType = JType.parse(codeModel, param.asType().toString());
119127
JClass wrapperType = primitiveType.boxify();
120-
extraInvok = JExpr.cast(wrapperType, extras.invoke("get").arg(paramName));
128+
extraInvok = JExpr.cast(wrapperType, extras.invoke("get").arg(extraKeyField));
121129
} else {
122-
extraInvok = JExpr.invoke(holder.cast).arg(extras.invoke("get").arg(paramName));
130+
extraInvok = JExpr.invoke(holder.cast).arg(extras.invoke("get").arg(extraKeyField));
123131
}
124132
JVar extraField = extrasNotNullBlock.decl(extraParamClass, extraParamName, extraInvok);
125133
extraFields.add(extraField);
@@ -156,7 +164,9 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
156164
for (VariableElement param : methodParameters) {
157165
String paramName = param.getSimpleName().toString();
158166

159-
helper.addIntentBuilderPutExtraMethod(codeModel, holder, helper, processingEnv, method, param.asType(), paramName, paramName);
167+
JFieldVar extraKeyField = extraKeyFields.get(methodName + paramName);
168+
169+
helper.addIntentBuilderPutExtraMethod(codeModel, holder, helper, processingEnv, method, param.asType(), paramName, extraKeyField);
160170
}
161171

162172
}

‎AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/InjectExtraTest.java‎

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,32 +23,33 @@
2323
import org.junit.Test;
2424
import org.junit.runner.RunWith;
2525

26-
import android.content.Intent;
26+
import android.app.Activity;
27+
import android.content.Context;
2728

2829
@RunWith(AndroidAnnotationsTestRunner.class)
2930
public class InjectExtraTest {
3031

31-
private Intent intent;
3232
private ExtraInjectedActivity_ activity;
33+
private Context context = new Activity();
3334

3435
@Before
3536
public void setup() {
3637
activity = new ExtraInjectedActivity_();
37-
intent = new Intent();
38-
activity.setIntent(intent);
3938
}
4039

4140
@Test
4241
public void simple_string_extra_injected() {
43-
intent.putExtra("stringExtra", "Hello!");
42+
activity.setIntent(ExtraInjectedActivity_.intent(context)
43+
.stringExtra("Hello!").get());
4444
activity.onCreate(null);
4545
assertThat(activity.stringExtra).isEqualTo("Hello!");
4646
}
4747

4848
@Test
4949
public void array_extra_injected() {
5050
CustomData[] customData = { new CustomData("42") };
51-
intent.putExtra("arrayExtra", customData);
51+
activity.setIntent(ExtraInjectedActivity_.intent(context)
52+
.arrayExtra(customData).get());
5253
activity.onCreate(null);
5354
assertThat(activity.arrayExtra).isEqualTo(customData);
5455
}
@@ -57,42 +58,45 @@ public void array_extra_injected() {
5758
public void list_extra_injected() {
5859
ArrayList<String> list = new ArrayList<String>();
5960
list.add("Hello !");
60-
intent.putExtra("listExtra", list);
61+
activity.setIntent(ExtraInjectedActivity_.intent(context)
62+
.listExtra(list).get());
6163
activity.onCreate(null);
6264
assertThat(activity.listExtra).isEqualTo(list);
6365
}
6466

6567
@Test
6668
public void int_extra_injected() {
67-
intent.putExtra("intExtra", 42);
69+
activity.setIntent(ExtraInjectedActivity_.intent(context).intExtra(42)
70+
.get());
6871
activity.onCreate(null);
6972
assertThat(activity.intExtra).isEqualTo(42);
7073
}
7174

7275
@Test
7376
public void int_array_extra_injected() {
7477
byte[] byteArray = { 0, 2 };
75-
intent.putExtra("byteArrayExtra", byteArray);
78+
activity.setIntent(ExtraInjectedActivity_.intent(context)
79+
.byteArrayExtra(byteArray).get());
7680
activity.onCreate(null);
7781
assertThat(activity.byteArrayExtra).isEqualTo(byteArray);
7882
}
7983

8084
@Test
8185
public void setIntent_reinjects_extra() {
82-
intent.putExtra("stringExtra", "Hello!");
86+
activity.setIntent(ExtraInjectedActivity_.intent(context)
87+
.stringExtra("Hello!").get());
8388
activity.onCreate(null);
8489

85-
Intent newIntent = new Intent();
86-
newIntent.putExtra("stringExtra", "Hello Again!");
87-
88-
activity.setIntent(newIntent);
90+
activity.setIntent(ExtraInjectedActivity_.intent(context)
91+
.stringExtra("Hello Again!").get());
8992

9093
assertThat(activity.stringExtra).isEqualTo("Hello Again!");
9194
}
92-
95+
9396
@Test
9497
public void extraWithoutValueInjected() {
95-
intent.putExtra("extraWithoutValue", "Hello!");
98+
activity.setIntent(ExtraInjectedActivity_.intent(context)
99+
.extraWithoutValue("Hello!").get());
96100
activity.onCreate(null);
97101
assertThat(activity.extraWithoutValue).isEqualTo("Hello!");
98102
}

‎AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ExtraInjectedActivity.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
@EActivity
2727
public class ExtraInjectedActivity extends Activity {
2828

29-
@Extra("stringExtra")
29+
@Extra("aStringExtra")
3030
String stringExtra;
3131

3232
@Extra("arrayExtra")

0 commit comments

Comments
 (0)