Skip to content

Commit 103dba0

Browse files
committed
Merge pull request androidannotations#442 from excilys/441_Extra_in_constant
Extra field names are now referencing generated public constants. Fixes androidannotations#441
2 parents 5a50b13 + 1e79d72 commit 103dba0

2 files changed

Lines changed: 25 additions & 6 deletions

File tree

AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CaseHelper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,8 @@ public static String camelCaseToSnakeCase(String camelCase) {
5656
}
5757
}
5858

59+
public static String camelCaseToUpperSnakeCase(String camelCase) {
60+
return camelCaseToSnakeCase(camelCase).toUpperCase();
61+
}
62+
5963
}

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

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@
1515
*/
1616
package org.androidannotations.processing;
1717

18-
import static org.androidannotations.helper.CanonicalNameConstants.PARCELABLE;
19-
import static org.androidannotations.helper.CanonicalNameConstants.STRING;
2018
import static com.sun.codemodel.JExpr._null;
2119
import static com.sun.codemodel.JExpr._super;
2220
import static com.sun.codemodel.JExpr._this;
2321
import static com.sun.codemodel.JExpr.cast;
2422
import static com.sun.codemodel.JExpr.invoke;
23+
import static com.sun.codemodel.JExpr.lit;
24+
import static com.sun.codemodel.JMod.FINAL;
2525
import static com.sun.codemodel.JMod.PRIVATE;
2626
import static com.sun.codemodel.JMod.PUBLIC;
27+
import static com.sun.codemodel.JMod.STATIC;
28+
import static org.androidannotations.helper.CanonicalNameConstants.PARCELABLE;
29+
import static org.androidannotations.helper.CanonicalNameConstants.STRING;
2730

2831
import java.lang.annotation.Annotation;
2932

@@ -36,13 +39,16 @@
3639

3740
import org.androidannotations.annotations.Extra;
3841
import org.androidannotations.helper.APTCodeModelHelper;
42+
import org.androidannotations.helper.CaseHelper;
3943
import org.androidannotations.processing.EBeansHolder.Classes;
44+
4045
import com.sun.codemodel.JBlock;
4146
import com.sun.codemodel.JCatchBlock;
4247
import com.sun.codemodel.JClass;
4348
import com.sun.codemodel.JCodeModel;
4449
import com.sun.codemodel.JExpr;
4550
import com.sun.codemodel.JFieldRef;
51+
import com.sun.codemodel.JFieldVar;
4652
import com.sun.codemodel.JInvocation;
4753
import com.sun.codemodel.JMethod;
4854
import com.sun.codemodel.JMod;
@@ -89,7 +95,16 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
8995
injectExtras(holder, codeModel);
9096
}
9197

92-
JBlock ifContainsKey = holder.extrasNotNullBlock._if(JExpr.invoke(holder.extras, "containsKey").arg(extraKey))._then();
98+
String staticFieldName;
99+
if (fieldName.endsWith("Extra")) {
100+
staticFieldName = CaseHelper.camelCaseToUpperSnakeCase(fieldName);
101+
} else {
102+
staticFieldName = CaseHelper.camelCaseToUpperSnakeCase(fieldName + "Extra");
103+
}
104+
105+
JFieldVar extraKeyField = holder.generatedClass.field(PUBLIC | STATIC | FINAL, classes.STRING, staticFieldName, lit(extraKey));
106+
107+
JBlock ifContainsKey = holder.extrasNotNullBlock._if(JExpr.invoke(holder.extras, "containsKey").arg(extraKeyField))._then();
93108

94109
JTryBlock containsKeyTry = ifContainsKey._try();
95110

@@ -98,9 +113,9 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
98113
if (isPrimitive) {
99114
JPrimitiveType primitiveType = JType.parse(codeModel, elementType.toString());
100115
JClass wrapperType = primitiveType.boxify();
101-
containsKeyTry.body().assign(extraField, JExpr.cast(wrapperType, holder.extras.invoke("get").arg(extraKey)));
116+
containsKeyTry.body().assign(extraField, JExpr.cast(wrapperType, holder.extras.invoke("get").arg(extraKeyField)));
102117
} else {
103-
containsKeyTry.body().assign(extraField, JExpr.invoke(holder.cast).arg(holder.extras.invoke("get").arg(extraKey)));
118+
containsKeyTry.body().assign(extraField, JExpr.invoke(holder.cast).arg(holder.extras.invoke("get").arg(extraKeyField)));
104119
}
105120

106121
JCatchBlock containsKeyCatch = containsKeyTry._catch(classes.CLASS_CAST_EXCEPTION);
@@ -139,7 +154,7 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
139154
JClass paramClass = helper.typeMirrorToJClass(extraType, holder);
140155
JVar extraParam = method.param(paramClass, fieldName);
141156
JBlock body = method.body();
142-
JInvocation invocation = body.invoke(holder.intentField, "putExtra").arg(extraKey);
157+
JInvocation invocation = body.invoke(holder.intentField, "putExtra").arg(extraKeyField);
143158
if (castToSerializable) {
144159
invocation.arg(cast(classes.SERIALIZABLE, extraParam));
145160
} else {

0 commit comments

Comments
 (0)