Skip to content

Commit c03dea8

Browse files
authored
Merge pull request #337 from domaframework/issue-332-4
Support ApplicationScoped and Dependent annotations for Quarkus.
2 parents 05d9026 + f80b9ff commit c03dea8

File tree

11 files changed

+142
-3
lines changed

11 files changed

+142
-3
lines changed

src/main/java/org/seasar/doma/internal/apt/Options.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ public final class Options {
4646

4747
public static final String LOMBOK_VALUE = "doma.lombok.Value";
4848

49+
public static final String CDI_APPLICATION_SCOPED = "doma.cdi.ApplicationScoped";
50+
51+
public static final String CDI_DEPENDENT = "doma.cdi.Dependent";
52+
4953
private final Context ctx;
5054

5155
private final Map<String, String> options;
@@ -134,6 +138,16 @@ public String getLombokValue() {
134138
return name != null ? name : Constants.DEFAULT_LOMBOK_VALUE;
135139
}
136140

141+
public String getCdiApplicationScoped() {
142+
String name = getOption(CDI_APPLICATION_SCOPED);
143+
return name != null ? name : Constants.DEFAULT_CDI_APPLICATION_SCOPED;
144+
}
145+
146+
public String getCdiDependent() {
147+
String name = getOption(CDI_DEPENDENT);
148+
return name != null ? name : Constants.DEFAULT_CDI_DEPENDENT;
149+
}
150+
137151
private String getOption(String key) {
138152
String v = options.get(key);
139153
if (v != null) {
@@ -190,5 +204,10 @@ public static class Constants {
190204
public static final String DEFAULT_LOMBOK_ALL_ARGS_CONSTRUCTOR = "lombok.AllArgsConstructor";
191205

192206
public static final String DEFAULT_LOMBOK_VALUE = "lombok.Value";
207+
208+
public static final String DEFAULT_CDI_APPLICATION_SCOPED =
209+
"javax.enterprise.context.ApplicationScoped";
210+
211+
public static final String DEFAULT_CDI_DEPENDENT = "javax.enterprise.context.Dependent";
193212
}
194213
}

src/main/java/org/seasar/doma/internal/apt/generator/DaoImplGenerator.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.lang.reflect.Method;
66
import java.sql.Connection;
77
import java.util.function.Function;
8+
import javax.lang.model.element.Name;
89
import javax.lang.model.element.TypeElement;
910
import javax.lang.model.type.TypeMirror;
1011
import javax.sql.DataSource;
@@ -121,6 +122,9 @@ private void printConstructors() {
121122
printAnnotatedConstructor();
122123
}
123124
} else {
125+
if (isNoArgConstructorRequired()) {
126+
printNoArgConstructor();
127+
}
124128
printAnnotatedConstructor();
125129
}
126130
}
@@ -130,6 +134,21 @@ private boolean areJdbcConstructorsRequired() {
130134
return parentDaoMeta == null || parentDaoMeta.hasUserDefinedConfig();
131135
}
132136

137+
private boolean isNoArgConstructorRequired() {
138+
String applicationScoped = ctx.getOptions().getCdiApplicationScoped();
139+
String dependent = ctx.getOptions().getCdiDependent();
140+
for (AnnotationAnnot annotation : daoMeta.getAnnotationMirrors(AnnotationTarget.CLASS)) {
141+
TypeElement typeElement = ctx.getMoreTypes().toTypeElement(annotation.getTypeValue());
142+
if (typeElement != null) {
143+
Name name = typeElement.getQualifiedName();
144+
if (name.contentEquals(applicationScoped) || name.contentEquals(dependent)) {
145+
return true;
146+
}
147+
}
148+
}
149+
return false;
150+
}
151+
133152
private Code createConfigCode() {
134153
TypeMirror type = daoMeta.getConfigType();
135154
String method = daoMeta.getSingletonMethodName();
@@ -148,6 +167,13 @@ private Code createConfigCode() {
148167
});
149168
}
150169

