Skip to content

Commit 6afd25b

Browse files
authored
Allow the domain class to implement the Iterable interface (#705)
1 parent 3f833d0 commit 6afd25b

File tree

5 files changed

+77
-7
lines changed

5 files changed

+77
-7
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -546,18 +546,18 @@ public CtType newCtType(TypeMirror type) {
546546

547547
private CtType newCtTypeInternal(
548548
TypeMirror type, CtTypeVisitor<Void, Void, AptException> validator) {
549-
// The newArrayCtType function must be after the newDomainCtType function
549+
// Apply newDomainCtType, newEmbeddableCtType and newEntityCtType functions first.
550550
List<Function<TypeMirror, CtType>> functions =
551551
Arrays.asList(
552+
this::newDomainCtType,
553+
this::newEmbeddableCtType,
554+
this::newEntityCtType,
552555
this::newIterableCtType,
553556
this::newStreamCtType,
554-
this::newEntityCtType,
555557
this::newOptionalCtType,
556558
this::newOptionalIntCtType,
557559
this::newOptionalLongCtType,
558560
this::newOptionalDoubleCtType,
559-
this::newDomainCtType,
560-
this::newEmbeddableCtType,
561561
this::newBasicCtType,
562562
this::newMapCtType,
563563
this::newSelectOptionsCtType,

doma-processor/src/test/java/org/seasar/doma/internal/apt/processor/entity/DomainPropertyEntity.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public class DomainPropertyEntity {
1717

1818
Name name;
1919

20+
Names names;
21+
2022
@Version Ver ver;
2123

2224
public Identifier getId() {
@@ -35,6 +37,14 @@ public void setName(Name name) {
3537
this.name = name;
3638
}
3739

40+
public Names getNames() {
41+
return names;
42+
}
43+
44+
public void setNames(Names names) {
45+
this.names = names;
46+
}
47+
3848
public Ver getVer() {
3949
return ver;
4050
}
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.entity;
2+
3+
import java.util.Arrays;
4+
import java.util.Iterator;
5+
import org.seasar.doma.Domain;
6+
7+
@Domain(valueType = String.class)
8+
public class Names implements Iterable<String> {
9+
private final String value;
10+
11+
public Names(String value) {
12+
this.value = value;
13+
}
14+
15+
public String getValue() {
16+
return value;
17+
}
18+
19+
@Override
20+
public Iterator<String> iterator() {
21+
return Arrays.asList(value.split(",")).iterator();
22+
}
23+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.seasar.doma.internal.apt.processor.entity;
2+
3+
import org.seasar.doma.jdbc.domain.AbstractDomainType;
4+
import org.seasar.doma.wrapper.StringWrapper;
5+
6+
public class _Names extends AbstractDomainType<String, Names> {
7+
8+
private _Names() {
9+
super(StringWrapper::new);
10+
}
11+
12+
@Override
13+
public Names newDomain(String value) {
14+
return null;
15+
}
16+
17+
@Override
18+
public String getBasicValue(Names domain) {
19+
return null;
20+
}
21+
22+
@Override
23+
public Class<String> getBasicClass() {
24+
return null;
25+
}
26+
27+
@Override
28+
public Class<Names> getDomainClass() {
29+
return null;
30+
}
31+
32+
public static _Names getSingletonInternal() {
33+
return null;
34+
}
35+
}

doma-processor/src/test/resources/org/seasar/doma/internal/apt/processor/entity/EntityProcessorTest_DomainPropertyEntity.txt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ public final class _DomainPropertyEntity extends org.seasar.doma.jdbc.entity.Abs
5353
__tableName = "";
5454
__isQuoteRequired = false;
5555
java.util.List<org.seasar.doma.jdbc.entity.EntityPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, ?>> __idList = new java.util.ArrayList<>();
56-
java.util.List<org.seasar.doma.jdbc.entity.EntityPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, ?>> __list = new java.util.ArrayList<>(3);
57-
java.util.Map<String, org.seasar.doma.jdbc.entity.EntityPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, ?>> __map = new java.util.LinkedHashMap<>(3);
58-
java.util.Map<String, org.seasar.doma.jdbc.entity.EmbeddedPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, ?>> __embeddedMap = new java.util.LinkedHashMap<>(3);
56+
java.util.List<org.seasar.doma.jdbc.entity.EntityPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, ?>> __list = new java.util.ArrayList<>(4);
57+
java.util.Map<String, org.seasar.doma.jdbc.entity.EntityPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, ?>> __map = new java.util.LinkedHashMap<>(4);
58+
java.util.Map<String, org.seasar.doma.jdbc.entity.EmbeddedPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, ?>> __embeddedMap = new java.util.LinkedHashMap<>(4);
5959
initializeMaps(__map, __embeddedMap);
6060
initializeIdList(__map, __idList);
6161
initializeList(__map, __list);
@@ -68,6 +68,7 @@ public final class _DomainPropertyEntity extends org.seasar.doma.jdbc.entity.Abs
6868
private void initializeMaps(java.util.Map<String, org.seasar.doma.jdbc.entity.EntityPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, ?>> __map, java.util.Map<String, org.seasar.doma.jdbc.entity.EmbeddedPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, ?>> __embeddedMap) {
6969
__map.put("id", new org.seasar.doma.jdbc.entity.GeneratedIdPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, java.lang.Integer, org.seasar.doma.internal.apt.processor.entity.Identifier>(org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity.class, org.seasar.doma.internal.apt.processor.entity._Identifier.getSingletonInternal().createScalarSupplier(), "id", "", __namingType, false, __idGenerator));
7070
__map.put("name", new org.seasar.doma.jdbc.entity.DefaultPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, java.lang.String, org.seasar.doma.internal.apt.processor.entity.Name>(org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity.class, org.seasar.doma.internal.apt.processor.entity._Name.getSingletonInternal().createScalarSupplier(), "name", "", __namingType, true, true, false));
71+
__map.put("names", new org.seasar.doma.jdbc.entity.DefaultPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, java.lang.String, org.seasar.doma.internal.apt.processor.entity.Names>(org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity.class, org.seasar.doma.internal.apt.processor.entity._Names.getSingletonInternal().createScalarSupplier(), "names", "", __namingType, true, true, false));
7172
__map.put("ver", new org.seasar.doma.jdbc.entity.VersionPropertyType<org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity, java.lang.Integer, org.seasar.doma.internal.apt.processor.entity.Ver>(org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity.class, org.seasar.doma.internal.apt.processor.entity._Ver.getSingletonInternal().createScalarSupplier(), "ver", "", __namingType, false));
7273
}
7374

@@ -209,6 +210,7 @@ public final class _DomainPropertyEntity extends org.seasar.doma.jdbc.entity.Abs
209210
org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity entity = new org.seasar.doma.internal.apt.processor.entity.DomainPropertyEntity();
210211
if (__args.get("id") != null) __args.get("id").save(entity);
211212
if (__args.get("name") != null) __args.get("name").save(entity);
213+
if (__args.get("names") != null) __args.get("names").save(entity);
212214
if (__args.get("ver") != null) __args.get("ver").save(entity);
213215
return entity;
214216
}

0 commit comments

Comments
 (0)