Skip to content

Commit 2de8ad9

Browse files
committed
Handle RuntimeExceptionDao in @OrmLiteDao
1 parent 7717644 commit 2de8ad9

5 files changed

Lines changed: 42 additions & 7 deletions

File tree

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ public final class CanonicalNameConstants {
155155
public static final String DAO_MANAGER = "com.j256.ormlite.dao.DaoManager";
156156
public static final String CONNECTION_SOURCE = "com.j256.ormlite.support.ConnectionSource";
157157
public static final String OPEN_HELPER_MANAGER = "com.j256.ormlite.android.apptools.OpenHelperManager";
158+
public static final String RUNTIME_EXCEPTION_DAO = "com.j256.ormlite.dao.RuntimeExceptionDao";
158159

159160
/*
160161
* HttpClient

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -522,15 +522,19 @@ public void extendsOrmLiteDaoWithValidModelParameter(Element element, IsValid va
522522
TypeMirror modelTypeMirror = annotationHelper.extractAnnotationParameter(element, "model");
523523

524524
TypeElement daoTypeElement = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.DAO);
525+
TypeElement runtimeExceptionDaoTypeElement = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.RUNTIME_EXCEPTION_DAO);
526+
525527
if (daoTypeElement != null) {
526528

527529
TypeMirror wildcardType = annotationHelper.getTypeUtils().getWildcardType(null, null);
528530
DeclaredType daoParameterizedType = annotationHelper.getTypeUtils().getDeclaredType(daoTypeElement, modelTypeMirror, wildcardType);
531+
DeclaredType runtimeExceptionDaoParameterizedType = annotationHelper.getTypeUtils().getDeclaredType(runtimeExceptionDaoTypeElement, modelTypeMirror, wildcardType);
529532

530-
// Checks that elementType extends Dao<ModelType, ?>
531-
if (!annotationHelper.isSubtype(elementType, daoParameterizedType)) {
533+
// Checks that elementType extends Dao<ModelType, ?> or RuntimeExceptionDao<ModelType, ?>
534+
if (!annotationHelper.isSubtype(elementType, daoParameterizedType) && !annotationHelper.isSubtype(elementType, runtimeExceptionDaoParameterizedType)) {
532535
valid.invalidate();
533-
annotationHelper.printAnnotationError(element, "%s can only be used on an element that extends " + daoParameterizedType.toString());
536+
annotationHelper.printAnnotationError(element, "%s can only be used on an element that extends " + daoParameterizedType.toString() //
537+
+ " or " + runtimeExceptionDaoParameterizedType.toString());
534538
}
535539
}
536540
}

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/EBeansHolder.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ public class Classes {
136136
*/
137137
public final JClass CONNECTION_SOURCE = refClass(CanonicalNameConstants.CONNECTION_SOURCE);
138138
public final JClass OPEN_HELPER_MANAGER = refClass(CanonicalNameConstants.OPEN_HELPER_MANAGER);
139+
public final JClass RUNTIME_EXCEPTION_DAO = refClass(CanonicalNameConstants.RUNTIME_EXCEPTION_DAO);
139140
public final JClass DAO_MANAGER = refClass(CanonicalNameConstants.DAO_MANAGER);
140141

141142
/*

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/processing/OrmLiteDaoProcessor.java‎

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@
2020

2121
import javax.annotation.processing.ProcessingEnvironment;
2222
import javax.lang.model.element.Element;
23+
import javax.lang.model.element.TypeElement;
24+
import javax.lang.model.type.DeclaredType;
2325
import javax.lang.model.type.TypeMirror;
2426

2527
import org.androidannotations.annotations.OrmLiteDao;
28+
import org.androidannotations.helper.CanonicalNameConstants;
2629
import org.androidannotations.helper.TargetAnnotationHelper;
2730
import org.androidannotations.processing.EBeansHolder.Classes;
2831

@@ -82,13 +85,27 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
8285
.arg(dbHelperClass));
8386
}
8487

88+
89+
JExpression modelClass = holder.refClass(modelObjectTypeMirror.toString()).dotclass();
90+
91+
JExpression injectExpr;
92+
if (elementExtendsRuntimeExceptionDao(element, modelObjectTypeMirror)) {
93+
94+
injectExpr = classes.RUNTIME_EXCEPTION_DAO//
95+
.staticInvoke("createDao") //
96+
.arg(databaseHelperRef.invoke("getConnectionSource")) //
97+
.arg(modelClass);
98+
99+
} else {
100+
101+
injectExpr = databaseHelperRef.invoke("getDao").arg(modelClass);
102+
103+
}
104+
85105
// create dao from database helper
86106
JTryBlock tryBlock = initBody._try();
87107

88-
JExpression modelClass = holder.refClass(modelObjectTypeMirror.toString()).dotclass();
89-
tryBlock.body().assign(ref(fieldName), //
90-
databaseHelperRef.invoke("getDao"). //
91-
arg(modelClass));
108+
tryBlock.body().assign(ref(fieldName), injectExpr);
92109

93110
JCatchBlock catchBlock = tryBlock._catch(classes.SQL_EXCEPTION);
94111
JVar exception = catchBlock.param("e");
@@ -99,4 +116,12 @@ public void process(Element element, JCodeModel codeModel, EBeanHolder holder) {
99116
.arg("Could not create DAO " + fieldName) //
100117
.arg(exception);
101118
}
119+
120+
private boolean elementExtendsRuntimeExceptionDao(Element element, TypeMirror modelObjectTypeMirror) {
121+
TypeMirror elementType = element.asType();
122+
TypeElement runtimeExceptionDaoTypeElement = helper.typeElementFromQualifiedName(CanonicalNameConstants.RUNTIME_EXCEPTION_DAO);
123+
TypeMirror wildcardType = helper.getTypeUtils().getWildcardType(null, null);
124+
DeclaredType runtimeExceptionDaoParameterizedType = helper.getTypeUtils().getDeclaredType(runtimeExceptionDaoTypeElement, modelObjectTypeMirror, wildcardType);
125+
return helper.isSubtype(elementType, runtimeExceptionDaoParameterizedType);
126+
}
102127
}

‎AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ormlite/OrmLiteActivity.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.androidannotations.annotations.EActivity;
2222
import org.androidannotations.annotations.OrmLiteDao;
2323
import com.j256.ormlite.dao.Dao;
24+
import com.j256.ormlite.dao.RuntimeExceptionDao;
2425

2526
@EActivity
2627
public class OrmLiteActivity extends Activity {
@@ -30,6 +31,9 @@ public class OrmLiteActivity extends Activity {
3031
@OrmLiteDao(helper = DatabaseHelper.class, model = Car.class)
3132
Dao<Car, Long> carDao;
3233

34+
@OrmLiteDao(helper = DatabaseHelper.class, model = Car.class)
35+
RuntimeExceptionDao<Car, Long> runtimeExceptionDao;
36+
3337
@Bean
3438
OrmLiteBean ormLiteBean;
3539
}

0 commit comments

Comments
 (0)