170+
private void printNoArgConstructor() {
171+
iprint("/** */%n");
172+
iprint("%1$s() {%n", simpleName);
173+
iprint("}%n");
174+
print("%n");
175+
}
176+
151177
private void printNoArgConstructor(Code configCode) {
152178
iprint("/** */%n");
153179
iprint("public %1$s() {%n", simpleName);

src/main/java/org/seasar/doma/internal/apt/processor/DaoProcessor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
Options.SQL_VALIDATION,
3333
Options.VERSION_VALIDATION,
3434
Options.RESOURCES_DIR,
35-
Options.CONFIG_PATH
35+
Options.CONFIG_PATH,
36+
Options.CDI_APPLICATION_SCOPED,
37+
Options.CDI_DEPENDENT
3638
})
3739
public class DaoProcessor extends AbstractGeneratingProcessor<DaoMeta> {
3840

src/main/java/org/seasar/doma/internal/jdbc/dao/AbstractDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
public abstract class AbstractDao implements ConfigProvider {
1919

20-
protected final Config __config;
20+
protected Config __config;
2121

2222
protected AbstractDao() {
2323
__config = null;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.seasar.doma.internal.apt.cdi;
2+
3+
import static java.lang.annotation.ElementType.TYPE;
4+
5+
import java.lang.annotation.Target;
6+
7+
@Target(value = {TYPE})
8+
public @interface ApplicationScoped {}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.seasar.doma.internal.apt.cdi;
2+
3+
import static java.lang.annotation.ElementType.TYPE;
4+
5+
import java.lang.annotation.Target;
6+
7+
@Target(value = {TYPE})
8+
public @interface Dependent {}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.seasar.doma.internal.apt.processor.dao;
2+
3+
import org.seasar.doma.AnnotateWith;
4+
import org.seasar.doma.Annotation;
5+
import org.seasar.doma.AnnotationTarget;
6+
import org.seasar.doma.Dao;
7+
import org.seasar.doma.internal.apt.cdi.ApplicationScoped;
8+
9+
@Dao
10+
@AnnotateWith(
11+
annotations = {@Annotation(target = AnnotationTarget.CLASS, type = ApplicationScoped.class)})
12+
public interface ApplicationScopedDao {}

src/test/java/org/seasar/doma/internal/apt/processor/dao/DaoProcessorTest.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import org.seasar.doma.internal.apt.GeneratedClassNameParameterResolver;
1919
import org.seasar.doma.internal.apt.ResourceParameterResolver;
2020
import org.seasar.doma.internal.apt.SimpleParameterResolver;
21+
import org.seasar.doma.internal.apt.cdi.ApplicationScoped;
22+
import org.seasar.doma.internal.apt.cdi.Dependent;
2123
import org.seasar.doma.internal.apt.processor.DaoProcessor;
2224
import org.seasar.doma.message.Message;
2325

@@ -124,7 +126,12 @@ public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContex
124126
invocationContext(ResultStreamDao.class),
125127
invocationContext(PlainSingletonConfigDao.class),
126128
invocationContext(SqlProcessorDao.class),
127-
invocationContext(OnlyDefaultMethodsExtendsDao.class));
129+
invocationContext(OnlyDefaultMethodsExtendsDao.class),
130+
invocationContext(
131+
ApplicationScopedDao.class,
132+
"-Adoma.cdi.ApplicationScoped=" + ApplicationScoped.class.getCanonicalName()),
133+
invocationContext(
134+
DependentDao.class, "-Adoma.cdi.Dependent=" + Dependent.class.getName()));
128135
}
129136

130137
private TestTemplateInvocationContext invocationContext(Class<?> clazz, String... options) {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.seasar.doma.internal.apt.processor.dao;
2+
3+
import org.seasar.doma.AnnotateWith;
4+
import org.seasar.doma.Annotation;
5+
import org.seasar.doma.AnnotationTarget;
6+
import org.seasar.doma.Dao;
7+
import org.seasar.doma.internal.apt.cdi.Dependent;
8+
9+
@Dao
10+
@AnnotateWith(annotations = {@Annotation(target = AnnotationTarget.CLASS, type = Dependent.class)})
11+
public interface DependentDao {}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.seasar.doma.internal.apt.processor.dao;
2+
3+
/** */
4+
@org.seasar.doma.internal.apt.cdi.ApplicationScoped()
5+
@javax.annotation.Generated(value = { "Doma", "@VERSION@" }, date = "1970-01-01T09:00:00.000+0900")
6+
public class ApplicationScopedDaoImpl extends org.seasar.doma.internal.jdbc.dao.AbstractDao implements org.seasar.doma.internal.apt.processor.dao.ApplicationScopedDao {
7+
8+
static {
9+
org.seasar.doma.internal.Artifact.validateVersion("@VERSION@");
10+
}
11+
12+
/** */
13+
ApplicationScopedDaoImpl() {
14+
}
15+
16+
/**
17+
* @param config the config
18+
*/
19+
public ApplicationScopedDaoImpl(org.seasar.doma.jdbc.Config config) {
20+
super(config);
21+
}
22+
23+
}

0 commit comments

Comments
 (0)