Skip to content

Commit 5b2df8f

Browse files
authored
Refactor processor and factory initialization for clarity (#1335)
2 parents 6f7e48c + ebed47a commit 5b2df8f

File tree

3 files changed

+70
-119
lines changed

3 files changed

+70
-119
lines changed

doma-processor/src/main/java/org/seasar/doma/internal/apt/DomaProcessor.java

Lines changed: 18 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,20 @@
2828
import java.util.List;
2929
import java.util.Objects;
3030
import java.util.Set;
31-
import java.util.function.BiConsumer;
31+
import java.util.function.Function;
3232
import javax.annotation.processing.AbstractProcessor;
3333
import javax.annotation.processing.ProcessingEnvironment;
3434
import javax.annotation.processing.RoundEnvironment;
3535
import javax.annotation.processing.SupportedAnnotationTypes;
3636
import javax.annotation.processing.SupportedOptions;
3737
import javax.lang.model.SourceVersion;
38-
import javax.lang.model.element.Element;
3938
import javax.lang.model.element.TypeElement;
4039
import org.seasar.doma.internal.apt.processor.AggregateStrategyProcessor;
4140
import org.seasar.doma.internal.apt.processor.DaoProcessor;
4241
import org.seasar.doma.internal.apt.processor.DataTypeProcessor;
4342
import org.seasar.doma.internal.apt.processor.DomainConvertersProcessor;
4443
import org.seasar.doma.internal.apt.processor.DomainProcessor;
44+
import org.seasar.doma.internal.apt.processor.ElementProcessor;
4545
import org.seasar.doma.internal.apt.processor.EmbeddableProcessor;
4646
import org.seasar.doma.internal.apt.processor.EntityProcessor;
4747
import org.seasar.doma.internal.apt.processor.ExternalDomainProcessor;
@@ -80,22 +80,19 @@
8080
})
8181
public class DomaProcessor extends AbstractProcessor {
8282

83-
private final List<Operator> operators;
84-
private ProcessingContext processingContext;
83+
private static final List<Operator> operators =
84+
List.of(
85+
new Operator(EXTERNAL_DOMAIN, ExternalDomainProcessor::new),
86+
new Operator(DATA_TYPE, DataTypeProcessor::new),
87+
new Operator(DOMAIN, DomainProcessor::new),
88+
new Operator(DOMAIN_CONVERTERS, DomainConvertersProcessor::new),
89+
new Operator(EMBEDDABLE, EmbeddableProcessor::new),
90+
new Operator(ENTITY, EntityProcessor::new),
91+
new Operator(AGGREGATE_STRATEGY, AggregateStrategyProcessor::new),
92+
new Operator(DAO, DaoProcessor::new),
93+
new Operator(SCOPE, ScopeProcessor::new));
8594

86-
public DomaProcessor() {
87-
operators =
88-
List.of(
89-
new Operator(EXTERNAL_DOMAIN, DomaProcessor::processExternalDomain),
90-
new Operator(DATA_TYPE, DomaProcessor::processDataType),
91-
new Operator(DOMAIN, DomaProcessor::processDomain),
92-
new Operator(DOMAIN_CONVERTERS, DomaProcessor::processDomainConverters),
93-
new Operator(EMBEDDABLE, DomaProcessor::processEmbeddable),
94-
new Operator(ENTITY, DomaProcessor::processEntity),
95-
new Operator(AGGREGATE_STRATEGY, DomaProcessor::processAggregateStrategy),
96-
new Operator(DAO, DomaProcessor::processDao),
97-
new Operator(SCOPE, DomaProcessor::processScope));
98-
}
95+
private ProcessingContext processingContext;
9996

10097
@Override
10198
public synchronized void init(ProcessingEnvironment processingEnv) {
@@ -120,67 +117,19 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
120117
for (var operator : operators) {
121118
var elements = roundContext.getElementsAnnotatedWith(operator.annotationName);
122119
if (!elements.isEmpty()) {
123-
operator.consumer.accept(roundContext, elements);
120+
var processor = operator.function.apply(roundContext);
121+
processor.process(elements);
124122
}
125123
}
126124

127125
return true;
128126
}
129127

130-
private static void processAggregateStrategy(
131-
RoundContext roundContext, Set<? extends Element> elements) {
132-
var processor = new AggregateStrategyProcessor(roundContext);
133-
processor.process(elements);
134-
}
135-
136-
private static void processDao(RoundContext roundContext, Set<? extends Element> elements) {
137-
var processor = new DaoProcessor(roundContext);
138-
processor.process(elements);
139-
}
140-
141-
private static void processDataType(RoundContext roundContext, Set<? extends Element> elements) {
142-
var processor = new DataTypeProcessor(roundContext);
143-
processor.process(elements);
144-
}
145-
146-
private static void processDomainConverters(
147-
RoundContext roundContext, Set<? extends Element> elements) {
148-
var processor = new DomainConvertersProcessor(roundContext);
149-
processor.process(elements);
150-
}
151-
152-
private static void processDomain(RoundContext roundContext, Set<? extends Element> elements) {
153-
var processor = new DomainProcessor(roundContext);
154-
processor.process(elements);
155-
}
156-
157-
private static void processEmbeddable(
158-
RoundContext roundContext, Set<? extends Element> elements) {
159-
var processor = new EmbeddableProcessor(roundContext);
160-
processor.process(elements);
161-
}
162-
163-
private static void processEntity(RoundContext roundContext, Set<? extends Element> elements) {
164-
var processor = new EntityProcessor(roundContext);
165-
processor.process(elements);
166-
}
167-
168-
private static void processExternalDomain(
169-
RoundContext roundContext, Set<? extends Element> elements) {
170-
var processor = new ExternalDomainProcessor(roundContext);
171-
processor.process(elements);
172-
}
173-
174-
private static void processScope(RoundContext roundContext, Set<? extends Element> elements) {
175-
var processor = new ScopeProcessor(roundContext);
176-
processor.process(elements);
177-
}
178-
179128
private record Operator(
180-
String annotationName, BiConsumer<RoundContext, Set<? extends Element>> consumer) {
129+
String annotationName, Function<RoundContext, ElementProcessor> function) {
181130
Operator {
182131
Objects.requireNonNull(annotationName);
183-
Objects.requireNonNull(consumer);
132+
Objects.requireNonNull(function);
184133
}
185134
}
186135
}

