Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
This repository was archived by the owner on Feb 26, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -62,6 +64,8 @@ public String getTarget() {

@Override
public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
Map<String, JFieldVar> extraKeyFields = new HashMap<String, JFieldVar>();

ExecutableElement executableElement = (ExecutableElement) element;
String methodName = element.getSimpleName().toString();

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,32 +23,33 @@
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!");
}

@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);
}
Expand All @@ -57,42 +58,45 @@ public void array_extra_injected() {
public void list_extra_injected() {
ArrayList<String> list = new ArrayList<String>();
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);
}

@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!");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
@EActivity
public class ExtraInjectedActivity extends Activity {

@Extra("stringExtra")
@Extra("aStringExtra")
String stringExtra;

@Extra("arrayExtra")
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.