Skip to content

Commit 95f09b8

Browse files
committed
Add conflict detection for multiple @ExternalDomain definitions
1 parent 2881d45 commit 95f09b8

File tree

16 files changed

+149
-77
lines changed

16 files changed

+149
-77
lines changed

doma-core/src/main/java/org/seasar/doma/message/Message.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,6 +1001,8 @@ public enum Message implements MessageResource {
10011001
DOMA4488(
10021002
"To specify propertyPath=\"{0}\", a separate definition of @AssociationLinker(propertyPath=\"{1}\") is required."),
10031003
DOMA4489("The property path \"{0}\" is duplicated in another @AssociationLinker."),
1004+
DOMA4490(
1005+
"Multiple @ExternalDomain definitions were found for type \"{0}\". \"{1}\" conflicts with \"{2}\"."),
10041006

10051007
// other
10061008
DOMA5001(

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

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import static org.seasar.doma.internal.apt.AnnotationTypes.EXTERNAL_DOMAIN;
2626
import static org.seasar.doma.internal.apt.AnnotationTypes.SCOPE;
2727

28-
import java.util.ArrayList;
2928
import java.util.List;
3029
import java.util.Objects;
3130
import java.util.Set;
@@ -81,20 +80,21 @@
8180
})
8281
public class DomaProcessor extends AbstractProcessor {
8382

84-
private final List<Operator> operators = new ArrayList<>();
83+
private final List<Operator> operators;
8584
private ProcessingContext processingContext;
8685

8786
public DomaProcessor() {
88-
operators.add(new Operator(EXTERNAL_DOMAIN, DomaProcessor::processExternalDomainElements));
89-
operators.add(new Operator(DATA_TYPE, DomaProcessor::processDataTypeElements));
90-
operators.add(new Operator(DOMAIN, DomaProcessor::processDomainElements));
91-
operators.add(new Operator(DOMAIN_CONVERTERS, DomaProcessor::processDomainConvertersElements));
92-
operators.add(new Operator(EMBEDDABLE, DomaProcessor::processEmbeddableElements));
93-
operators.add(new Operator(ENTITY, DomaProcessor::processEntityElements));
94-
operators.add(
95-
new Operator(AGGREGATE_STRATEGY, DomaProcessor::processAggregateStrategyElements));
96-
operators.add(new Operator(DAO, DomaProcessor::processDaoElements));
97-
operators.add(new Operator(SCOPE, DomaProcessor::processScopeElements));
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));
9898
}
9999

100100
@Override
@@ -127,57 +127,51 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
127127
return true;
128128
}
129129

