Skip to content

Commit 1c23adf

Browse files
committed
Simplify Meta classes
1 parent 4f785c5 commit 1c23adf

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1050
-1212
lines changed

src/main/java/org/seasar/doma/internal/apt/cttype/AbstractCtType.java

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,46 +15,46 @@ public abstract class AbstractCtType implements CtType {
1515

1616
protected final TypeMirror type;
1717

18+
protected final TypeElement typeElement;
19+
1820
private final String typeName;
1921

22+
private final String packageName;
23+
24+
private final String qualifiedName;
25+
2026
private final String boxedTypeName;
2127

22-
protected final String metaTypeName;
28+
private final String boxedClassName;
2329

24-
protected final TypeElement typeElement;
30+
protected final String metaTypeName;
2531

26-
private final String packageName;
32+
protected final String metaClassName;
2733

28-
private final String qualifiedName;
34+
protected final String typeParametersDeclaration;
2935

3036
protected AbstractCtType(Context ctx, TypeMirror type) {
3137
assertNotNull(ctx, type);
3238
this.ctx = ctx;
3339
this.type = type;
3440
this.typeName = ctx.getTypes().getTypeName(type);
3541
this.boxedTypeName = ctx.getTypes().getBoxedTypeName(type);
36-
this.metaTypeName = getMetaTypeName(type, ctx);
42+
this.boxedClassName = ctx.getTypes().getBoxedClassName(type);
3743
this.typeElement = ctx.getTypes().toTypeElement(type);
3844
if (typeElement != null) {
39-
qualifiedName = typeElement.getQualifiedName().toString();
4045
packageName = ctx.getElements().getPackageName(typeElement);
46+
qualifiedName = typeElement.getQualifiedName().toString();
47+
metaClassName = MetaUtil.toFullMetaName(typeElement, ctx);
4148
} else {
42-
qualifiedName = typeName;
4349
packageName = "";
50+
qualifiedName = typeName;
51+
metaClassName = typeName;
4452
}
53+
this.typeParametersDeclaration = makeTypeParametersDeclaration(typeName);
54+
this.metaTypeName = metaClassName + typeParametersDeclaration;
4555
}
4656

47-
private static String getMetaTypeName(TypeMirror typeMirror, Context ctx) {
48-
assertNotNull(typeMirror, ctx);
49-
String typeName = ctx.getTypes().getTypeName(typeMirror);
50-
TypeElement typeElement = ctx.getTypes().toTypeElement(typeMirror);
51-
if (typeElement == null) {
52-
return typeName;
53-
}
54-
return MetaUtil.toFullMetaName(typeElement, ctx) + makeTypeParamDecl(typeName);
55-
}
56-
57-
private static String makeTypeParamDecl(String typeName) {
57+
private static String makeTypeParametersDeclaration(String typeName) {
5858
int pos = typeName.indexOf("<");
5959
if (pos == -1) {
6060
return "";
@@ -87,6 +87,11 @@ public String getMetaTypeName() {
8787
return metaTypeName;
8888
}
8989

90+
@Override
91+
public String getMetaClassName() {
92+
return metaClassName;
93+
}
94+
9095
@Override
9196
public String getQualifiedName() {
9297
return qualifiedName;
@@ -97,6 +102,11 @@ public String getPackageName() {
97102
return packageName;
98103
}
99104

105+
@Override
106+
public String getBoxedClassName() {
107+
return boxedClassName;
108+
}
109+
100110
@Override
101111
public boolean isEnum() {
102112
return typeElement != null && typeElement.getKind() == ElementKind.ENUM;
@@ -121,4 +131,9 @@ public boolean isWildcard() {
121131
public boolean isTypevar() {
122132
return type.getKind() == TypeKind.TYPEVAR;
123133
}
134+
135+
@Override
136+
public boolean isSameType(CtType other) {
137+
return ctx.getTypes().isSameType(type, other.getType());
138+
}
124139
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.seasar.doma.internal.apt.cttype;
2+
3+
import javax.lang.model.type.TypeMirror;
4+
import org.seasar.doma.internal.apt.Context;
5+
6+
public class BatchResultCtType extends AbstractCtType {
7+
private final CtType elementCtType;
8+
9+
BatchResultCtType(Context ctx, TypeMirror type, CtType elementCtType) {
10+
super(ctx, type);
11+
this.elementCtType = elementCtType;
12+
}
13+
14+
public CtType getElementCtType() {
15+
return elementCtType;
16+
}
17+
18+
public boolean isRaw() {
19+
return elementCtType.isNone();
20+
}
21+
22+
public boolean hasWildcard() {
23+
return elementCtType.isWildcard();
24+
}
25+
26+
@Override
27+
public <R, P, TH extends Throwable> R accept(CtTypeVisitor<R, P, TH> visitor, P p) throws TH {
28+
return visitor.visitBatchResultCtType(this, p);
29+
}
30+
}

src/main/java/org/seasar/doma/internal/apt/cttype/CtType.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,16 @@ public interface CtType {
1313

1414
String getBoxedTypeName();
1515

16-
String getMetaTypeName();
16+
String getBoxedClassName();
1717

1818
String getQualifiedName();
1919

2020
String getPackageName();
2121

22+
String getMetaTypeName();
23+
24+
String getMetaClassName();
25+
2226
boolean isPrimitive();
2327

2428
boolean isEnum();
@@ -29,5 +33,7 @@ public interface CtType {
2933

3034
boolean isTypevar();
3135

36+
boolean isSameType(CtType ctType);
37+
3238
<R, P, TH extends Throwable> R accept(CtTypeVisitor<R, P, TH> visitor, P p) throws TH;
3339
}

src/main/java/org/seasar/doma/internal/apt/cttype/CtTypeVisitor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ public interface CtTypeVisitor<R, P, TH extends Throwable> {
44

55
R visitAnyCtType(AnyCtType ctType, P p) throws TH;
66

7+
R visitBatchResultCtType(BatchResultCtType ctType, P p) throws TH;
8+
79
R visitBasicCtType(BasicCtType ctType, P p) throws TH;
810

911
R visitDomainCtType(DomainCtType ctType, P p) throws TH;
@@ -18,6 +20,8 @@ public interface CtTypeVisitor<R, P, TH extends Throwable> {
1820

1921
R visitReferenceCtType(ReferenceCtType ctType, P p) throws TH;
2022

23+
R visitResultCtType(ResultCtType ctType, P p) throws TH;
24+
2125
R visitSelectOptionsCtType(SelectOptionsCtType ctType, P p) throws TH;
2226

2327
R visitWrapperCtType(WrapperCtType ctType, P p) throws TH;

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

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@
2222
import org.seasar.doma.internal.apt.AptIllegalStateException;
2323
import org.seasar.doma.internal.apt.Context;
2424
import org.seasar.doma.internal.apt.annot.DomainConvertersAnnot;
25-
import org.seasar.doma.jdbc.Config;
26-
import org.seasar.doma.jdbc.PreparedSql;
27-
import org.seasar.doma.jdbc.Reference;
28-
import org.seasar.doma.jdbc.SelectOptions;
25+
import org.seasar.doma.jdbc.*;
2926
import org.seasar.doma.jdbc.domain.DomainConverter;
3027
import org.seasar.doma.message.Message;
3128
import org.seasar.doma.wrapper.EnumWrapper;
@@ -42,6 +39,19 @@ private AnyCtType newAnyCtType(TypeMirror type) {
4239
return new AnyCtType(ctx, type);
4340
}
4441

42+
private BatchResultCtType newBatchResultCtType(TypeMirror type) {
43+
if (!ctx.getTypes().isSameType(type, BatchResult.class)) {
44+
return null;
45+
}
46+
DeclaredType declaredType = ctx.getTypes().toDeclaredType(type);
47+
if (declaredType == null) {
48+
return null;
49+
}
50+
Iterator<? extends TypeMirror> typeArgs = declaredType.getTypeArguments().iterator();
51+
CtType elementCtType = typeArgs.hasNext() ? newCtType(typeArgs.next()) : newNoneCtType();
52+
return new BatchResultCtType(ctx, type, elementCtType);
53+
}
54+
4555
public BasicCtType newBasicCtType(TypeMirror type) {
4656
assertNotNull(type);
4757
WrapperCtType wrapperCtType = newWrapperCtType(type);
@@ -334,6 +344,19 @@ private ReferenceCtType newReferenceCtType(TypeMirror type) {
334344
return new ReferenceCtType(ctx, type, referentCtType);
335345
}
336346

347+
private ResultCtType newResultCtType(TypeMirror type) {
348+
if (!ctx.getTypes().isSameType(type, Result.class)) {
349+
return null;
350+
}
351+
DeclaredType declaredType = ctx.getTypes().toDeclaredType(type);
352+
if (declaredType == null) {
353+
return null;
354+
}
355+
Iterator<? extends TypeMirror> typeArgs = declaredType.getTypeArguments().iterator();
356+
CtType elementCtType = typeArgs.hasNext() ? newCtType(typeArgs.next()) : newNoneCtType();
357+
return new ResultCtType(ctx, type, elementCtType);
358+
}
359+
337360
private SelectOptionsCtType newSelectOptionsCtType(TypeMirror type) {
338361
if (!ctx.getTypes().isAssignable(type, SelectOptions.class)) {
339362
return null;
@@ -403,7 +426,9 @@ private CtType newCtTypeInternal(
403426
this::newReferenceCtType,
404427
this::newBiFunctionCtType,
405428
this::newPreparedSqlCtType,
406-
this::newConfigCtType);
429+
this::newConfigCtType,
430+
this::newResultCtType,
431+
this::newBatchResultCtType);
407432
CtType ctType =
408433
functions
409434
.stream()

src/main/java/org/seasar/doma/internal/apt/cttype/DomainCtType.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,6 @@ public class DomainCtType extends AbstractCtType {
1515

1616
private final boolean external;
1717

18-
private final String metaClassName;
19-
20-
private final String typeArgDecl;
21-
2218
DomainCtType(
2319
Context ctx,
2420
TypeMirror domainType,
@@ -30,14 +26,6 @@ public class DomainCtType extends AbstractCtType {
3026
this.basicCtType = basicCtType;
3127
this.typeArgCtTypes = typeArgCtTypes;
3228
this.external = external;
33-
int pos = metaTypeName.indexOf('<');
34-
if (pos > -1) {
35-
this.metaClassName = metaTypeName.substring(0, pos);
36-
this.typeArgDecl = metaTypeName.substring(pos);
37-
} else {
38-
this.metaClassName = metaTypeName;
39-
this.typeArgDecl = "";
40-
}
4129
}
4230

4331
public BasicCtType getBasicCtType() {
@@ -57,7 +45,7 @@ public boolean hasTypevar() {
5745
}
5846

5947
public String getInstantiationCommand() {
60-
return normalize(metaClassName) + "." + typeArgDecl + "getSingletonInternal()";
48+
return normalize(metaClassName) + "." + typeParametersDeclaration + "getSingletonInternal()";
6149
}
6250

6351
@Override
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.seasar.doma.internal.apt.cttype;
2+
3+
import javax.lang.model.type.TypeMirror;
4+
import org.seasar.doma.internal.apt.Context;
5+
6+
public class ResultCtType extends AbstractCtType {
7+
8+
private final CtType elementCtType;
9+
10+
ResultCtType(Context ctx, TypeMirror type, CtType elementCtType) {
11+
super(ctx, type);
12+
this.elementCtType = elementCtType;
13+
}
14+
15+
public CtType getElementCtType() {
16+
return elementCtType;
17+
}
18+
19+
public boolean isRaw() {
20+
return elementCtType.isNone();
21+
}
22+
23+
public boolean hasWildcard() {
24+
return elementCtType.isWildcard();
25+
}
26+
27+
@Override
28+
public <R, P, TH extends Throwable> R accept(CtTypeVisitor<R, P, TH> visitor, P p) throws TH {
29+
return visitor.visitResultCtType(this, p);
30+
}
31+
}

src/main/java/org/seasar/doma/internal/apt/cttype/SimpleCtTypeVisitor.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ public R visitAnyCtType(AnyCtType ctType, P p) throws TH {
1919
return defaultAction(ctType, p);
2020
}
2121

22+
@Override
23+
public R visitBatchResultCtType(BatchResultCtType ctType, P p) throws TH {
24+
return defaultAction(ctType, p);
25+
}
26+
2227
@Override
2328
public R visitBasicCtType(BasicCtType ctType, P p) throws TH {
2429
return defaultAction(ctType, p);
@@ -54,6 +59,11 @@ public R visitReferenceCtType(ReferenceCtType ctType, P p) throws TH {
5459
return defaultAction(ctType, p);
5560
}
5661

62+
@Override
63+
public R visitResultCtType(ResultCtType ctType, P p) throws TH {
64+
return defaultAction(ctType, p);
65+
}
66+
5767
@Override
5868
public R visitSelectOptionsCtType(SelectOptionsCtType ctType, P p) throws TH {
5969
return defaultAction(ctType, p);

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ protected void printClass() {
8383
}
8484

8585
protected void printFields() {
86-
if (domainMeta.isParametarized()) {
86+
if (domainMeta.isParameterized()) {
8787
iprint("@SuppressWarnings(\"rawtypes\")%n");
8888
}
8989
iprint("private static final %1$s singleton = new %1$s();%n", simpleName);
@@ -171,12 +171,12 @@ protected void printGetBasicClassMethod() {
171171
}
172172

173173
protected void printGetDomainClassMethod() {
174-
if (domainMeta.isParametarized()) {
174+
if (domainMeta.isParameterized()) {
175175
iprint("@SuppressWarnings(\"unchecked\")%n");
176176
}
177177
iprint("@Override%n");
178178
iprint("public Class<%1$s> getDomainClass() {%n", typeName);
179-
if (domainMeta.isParametarized()) {
179+
if (domainMeta.isParameterized()) {
180180
iprint(" Class<?> clazz = %1$s.class;%n", domainMeta.getTypeElement().getQualifiedName());
181181
iprint(" return (Class<%1$s>) clazz;%n", typeName);
182182
} else {
@@ -190,7 +190,7 @@ protected void printGetSingletonInternalMethod() {
190190
iprint("/**%n");
191191
iprint(" * @return the singleton%n");
192192
iprint(" */%n");
193-
if (domainMeta.isParametarized()) {
193+
if (domainMeta.isParameterized()) {
194194
iprint("@SuppressWarnings(\"unchecked\")%n");
195195
iprint(
196196
"public static %1$s %2$s%1$s getSingletonInternal() {%n",

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ protected void printPropertyTypeFields() {
146146
/* 3 */ pm.getTypeName(), /* 4 */
147147
pm.getFieldName(),
148148
/* 5 */ pm.getName(),
149-
/* 6 */ pm.getEmbeddableMetaTypeName(),
149+
/* 6 */ pm.getEmbeddableMetaClassName(),
150150
/* 7 */ pm.getName());
151151
} else {
152152
EntityPropertyCtTypeVisitor visitor = new EntityPropertyCtTypeVisitor();
@@ -626,7 +626,7 @@ protected void printGetVersionPropertyTypeMethod() {
626626
protected void printGetTenantIdPropertyTypeMethod() {
627627
String tenantIdName = "null";
628628
if (entityMeta.hasTenantIdPropertyMeta()) {
629-
EntityPropertyMeta pm = entityMeta.getTenanatIdPropertyMeta();
629+
EntityPropertyMeta pm = entityMeta.getTenantIdPropertyMeta();
630630
tenantIdName = pm.getFieldName();
631631
}
632632
iprint("@Override%n");
@@ -659,7 +659,7 @@ protected void printNewEntityMethod() {
659659
if (propertyMeta.isEmbedded()) {
660660
iprint(
661661
" %1$s.getSingletonInternal().newEmbeddable(\"%2$s\", __args)",
662-
propertyMeta.getEmbeddableMetaTypeName(), propertyMeta.getName());
662+
propertyMeta.getEmbeddableMetaClassName(), propertyMeta.getName());
663663
} else {
664664
iprint(
665665
" (%1$s)(__args.get(\"%2$s\") != null ? __args.get(\"%2$s\").get() : null)",
@@ -677,7 +677,7 @@ protected void printNewEntityMethod() {
677677
iprint(
678678
" %1$s.save(entity, %2$s.getSingletonInternal().newEmbeddable(\"%3$s\", __args));%n",
679679
propertyMeta.getFieldName(),
680-
propertyMeta.getEmbeddableMetaTypeName(),
680+
propertyMeta.getEmbeddableMetaClassName(),
681681
propertyMeta.getName());
682682
} else {
683683
iprint(

0 commit comments

Comments
 (0)