Skip to content

Commit 7d0c59e

Browse files
committed
allow to inject ormlite daos into @OrmLiteDao annotated methods
1 parent 9121bfc commit 7d0c59e

2 files changed

Lines changed: 33 additions & 15 deletions

File tree

  • AndroidAnnotations/androidannotations-ormlite

‎AndroidAnnotations/androidannotations-ormlite/ormlite-api/src/main/java/org/androidannotations/ormlite/annotations/OrmLiteDao.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
* </blockquote>
6161
*/
6262
@Retention(RetentionPolicy.CLASS)
63-
@Target(ElementType.FIELD)
63+
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
6464
public @interface OrmLiteDao {
6565

6666
/**

‎AndroidAnnotations/androidannotations-ormlite/ormlite/src/main/java/org/androidannotations/ormlite/handler/OrmLiteDaoHandler.java‎

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717

1818
import static com.helger.jcodemodel.JExpr._new;
1919
import static com.helger.jcodemodel.JExpr.cast;
20-
import static com.helger.jcodemodel.JExpr.ref;
2120

2221
import javax.lang.model.element.Element;
2322
import javax.lang.model.type.TypeMirror;
2423

2524
import org.androidannotations.AndroidAnnotationsEnvironment;
2625
import org.androidannotations.ElementValidation;
2726
import org.androidannotations.handler.BaseAnnotationHandler;
27+
import org.androidannotations.handler.MethodInjectionHandler;
28+
import org.androidannotations.helper.InjectHelper;
2829
import org.androidannotations.holder.EComponentHolder;
2930
import org.androidannotations.ormlite.annotations.OrmLiteDao;
3031
import org.androidannotations.ormlite.helper.OrmLiteClasses;
@@ -33,14 +34,17 @@
3334
import org.androidannotations.ormlite.holder.OrmLiteHolder;
3435

3536
import com.helger.jcodemodel.AbstractJClass;
37+
import com.helger.jcodemodel.IJAssignmentTarget;
3638
import com.helger.jcodemodel.IJExpression;
3739
import com.helger.jcodemodel.JBlock;
3840
import com.helger.jcodemodel.JCatchBlock;
3941
import com.helger.jcodemodel.JFieldVar;
4042
import com.helger.jcodemodel.JTryBlock;
4143
import 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

Comments
 (0)