130-
private static void processAggregateStrategyElements(
130+
private static void processAggregateStrategy(
131131
RoundContext roundContext, Set<? extends Element> elements) {
132132
var processor = new AggregateStrategyProcessor(roundContext);
133133
processor.process(elements);
134134
}
135135

136-
private static void processDaoElements(
137-
RoundContext roundContext, Set<? extends Element> elements) {
136+
private static void processDao(RoundContext roundContext, Set<? extends Element> elements) {
138137
var processor = new DaoProcessor(roundContext);
139138
processor.process(elements);
140139
}
141140

142-
private static void processDataTypeElements(
143-
RoundContext roundContext, Set<? extends Element> elements) {
141+
private static void processDataType(RoundContext roundContext, Set<? extends Element> elements) {
144142
var processor = new DataTypeProcessor(roundContext);
145143
processor.process(elements);
146144
}
147145

148-
private static void processDomainConvertersElements(
146+
private static void processDomainConverters(
149147
RoundContext roundContext, Set<? extends Element> elements) {
150148
var processor = new DomainConvertersProcessor(roundContext);
151149
processor.process(elements);
152150
}
153151

154-
private static void processDomainElements(
155-
RoundContext roundContext, Set<? extends Element> elements) {
152+
private static void processDomain(RoundContext roundContext, Set<? extends Element> elements) {
156153
var processor = new DomainProcessor(roundContext);
157154
processor.process(elements);
158155
}
159156

160-
private static void processEmbeddableElements(
157+
private static void processEmbeddable(
161158
RoundContext roundContext, Set<? extends Element> elements) {
162159
var processor = new EmbeddableProcessor(roundContext);
163160
processor.process(elements);
164161
}
165162

166-
private static void processEntityElements(
167-
RoundContext roundContext, Set<? extends Element> elements) {
163+
private static void processEntity(RoundContext roundContext, Set<? extends Element> elements) {
168164
var processor = new EntityProcessor(roundContext);
169165
processor.process(elements);
170166
}
171167

172-
private static void processExternalDomainElements(
168+
private static void processExternalDomain(
173169
RoundContext roundContext, Set<? extends Element> elements) {
174170
var processor = new ExternalDomainProcessor(roundContext);
175-
var metaList = processor.process(elements);
176-
roundContext.getExternalDomainMetaList().addAll(metaList);
171+
processor.process(elements);
177172
}
178173

179-
private static void processScopeElements(
180-
RoundContext roundContext, Set<? extends Element> elements) {
174+
private static void processScope(RoundContext roundContext, Set<? extends Element> elements) {
181175
var processor = new ScopeProcessor(roundContext);
182176
processor.process(elements);
183177
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
1919

20-
import java.util.List;
2120
import java.util.Objects;
2221
import java.util.Set;
2322
import javax.lang.model.element.Element;
@@ -34,7 +33,7 @@
3433
import org.seasar.doma.internal.apt.meta.aggregate.AggregateStrategyMeta;
3534
import org.seasar.doma.internal.apt.meta.aggregate.AggregateStrategyMetaFactory;
3635

37-
public class AggregateStrategyProcessor implements ElementProcessor<AggregateStrategyMeta> {
36+
public class AggregateStrategyProcessor implements ElementProcessor {
3837

3938
private final RoundContext ctx;
4039
private final ElementProcessorSupport<AggregateStrategyMeta> support;
@@ -47,8 +46,8 @@ public AggregateStrategyProcessor(RoundContext ctx) {
4746
}
4847

4948
@Override
50-
public List<AggregateStrategyMeta> process(Set<? extends Element> elements) {
51-
return support.processTypeElements(elements, this::processEach);
49+
public void process(Set<? extends Element> elements) {
50+
support.processTypeElements(elements, this::processEach);
5251
}
5352

5453
private AggregateStrategyMeta processEach(TypeElement typeElement) {

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
1919

20-
import java.util.List;
2120
import java.util.Set;
2221
import java.util.function.Function;
2322
import javax.lang.model.element.Element;
@@ -34,7 +33,7 @@
3433
import org.seasar.doma.internal.apt.meta.dao.DaoMetaFactory;
3534
import org.seasar.doma.internal.util.ClassUtil;
3635

37-
public class DaoProcessor implements ElementProcessor<DaoMeta> {
36+
public class DaoProcessor implements ElementProcessor {
3837

3938
private final RoundContext ctx;
4039
private final ElementProcessorSupport<DaoMeta> support;
@@ -53,8 +52,8 @@ public DaoProcessor(RoundContext ctx) {
5352
}
5453

5554
@Override
56-
public List<DaoMeta> process(Set<? extends Element> elements) {
57-
return support.processTypeElements(elements, this::processEach);
55+
public void process(Set<? extends Element> elements) {
56+
support.processTypeElements(elements, this::processEach);
5857
}
5958

6059
private DaoMeta processEach(TypeElement typeElement) {

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@
1515
*/
1616
package org.seasar.doma.internal.apt.processor;
1717

18-
import java.util.List;
1918
import java.util.Set;
2019
import javax.lang.model.element.Element;
2120
import org.seasar.doma.DataType;
2221
import org.seasar.doma.internal.apt.RoundContext;
2322
import org.seasar.doma.internal.apt.meta.domain.DataTypeMeta;
2423
import org.seasar.doma.internal.apt.meta.domain.DataTypeMetaFactory;
2524

26-
public class DataTypeProcessor implements ElementProcessor<DataTypeMeta> {
25+
public class DataTypeProcessor implements ElementProcessor {
2726

2827
private final DomainProcessorSupport<DataTypeMeta> support;
2928

@@ -32,7 +31,7 @@ public DataTypeProcessor(RoundContext ctx) {
3231
}
3332

3433
@Override
35-
public List<DataTypeMeta> process(Set<? extends Element> elements) {
36-
return support.process(elements);
34+
public void process(Set<? extends Element> elements) {
35+
support.process(elements);
3736
}
3837
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.seasar.doma.internal.apt.processor;
1717

18-
import java.util.List;
1918
import java.util.Objects;
2019
import java.util.Set;
2120
import javax.lang.model.element.Element;
@@ -27,7 +26,7 @@
2726
import org.seasar.doma.internal.apt.meta.NullElementMeta;
2827
import org.seasar.doma.message.Message;
2928

30-
public class DomainConvertersProcessor implements ElementProcessor<NullElementMeta> {
29+
public class DomainConvertersProcessor implements ElementProcessor {
3130

3231
private final RoundContext ctx;
3332
private final ElementProcessorSupport<NullElementMeta> support;
@@ -38,8 +37,8 @@ public DomainConvertersProcessor(RoundContext ctx) {
3837
}
3938

4039
@Override
41-
public List<NullElementMeta> process(Set<? extends Element> elements) {
42-
return support.processTypeElements(elements, this::validateEach);
40+
public void process(Set<? extends Element> elements) {
41+
support.processTypeElements(elements, this::validateEach);
4342
}
4443

4544
private NullElementMeta validateEach(TypeElement typeElement) {

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@
1515
*/
1616
package org.seasar.doma.internal.apt.processor;
1717

18-
import java.util.List;
1918
import java.util.Set;
2019
import javax.lang.model.element.Element;
2120
import org.seasar.doma.Domain;
2221
import org.seasar.doma.internal.apt.RoundContext;
2322
import org.seasar.doma.internal.apt.meta.domain.InternalDomainMeta;
2423
import org.seasar.doma.internal.apt.meta.domain.InternalDomainMetaFactory;
2524

26-
public class DomainProcessor implements ElementProcessor<InternalDomainMeta> {
25+
public class DomainProcessor implements ElementProcessor {
2726

2827
private final DomainProcessorSupport<InternalDomainMeta> support;
2928

@@ -32,7 +31,7 @@ public DomainProcessor(RoundContext ctx) {
3231
}
3332

3433
@Override
35-
public List<InternalDomainMeta> process(Set<? extends Element> elements) {
36-
return support.process(elements);
34+
public void process(Set<? extends Element> elements) {
35+
support.process(elements);
3736
}
3837
}

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,9 @@
1515
*/
1616
package org.seasar.doma.internal.apt.processor;
1717

18-
import java.util.List;
1918
import java.util.Set;
2019
import javax.lang.model.element.Element;
21-
import org.seasar.doma.internal.apt.meta.ElementMeta;
2220

23-
public interface ElementProcessor<M extends ElementMeta> {
24-
List<M> process(Set<? extends Element> elements);
21+
public interface ElementProcessor {
22+
void process(Set<? extends Element> elements);
2523
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
1919

20-
import java.util.List;
2120
import java.util.Objects;
2221
import java.util.Set;
2322
import javax.lang.model.element.Element;
@@ -33,7 +32,7 @@
3332
import org.seasar.doma.internal.apt.meta.entity.EmbeddableMeta;
3433
import org.seasar.doma.internal.apt.meta.entity.EmbeddableMetaFactory;
3534

36-
public class EmbeddableProcessor implements ElementProcessor<EmbeddableMeta> {
35+
public class EmbeddableProcessor implements ElementProcessor {
3736

3837
private final RoundContext ctx;
3938
private final ElementProcessorSupport<EmbeddableMeta> support;
@@ -46,8 +45,8 @@ public EmbeddableProcessor(RoundContext ctx) {
4645
}
4746

4847
@Override
49-
public List<EmbeddableMeta> process(Set<? extends Element> elements) {
50-
return support.processTypeElements(elements, this::processEach);
48+
public void process(Set<? extends Element> elements) {
49+
support.processTypeElements(elements, this::processEach);
5150
}
5251

5352
private EmbeddableMeta processEach(TypeElement typeElement) {

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import static org.seasar.doma.internal.util.AssertionUtil.assertNotNull;
1919

20-
import java.util.List;
2120
import java.util.Objects;
2221
import java.util.Set;
2322
import javax.lang.model.element.Element;
@@ -34,7 +33,7 @@
3433
import org.seasar.doma.internal.apt.meta.entity.EntityMeta;
3534
import org.seasar.doma.internal.apt.meta.entity.EntityMetaFactory;
3635

37-
public class EntityProcessor implements ElementProcessor<EntityMeta> {
36+
public class EntityProcessor implements ElementProcessor {
3837

3938
private final RoundContext ctx;
4039
private final ElementProcessorSupport<EntityMeta> support;
@@ -47,8 +46,8 @@ public EntityProcessor(RoundContext ctx) {
4746
}
4847

4948
@Override
50-
public List<EntityMeta> process(Set<? extends Element> elements) {
51-
return support.processTypeElements(elements, this::processEach);
49+
public void process(Set<? extends Element> elements) {
50+
support.processTypeElements(elements, this::processEach);
5251
}
5352

5453
private EntityMeta processEach(TypeElement typeElement) {

0 commit comments

Comments
 (0)