diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/APTCodeModelHelper.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/APTCodeModelHelper.java index c0174e71bd..2dfcd49d1f 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/APTCodeModelHelper.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/APTCodeModelHelper.java @@ -422,7 +422,7 @@ private void addIntentBuilder(JCodeModel codeModel, EBeanHolder holder, Annotati } } - public JInvocation addIntentBuilderPutExtraMethod(JCodeModel codeModel, EBeanHolder holder, APTCodeModelHelper helper, ProcessingEnvironment processingEnv, JMethod method, TypeMirror elementType, String parameterName, String extraName) { + public JInvocation addIntentBuilderPutExtraMethod(JCodeModel codeModel, EBeanHolder holder, APTCodeModelHelper helper, ProcessingEnvironment processingEnv, JMethod method, TypeMirror elementType, String parameterName, JFieldVar extraKeyField) { boolean castToSerializable = false; boolean castToParcelable = false; if (elementType.getKind() == TypeKind.DECLARED) { @@ -445,7 +445,7 @@ public JInvocation addIntentBuilderPutExtraMethod(JCodeModel codeModel, EBeanHol JClass parameterClass = helper.typeMirrorToJClass(elementType, holder); JVar extraParameterVar = method.param(parameterClass, parameterName); JBlock body = method.body(); - JInvocation invocation = body.invoke(holder.intentField, "putExtra").arg(extraName); + JInvocation invocation = body.invoke(holder.intentField, "putExtra").arg(extraKeyField); if (castToSerializable) { return invocation.arg(cast(holder.classes().SERIALIZABLE, extraParameterVar)); } else if (castToParcelable) { diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ExtraProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ExtraProcessor.java index ae4a458801..0118286583 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ExtraProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ExtraProcessor.java @@ -123,7 +123,7 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) { // flags() JMethod method = holder.intentBuilderClass.method(PUBLIC, holder.intentBuilderClass, fieldName); - helper.addIntentBuilderPutExtraMethod(codeModel, holder, helper, processingEnv, method, elementType, fieldName, staticFieldName); + helper.addIntentBuilderPutExtraMethod(codeModel, holder, helper, processingEnv, method, elementType, fieldName, extraKeyField); JBlock body = method.body(); body._return(_this()); diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ServiceActionProcessor.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ServiceActionProcessor.java index 305c572534..6823130fe7 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ServiceActionProcessor.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/ServiceActionProcessor.java @@ -22,7 +22,9 @@ import static com.sun.codemodel.JMod.STATIC; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Element; @@ -62,6 +64,8 @@ public String getTarget() { @Override public void process(Element element, JCodeModel codeModel, EBeanHolder holder) { + Map extraKeyFields = new HashMap(); + ExecutableElement executableElement = (ExecutableElement) element; String methodName = element.getSimpleName().toString(); @@ -113,13 +117,17 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) { JClass extraParamClass = helper.typeMirrorToJClass(param.asType(), holder); boolean isPrimitive = param.asType().getKind().isPrimitive(); + String extraKeyName = CaseHelper.camelCaseToUpperSnakeCase(null, methodName + paramName, "Extra"); + JFieldVar extraKeyField = holder.generatedClass.field(PUBLIC | STATIC | FINAL, classes.STRING, extraKeyName, lit(extraKeyName)); + extraKeyFields.put(methodName + paramName, extraKeyField); + JExpression extraInvok; if (isPrimitive) { JPrimitiveType primitiveType = JType.parse(codeModel, param.asType().toString()); JClass wrapperType = primitiveType.boxify(); - extraInvok = JExpr.cast(wrapperType, extras.invoke("get").arg(paramName)); + extraInvok = JExpr.cast(wrapperType, extras.invoke("get").arg(extraKeyField)); } else { - extraInvok = JExpr.invoke(holder.cast).arg(extras.invoke("get").arg(paramName)); + extraInvok = JExpr.invoke(holder.cast).arg(extras.invoke("get").arg(extraKeyField)); } JVar extraField = extrasNotNullBlock.decl(extraParamClass, extraParamName, extraInvok); extraFields.add(extraField); @@ -156,7 +164,9 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) { for (VariableElement param : methodParameters) { String paramName = param.getSimpleName().toString(); - helper.addIntentBuilderPutExtraMethod(codeModel, holder, helper, processingEnv, method, param.asType(), paramName, paramName); + JFieldVar extraKeyField = extraKeyFields.get(methodName + paramName); + + helper.addIntentBuilderPutExtraMethod(codeModel, holder, helper, processingEnv, method, param.asType(), paramName, extraKeyField); } } diff --git a/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/InjectExtraTest.java b/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/InjectExtraTest.java index 25e6c56dbe..96368c455c 100644 --- a/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/InjectExtraTest.java +++ b/AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/InjectExtraTest.java @@ -23,24 +23,24 @@ import org.junit.Test; import org.junit.runner.RunWith; -import android.content.Intent; +import android.app.Activity; +import android.content.Context; @RunWith(AndroidAnnotationsTestRunner.class) public class InjectExtraTest { - private Intent intent; private ExtraInjectedActivity_ activity; + private Context context = new Activity(); @Before public void setup() { activity = new ExtraInjectedActivity_(); - intent = new Intent(); - activity.setIntent(intent); } @Test public void simple_string_extra_injected() { - intent.putExtra("stringExtra", "Hello!"); + activity.setIntent(ExtraInjectedActivity_.intent(context) + .stringExtra("Hello!").get()); activity.onCreate(null); assertThat(activity.stringExtra).isEqualTo("Hello!"); } @@ -48,7 +48,8 @@ public void simple_string_extra_injected() { @Test public void array_extra_injected() { CustomData[] customData = { new CustomData("42") }; - intent.putExtra("arrayExtra", customData); + activity.setIntent(ExtraInjectedActivity_.intent(context) + .arrayExtra(customData).get()); activity.onCreate(null); assertThat(activity.arrayExtra).isEqualTo(customData); } @@ -57,14 +58,16 @@ public void array_extra_injected() { public void list_extra_injected() { ArrayList list = new ArrayList(); list.add("Hello !"); - intent.putExtra("listExtra", list); + activity.setIntent(ExtraInjectedActivity_.intent(context) + .listExtra(list).get()); activity.onCreate(null); assertThat(activity.listExtra).isEqualTo(list); } @Test public void int_extra_injected() { - intent.putExtra("intExtra", 42); + activity.setIntent(ExtraInjectedActivity_.intent(context).intExtra(42) + .get()); activity.onCreate(null); assertThat(activity.intExtra).isEqualTo(42); } @@ -72,27 +75,28 @@ public void int_extra_injected() { @Test public void int_array_extra_injected() { byte[] byteArray = { 0, 2 }; - intent.putExtra("byteArrayExtra", byteArray); + activity.setIntent(ExtraInjectedActivity_.intent(context) + .byteArrayExtra(byteArray).get()); activity.onCreate(null); assertThat(activity.byteArrayExtra).isEqualTo(byteArray); } @Test public void setIntent_reinjects_extra() { - intent.putExtra("stringExtra", "Hello!"); + activity.setIntent(ExtraInjectedActivity_.intent(context) + .stringExtra("Hello!").get()); activity.onCreate(null); - Intent newIntent = new Intent(); - newIntent.putExtra("stringExtra", "Hello Again!"); - - activity.setIntent(newIntent); + activity.setIntent(ExtraInjectedActivity_.intent(context) + .stringExtra("Hello Again!").get()); assertThat(activity.stringExtra).isEqualTo("Hello Again!"); } - + @Test public void extraWithoutValueInjected() { - intent.putExtra("extraWithoutValue", "Hello!"); + activity.setIntent(ExtraInjectedActivity_.intent(context) + .extraWithoutValue("Hello!").get()); activity.onCreate(null); assertThat(activity.extraWithoutValue).isEqualTo("Hello!"); } diff --git a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ExtraInjectedActivity.java b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ExtraInjectedActivity.java index f789e052ec..e741e00b19 100644 --- a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ExtraInjectedActivity.java +++ b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ExtraInjectedActivity.java @@ -26,7 +26,7 @@ @EActivity public class ExtraInjectedActivity extends Activity { - @Extra("stringExtra") + @Extra("aStringExtra") String stringExtra; @Extra("arrayExtra")