doma-processor/src/main/java/org/seasar/doma/internal/apt/cttype/CtTypes.java

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import java.time.LocalDate;
3434
import java.time.LocalDateTime;
3535
import java.time.LocalTime;
36-
import java.util.Arrays;
3736
import java.util.Collections;
3837
import java.util.Iterator;
3938
import java.util.List;
@@ -120,6 +119,33 @@
120119

121120
public class CtTypes {
122121

122+
// Apply newDomainCtType, newEmbeddableCtType and newEntityCtType functions first.
123+
private final List<Function<TypeMirror, CtType>> functions =
124+
List.of(
125+
this::newDomainCtType,
126+
this::newEmbeddableCtType,
127+
this::newEntityCtType,
128+
this::newIterableCtType,
129+
this::newStreamCtType,
130+
this::newOptionalCtType,
131+
this::newOptionalIntCtType,
132+
this::newOptionalLongCtType,
133+
this::newOptionalDoubleCtType,
134+
this::newBasicCtType,
135+
this::newMapCtType,
136+
this::newSelectOptionsCtType,
137+
this::newFunctionCtType,
138+
this::newCollectorCtType,
139+
this::newReferenceCtType,
140+
this::newBiFunctionCtType,
141+
this::newBiConsumerCtType,
142+
this::newPreparedSqlCtType,
143+
this::newConfigCtType,
144+
this::newResultCtType,
145+
this::newBatchResultCtType,
146+
this::newMultiResultCtType,
147+
this::newArrayCtType);
148+
123149
private final RoundContext ctx;
124150

125151
public CtTypes(RoundContext ctx) {
@@ -663,32 +689,6 @@ public CtType newCtType(TypeMirror type) {
663689

664690
private CtType newCtTypeInternal(
665691
TypeMirror type, CtTypeVisitor<Void, Void, AptException> validator) {
666-
// Apply newDomainCtType, newEmbeddableCtType and newEntityCtType functions first.
667-
List<Function<TypeMirror, CtType>> functions =
668-
Arrays.asList(
669-
this::newDomainCtType,
670-
this::newEmbeddableCtType,
671-
this::newEntityCtType,
672-
this::newIterableCtType,
673-
this::newStreamCtType,
674-
this::newOptionalCtType,
675-
this::newOptionalIntCtType,
676-
this::newOptionalLongCtType,
677-
this::newOptionalDoubleCtType,
678-
this::newBasicCtType,
679-
this::newMapCtType,
680-
this::newSelectOptionsCtType,
681-
this::newFunctionCtType,
682-
this::newCollectorCtType,
683-
this::newReferenceCtType,
684-
this::newBiFunctionCtType,
685-
this::newBiConsumerCtType,
686-
this::newPreparedSqlCtType,
687-
this::newConfigCtType,
688-
this::newResultCtType,
689-
this::newBatchResultCtType,
690-
this::newMultiResultCtType,
691-
this::newArrayCtType);
692692
CtType ctType =
693693
functions.stream()
694694
.map(f -> f.apply(type))

doma-processor/src/main/java/org/seasar/doma/internal/apt/meta/dao/DaoMetaFactory.java

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,12 @@
2121

2222
import java.io.File;
2323
import java.net.URI;
24-
import java.util.ArrayList;
2524
import java.util.Arrays;
2625
import java.util.Collections;
2726
import java.util.HashSet;
2827
import java.util.List;
2928
import java.util.Optional;
3029
import java.util.Set;
31-
import java.util.function.BiFunction;
3230
import javax.lang.model.element.AnnotationMirror;
3331
import javax.lang.model.element.AnnotationValue;
3432
import javax.lang.model.element.ExecutableElement;
@@ -92,30 +90,30 @@
9290

9391
public class DaoMetaFactory implements TypeElementMetaFactory<DaoMeta> {
9492

95-
private final RoundContext ctx;
93+
private static final List<QueryMetaFactorySupplier> suppliers =
94+
List.of(
95+
SqlFileSelectQueryMetaFactory::new,
96+
AutoModifyQueryMetaFactory::new,
97+
AutoMultiInsertQueryMetaFactory::new,
98+
AutoBatchModifyQueryMetaFactory::new,
99+
AutoFunctionQueryMetaFactory::new,
100+
AutoProcedureQueryMetaFactory::new,
101+
SqlFileModifyQueryMetaFactory::new,
102+
SqlFileBatchModifyQueryMetaFactory::new,
103+
SqlFileScriptQueryMetaFactory::new,
104+
DefaultQueryMetaFactory::new,
105+
ArrayCreateQueryMetaFactory::new,
106+
BlobCreateQueryMetaFactory::new,
107+
ClobCreateQueryMetaFactory::new,
108+
NClobCreateQueryMetaFactory::new,
109+
SQLXMLCreateQueryMetaFactory::new,
110+
SqlProcessorQueryMetaFactory::new);
96111

97-
private final List<BiFunction<TypeElement, ExecutableElement, QueryMetaFactory>> providers =
98-
new ArrayList<>(15);
112+
private final RoundContext ctx;
99113

100114
public DaoMetaFactory(RoundContext ctx) {
101115
assertNotNull(ctx);
102116
this.ctx = ctx;
103-
providers.add((dao, method) -> new SqlFileSelectQueryMetaFactory(ctx, dao, method));
104-
providers.add((dao, method) -> new AutoModifyQueryMetaFactory(ctx, dao, method));
105-
providers.add((dao, method) -> new AutoMultiInsertQueryMetaFactory(ctx, dao, method));
106-
providers.add((dao, method) -> new AutoBatchModifyQueryMetaFactory(ctx, dao, method));
107-
providers.add((dao, method) -> new AutoFunctionQueryMetaFactory(ctx, dao, method));
108-
providers.add((dao, method) -> new AutoProcedureQueryMetaFactory(ctx, dao, method));
109-
providers.add((dao, method) -> new SqlFileModifyQueryMetaFactory(ctx, dao, method));
110-
providers.add((dao, method) -> new SqlFileBatchModifyQueryMetaFactory(ctx, dao, method));
111-
providers.add((dao, method) -> new SqlFileScriptQueryMetaFactory(ctx, dao, method));
112-
providers.add((dao, method) -> new DefaultQueryMetaFactory(ctx, dao, method));
113-
providers.add((dao, method) -> new ArrayCreateQueryMetaFactory(ctx, dao, method));
114-
providers.add((dao, method) -> new BlobCreateQueryMetaFactory(ctx, dao, method));
115-
providers.add((dao, method) -> new ClobCreateQueryMetaFactory(ctx, dao, method));
116-
providers.add((dao, method) -> new NClobCreateQueryMetaFactory(ctx, dao, method));
117-
providers.add((dao, method) -> new SQLXMLCreateQueryMetaFactory(ctx, dao, method));
118-
providers.add((dao, method) -> new SqlProcessorQueryMetaFactory(ctx, dao, method));
119117
}
120118

121119
@Override
@@ -282,8 +280,8 @@ private void validateMethod(TypeElement interfaceElement, ExecutableElement meth
282280
}
283281

284282
private QueryMeta createQueryMeta(DaoMeta daoMeta, ExecutableElement methodElement) {
285-
for (BiFunction<TypeElement, ExecutableElement, QueryMetaFactory> provider : providers) {
286-
QueryMetaFactory factory = provider.apply(daoMeta.getTypeElement(), methodElement);
283+
for (QueryMetaFactorySupplier supplier : suppliers) {
284+
QueryMetaFactory factory = supplier.get(ctx, daoMeta.getTypeElement(), methodElement);
287285
QueryMeta queryMeta = factory.createQueryMeta();
288286
if (queryMeta != null) {
289287
return queryMeta;
@@ -499,4 +497,8 @@ public Void visitAutoBatchModifyQueryMeta(AutoBatchModifyQueryMeta m) {
499497
return null;
500498
}
501499
}
500+
501+
interface QueryMetaFactorySupplier {
502+
QueryMetaFactory get(RoundContext ctx, TypeElement daoElement, ExecutableElement methodElement);
503+
}
502504
}

0 commit comments

Comments
 (0)