1717
1818import static com .helger .jcodemodel .JExpr ._new ;
1919import static com .helger .jcodemodel .JExpr .cast ;
20- import static com .helger .jcodemodel .JExpr .ref ;
2120
2221import javax .lang .model .element .Element ;
2322import javax .lang .model .type .TypeMirror ;
2423
2524import org .androidannotations .AndroidAnnotationsEnvironment ;
2625import org .androidannotations .ElementValidation ;
2726import org .androidannotations .handler .BaseAnnotationHandler ;
27+ import org .androidannotations .handler .MethodInjectionHandler ;
28+ import org .androidannotations .helper .InjectHelper ;
2829import org .androidannotations .holder .EComponentHolder ;
2930import org .androidannotations .ormlite .annotations .OrmLiteDao ;
3031import org .androidannotations .ormlite .helper .OrmLiteClasses ;
3334import org .androidannotations .ormlite .holder .OrmLiteHolder ;
3435
3536import com .helger .jcodemodel .AbstractJClass ;
37+ import com .helger .jcodemodel .IJAssignmentTarget ;
3638import com .helger .jcodemodel .IJExpression ;
3739import com .helger .jcodemodel .JBlock ;
3840import com .helger .jcodemodel .JCatchBlock ;
3941import com .helger .jcodemodel .JFieldVar ;
4042import com .helger .jcodemodel .JTryBlock ;
4143import com .helger .jcodemodel .JVar ;
4244
43- public class OrmLiteDaoHandler extends BaseAnnotationHandler <EComponentHolder > {
45+ public class OrmLiteDaoHandler extends BaseAnnotationHandler <EComponentHolder >implements MethodInjectionHandler <EComponentHolder > {
46+
47+ private final InjectHelper <EComponentHolder > injectHelper ;
4448
4549 private final OrmLiteHelper ormLiteHelper ;
4650 private final OrmLiteValidatorHelper ormLiteValidatorHelper ;
@@ -49,57 +53,71 @@ public OrmLiteDaoHandler(AndroidAnnotationsEnvironment environment) {
4953 super (OrmLiteDao .class , environment );
5054 ormLiteHelper = new OrmLiteHelper (annotationHelper );
5155 ormLiteValidatorHelper = new OrmLiteValidatorHelper (environment );
56+ injectHelper = new InjectHelper <>(validatorHelper , this );
5257 }
5358
5459 @ Override
5560 public void validate (Element element , ElementValidation validation ) {
56- validatorHelper . enclosingElementHasEnhancedComponentAnnotation ( element , validation );
61+ injectHelper . validate ( OrmLiteDao . class , element , validation );
5762
5863 validatorHelper .isNotPrivate (element , validation );
5964
6065 ormLiteValidatorHelper .hasOrmLiteJars (validation );
6166
62- ormLiteValidatorHelper .extendsOrmLiteDao (element , validation , ormLiteHelper );
67+ Element param = injectHelper .getParam (element );
68+ ormLiteValidatorHelper .extendsOrmLiteDao (param , validation , ormLiteHelper );
6369
6470 ormLiteValidatorHelper .hasASqliteOpenHelperParametrizedType (element , validation );
6571 }
6672
6773 @ Override
6874 public void process (Element element , EComponentHolder holder ) {
69- OrmLiteHolder ormLiteHolder = holder .getPluginHolder (new OrmLiteHolder (holder ));
75+ injectHelper .process (element , holder );
76+ }
77+
78+ @ Override
79+ public JBlock getInvocationBlock (EComponentHolder holder ) {
80+ return holder .getInitBodyInjectionBlock ();
81+ }
7082
71- String fieldName = element .getSimpleName ().toString ();
83+ @ Override
84+ public void assignValue (JBlock targetBlock , IJAssignmentTarget fieldRef , EComponentHolder holder , Element element , Element param ) {
85+ OrmLiteHolder ormLiteHolder = holder .getPluginHolder (new OrmLiteHolder (holder ));
7286
73- AbstractJClass modelClass = getJClass (ormLiteHelper .getEntityType (element ).toString ());
74- AbstractJClass idClass = getJClass (ormLiteHelper .getEntityIdType (element ).toString ());
87+ AbstractJClass modelClass = getJClass (ormLiteHelper .getEntityType (param ).toString ());
88+ AbstractJClass idClass = getJClass (ormLiteHelper .getEntityIdType (param ).toString ());
7589 IJExpression modelClassDotClass = modelClass .dotclass ();
7690
7791 AbstractJClass daoClass = getJClass (OrmLiteClasses .DAO ).narrow (modelClass , idClass );
92+ AbstractJClass daoImplClass = codeModelHelper .typeMirrorToJClass (param .asType ());
7893
7994 TypeMirror databaseHelperTypeMirror = annotationHelper .extractAnnotationParameter (element , "helper" );
8095 JFieldVar databaseHelperRef = ormLiteHolder .getDatabaseHelperRef (databaseHelperTypeMirror );
8196
82- JBlock initBody = holder .getInitBodyInjectionBlock ();
83-
8497 IJExpression injectExpr = databaseHelperRef .invoke ("getDao" ).arg (modelClassDotClass );
85- if (elementExtendsRuntimeExceptionDao (element )) {
86- AbstractJClass daoImplClass = codeModelHelper .typeMirrorToJClass (element .asType ());
98+ if (elementExtendsRuntimeExceptionDao (param )) {
8799 injectExpr = _new (daoImplClass ).arg (cast (daoClass , injectExpr ));
88100 }
89101
90- JTryBlock tryBlock = initBody ._try ();
91- tryBlock .body ().assign (ref ( fieldName ), injectExpr );
102+ JTryBlock tryBlock = targetBlock ._try ();
103+ tryBlock .body ().add ( fieldRef . assign (injectExpr ) );
92104
93105 JCatchBlock catchBlock = tryBlock ._catch (getClasses ().SQL_EXCEPTION );
94106 JVar exception = catchBlock .param ("e" );
95107
108+ String fieldName = param .getSimpleName ().toString ();
96109 catchBlock .body () //
97110 .staticInvoke (getClasses ().LOG , "e" ) //
98111 .arg (holder .getGeneratedClass ().name ()) //
99112 .arg ("Could not create DAO " + fieldName ) //
100113 .arg (exception );
101114 }
102115
116+ @ Override
117+ public void validateEnclosingElement (Element element , ElementValidation valid ) {
118+ validatorHelper .enclosingElementHasEnhancedComponentAnnotation (element , valid );
119+ }
120+
103121 private boolean elementExtendsRuntimeExceptionDao (Element element ) {
104122 TypeMirror elementType = element .asType ();
105123 return annotationHelper .isSubtype (elementType , ormLiteHelper .getRuntimeExceptionDaoParametrizedType ());
0 commit comments