1616package org .androidannotations .processing ;
1717
1818import static com .sun .codemodel .JExpr ._null ;
19- import static com .sun .codemodel .JExpr .cast ;
2019import static com .sun .codemodel .JExpr .lit ;
2120import static com .sun .codemodel .JMod .FINAL ;
2221import static com .sun .codemodel .JMod .PUBLIC ;
2322import static com .sun .codemodel .JMod .STATIC ;
24- import static org .androidannotations .helper .CanonicalNameConstants .PARCELABLE ;
25- import static org .androidannotations .helper .CanonicalNameConstants .SERIALIZABLE ;
26- import static org .androidannotations .helper .CanonicalNameConstants .STRING ;
2723
2824import java .util .ArrayList ;
2925import java .util .List ;
3228import javax .lang .model .element .Element ;
3329import javax .lang .model .element .ExecutableElement ;
3430import javax .lang .model .element .VariableElement ;
35- import javax .lang .model .type .TypeKind ;
36- import javax .lang .model .type .TypeMirror ;
37- import javax .lang .model .util .Elements ;
38- import javax .lang .model .util .Types ;
3931
4032import org .androidannotations .annotations .ServiceAction ;
4133import org .androidannotations .helper .APTCodeModelHelper ;
5042import com .sun .codemodel .JFieldVar ;
5143import com .sun .codemodel .JInvocation ;
5244import com .sun .codemodel .JMethod ;
53- import com .sun .codemodel .JMod ;
5445import com .sun .codemodel .JPrimitiveType ;
5546import com .sun .codemodel .JType ;
56- import com .sun .codemodel .JTypeVar ;
5747import com .sun .codemodel .JVar ;
5848
5949public class ServiceActionProcessor implements DecoratingElementProcessor {
@@ -84,12 +74,8 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
8474 extraKey = methodName ;
8575 }
8676
87- String staticFieldName ;
88- if (methodName .startsWith ("action" )) {
89- staticFieldName = CaseHelper .camelCaseToUpperSnakeCase (methodName );
90- } else {
91- staticFieldName = CaseHelper .camelCaseToUpperSnakeCase ("action_" + methodName );
92- }
77+ String staticFieldName = CaseHelper .camelCaseToUpperSnakeCase ("action" , methodName , null );
78+
9379 JFieldVar actionKeyField = holder .generatedClass .field (PUBLIC | STATIC | FINAL , classes .STRING , staticFieldName , lit (extraKey ));
9480
9581 if (holder .onHandleIntentBody != null ) {
@@ -108,7 +94,7 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
10894 List <? extends VariableElement > methodParameters = executableElement .getParameters ();
10995 if (methodParameters .size () > 0 ) {
11096 if (holder .cast == null ) {
111- generateCastMethod (codeModel , holder );
97+ helper . addCastMethod (codeModel , holder );
11298 }
11399
114100 // Extras
@@ -169,53 +155,13 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
169155 // Extras params
170156 for (VariableElement param : methodParameters ) {
171157 String paramName = param .getSimpleName ().toString ();
172- String extraParamName = paramName + "Extra" ;
173158
174- boolean castToSerializable = false ;
175- boolean castToParcelable = false ;
176- TypeMirror extraType = param .asType ();
177- if (extraType .getKind () == TypeKind .DECLARED ) {
178- Elements elementUtils = processingEnv .getElementUtils ();
179- Types typeUtils = processingEnv .getTypeUtils ();
180- TypeMirror parcelableType = elementUtils .getTypeElement (PARCELABLE ).asType ();
181- if (!typeUtils .isSubtype (extraType , parcelableType )) {
182- TypeMirror stringType = elementUtils .getTypeElement (STRING ).asType ();
183- if (!typeUtils .isSubtype (extraType , stringType )) {
184- castToSerializable = true ;
185- }
186- } else {
187- TypeMirror serializableType = elementUtils .getTypeElement (SERIALIZABLE ).asType ();
188- if (typeUtils .isSubtype (extraType , serializableType )) {
189- castToParcelable = true ;
190- }
191- }
192- }
193- JClass paramClass = helper .typeMirrorToJClass (extraType , holder );
194- JVar extraParam = method .param (paramClass , extraParamName );
195- JInvocation invocation = body .invoke (holder .intentField , "putExtra" ).arg (paramName );
196- if (castToSerializable ) {
197- invocation .arg (cast (classes .SERIALIZABLE , extraParam ));
198- } else if (castToParcelable ) {
199- invocation .arg (cast (classes .PARCELABLE , extraParam ));
200- } else {
201- invocation .arg (extraParam );
202- }
159+ helper .addIntentBuilderPutExtraMethod (codeModel , holder , helper , processingEnv , method , param .asType (), paramName , paramName );
203160 }
204161
205162 }
206163 body ._return (JExpr ._this ());
207164 }
208165
209166 }
210-
211- private void generateCastMethod (JCodeModel codeModel , EBeanHolder holder ) {
212- JType objectType = codeModel ._ref (Object .class );
213- JMethod method = holder .generatedClass .method (JMod .PRIVATE , objectType , "cast_" );
214- JTypeVar genericType = method .generify ("T" );
215- method .type (genericType );
216- JVar objectParam = method .param (objectType , "object" );
217- method .annotate (SuppressWarnings .class ).param ("value" , "unchecked" );
218- method .body ()._return (JExpr .cast (genericType , objectParam ));
219- holder .cast = method ;
220- }
221167}
0 commit comments