Skip to content

Commit b51734b

Browse files
committed
EntityListenerをConfig.getEntityListener()で取得するようにしました
1 parent 8b2402f commit b51734b

29 files changed

+714
-71
lines changed

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

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ protected void printClass() {
104104
printFields();
105105
printConstructor();
106106
printMethods();
107+
printListenerHolder();
107108
unindent();
108109
iprint("}%n");
109110
}
@@ -113,7 +114,7 @@ protected void printFields() {
113114
printOriginalStatesAccessorField();
114115
printIdGeneratorField();
115116
printPropertyTypeFields();
116-
printListenerField();
117+
printListenerSupplierField();
117118
printNamingTypeField();
118119
printImmutableField();
119120
printCatalogNameField();
@@ -262,14 +263,14 @@ protected void printPropertyTypeFields() {
262263
}
263264
}
264265

265-
protected void printListenerField() {
266+
protected void printListenerSupplierField() {
266267
if (entityMeta.isGenericEntityListener()) {
267-
iprint("private final %1$s<%2$s> __listener;%n", entityMeta
268-
.getEntityListenerElement().getQualifiedName(),
268+
iprint("private final java.util.function.Supplier<%1$s<%2$s>> __listenerSupplier;%n",
269+
entityMeta.getEntityListenerElement().getQualifiedName(),
269270
entityMeta.getEntityTypeName());
270271
} else {
271-
iprint("private final %1$s __listener;%n", entityMeta
272-
.getEntityListenerElement().getQualifiedName());
272+
iprint("private final java.util.function.Supplier<%1$s> __listenerSupplier;%n",
273+
entityMeta.getEntityListenerElement().getQualifiedName());
273274
}
274275
print("%n");
275276
}
@@ -332,14 +333,7 @@ protected void printEntityPropertyTypeMapField() {
332333

333334
protected void printConstructor() {
334335
iprint("private %1$s() {%n", simpleName);
335-
if (entityMeta.isGenericEntityListener()) {
336-
iprint(" __listener = new %1$s<%2$s>();%n", entityMeta
337-
.getEntityListenerElement().getQualifiedName(),
338-
entityMeta.getEntityTypeName());
339-
} else {
340-
iprint(" __listener = new %1$s();%n", entityMeta
341-
.getEntityListenerElement().getQualifiedName());
342-
}
336+
iprint(" __listenerSupplier = () -> ListenerHolder.listener;%n");
343337
iprint(" __namingType = %1$s.%2$s;%n", NamingType.class.getName(),
344338
entityMeta.getNamingType().name());
345339
iprint(" __immutable = %1$s;%n", entityMeta.isImmutable());
@@ -458,60 +452,72 @@ protected void printIsQuoteRequiredMethod() {
458452
}
459453

460454
protected void printPreInsertMethod() {
455+
iprint("@SuppressWarnings({\"rawtypes\", \"unchecked\"})%n");
461456
iprint("@Override%n");
462457
iprint("public void preInsert(%1$s entity, %2$s<%1$s> context) {%n",
463458
entityMeta.getEntityTypeName(),
464459
PreInsertContext.class.getName());
460+
printDeclareListener();
465461
iprint(" __listener.preInsert(entity, context);%n");
466462
iprint("}%n");
467463
print("%n");
468464
}
469465

470466
protected void printPreUpdateMethod() {
467+
iprint("@SuppressWarnings({\"rawtypes\", \"unchecked\"})%n");
471468
iprint("@Override%n");
472469
iprint("public void preUpdate(%1$s entity, %2$s<%1$s> context) {%n",
473470
entityMeta.getEntityTypeName(),
474471
PreUpdateContext.class.getName());
472+
printDeclareListener();
475473
iprint(" __listener.preUpdate(entity, context);%n");
476474
iprint("}%n");
477475
print("%n");
478476
}
479477

480478
protected void printPreDeleteMethod() {
479+
iprint("@SuppressWarnings({\"rawtypes\", \"unchecked\"})%n");
481480
iprint("@Override%n");
482481
iprint("public void preDelete(%1$s entity, %2$s<%1$s> context) {%n",
483482
entityMeta.getEntityTypeName(),
484483
PreDeleteContext.class.getName());
484+
printDeclareListener();
485485
iprint(" __listener.preDelete(entity, context);%n");
486486
iprint("}%n");
487487
print("%n");
488488
}
489489

490490
protected void printPostInsertMethod() {
491+
iprint("@SuppressWarnings({\"rawtypes\", \"unchecked\"})%n");
491492
iprint("@Override%n");
492493
iprint("public void postInsert(%1$s entity, %2$s<%1$s> context) {%n",
493494
entityMeta.getEntityTypeName(),
494495
PostInsertContext.class.getName());
496+
printDeclareListener();
495497
iprint(" __listener.postInsert(entity, context);%n");
496498
iprint("}%n");
497499
print("%n");
498500
}
499501

500502
protected void printPostUpdateMethod() {
503+
iprint("@SuppressWarnings({\"rawtypes\", \"unchecked\"})%n");
501504
iprint("@Override%n");
502505
iprint("public void postUpdate(%1$s entity, %2$s<%1$s> context) {%n",
503506
entityMeta.getEntityTypeName(),
504507
PostUpdateContext.class.getName());
508+
printDeclareListener();
505509
iprint(" __listener.postUpdate(entity, context);%n");
506510
iprint("}%n");
507511
print("%n");
508512
}
509513

510514
protected void printPostDeleteMethod() {
515+
iprint("@SuppressWarnings({\"rawtypes\", \"unchecked\"})%n");
511516
iprint("@Override%n");
512517
iprint("public void postDelete(%1$s entity, %2$s<%1$s> context) {%n",
513518
entityMeta.getEntityTypeName(),
514519
PostDeleteContext.class.getName());
520+
printDeclareListener();
515521
iprint(" __listener.postDelete(entity, context);%n");
516522
iprint("}%n");
517523
print("%n");
@@ -699,6 +705,27 @@ protected void printNewInstanceMethod() {
699705
print("%n");
700706
}
701707

708+
protected void printListenerHolder() {
709+
iprint("private static class ListenerHolder {%n");
710+
if (entityMeta.isGenericEntityListener()) {
711+
iprint(" private static %1$s<%2$s> listener = new %1$s<>();%n",
712+
entityMeta.getEntityListenerElement().getQualifiedName(),
713+
entityMeta.getEntityTypeName());
714+
} else {
715+
iprint(" private static %1$s listener = new %1$s();%n",
716+
entityMeta.getEntityListenerElement().getQualifiedName());
717+
}
718+
iprint("}%n");
719+
print("%n");
720+
}
721+
722+
private void printDeclareListener() {
723+
iprint(" Class __listenerClass = %1$s.class;%n", entityMeta
724+
.getEntityListenerElement().getQualifiedName());
725+
iprint(" %1$s __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);%n",
726+
entityMeta.getEntityListenerElement().getQualifiedName());
727+
}
728+
702729
protected class IdGeneratorGenerator implements
703730
IdGeneratorMetaVisitor<Void, Void> {
704731

@@ -807,4 +834,4 @@ public Void visitDomainCtType(DomainCtType domainCtType, Void p)
807834
}
808835
}
809836

810-
}
837+
}

src/test/resources/org/seasar/doma/internal/apt/entity/EntityProcessorTest_Abstract.txt

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public final class _AbstractEntity extends org.seasar.doma.jdbc.entity.AbstractE
1313
/** the id */
1414
public final org.seasar.doma.jdbc.entity.AssignedIdPropertyType<java.lang.Object, org.seasar.doma.internal.apt.entity.AbstractEntity, java.lang.Integer, Object> $id = new org.seasar.doma.jdbc.entity.AssignedIdPropertyType<>(org.seasar.doma.internal.apt.entity.AbstractEntity.class, java.lang.Integer.class, java.lang.Integer.class, () -> new org.seasar.doma.wrapper.IntegerWrapper(), null, null, "id", "id", false);
1515

16-
private final org.seasar.doma.jdbc.entity.NullEntityListener<org.seasar.doma.internal.apt.entity.AbstractEntity> __listener;
16+
private final java.util.function.Supplier<org.seasar.doma.jdbc.entity.NullEntityListener<org.seasar.doma.internal.apt.entity.AbstractEntity>> __listenerSupplier;
1717

1818
private final org.seasar.doma.jdbc.entity.NamingType __namingType;
1919

@@ -36,7 +36,7 @@ public final class _AbstractEntity extends org.seasar.doma.jdbc.entity.AbstractE
3636
private final java.util.Map<String, org.seasar.doma.jdbc.entity.EntityPropertyType<org.seasar.doma.internal.apt.entity.AbstractEntity, ?>> __entityPropertyTypeMap;
3737

3838
private _AbstractEntity() {
39-
__listener = new org.seasar.doma.jdbc.entity.NullEntityListener<org.seasar.doma.internal.apt.entity.AbstractEntity>();
39+
__listenerSupplier = () -> ListenerHolder.listener;
4040
__namingType = org.seasar.doma.jdbc.entity.NamingType.NONE;
4141
__immutable = false;
4242
__name = "AbstractEntity";
@@ -90,33 +90,51 @@ public final class _AbstractEntity extends org.seasar.doma.jdbc.entity.AbstractE
9090
return __isQuoteRequired;
9191
}
9292

93+
@SuppressWarnings({"rawtypes", "unchecked"})
9394
@Override
9495
public void preInsert(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PreInsertContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
96+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
97+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
9598
__listener.preInsert(entity, context);
9699
}
97100

101+
@SuppressWarnings({"rawtypes", "unchecked"})
98102
@Override
99103
public void preUpdate(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PreUpdateContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
104+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
105+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
100106
__listener.preUpdate(entity, context);
101107
}
102108

109+
@SuppressWarnings({"rawtypes", "unchecked"})
103110
@Override
104111
public void preDelete(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PreDeleteContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
112+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
113+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
105114
__listener.preDelete(entity, context);
106115
}
107116

117+
@SuppressWarnings({"rawtypes", "unchecked"})
108118
@Override
109119
public void postInsert(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PostInsertContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
120+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
121+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
110122
__listener.postInsert(entity, context);
111123
}
112124

125+
@SuppressWarnings({"rawtypes", "unchecked"})
113126
@Override
114127
public void postUpdate(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PostUpdateContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
128+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
129+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
115130
__listener.postUpdate(entity, context);
116131
}
117132

133+
@SuppressWarnings({"rawtypes", "unchecked"})
118134
@Override
119135
public void postDelete(org.seasar.doma.internal.apt.entity.AbstractEntity entity, org.seasar.doma.jdbc.entity.PostDeleteContext<org.seasar.doma.internal.apt.entity.AbstractEntity> context) {
136+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
137+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
120138
__listener.postDelete(entity, context);
121139
}
122140

@@ -178,4 +196,8 @@ public final class _AbstractEntity extends org.seasar.doma.jdbc.entity.AbstractE
178196
return new _AbstractEntity();
179197
}
180198

199+
private static class ListenerHolder {
200+
private static org.seasar.doma.jdbc.entity.NullEntityListener<org.seasar.doma.internal.apt.entity.AbstractEntity> listener = new org.seasar.doma.jdbc.entity.NullEntityListener<>();
201+
}
202+
181203
}

src/test/resources/org/seasar/doma/internal/apt/entity/EntityProcessorTest_BytesProperty.txt

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public final class _BytesPropertyEntity extends org.seasar.doma.jdbc.entity.Abst
1313
/** the bytes */
1414
public final org.seasar.doma.jdbc.entity.DefaultPropertyType<java.lang.Object, org.seasar.doma.internal.apt.entity.BytesPropertyEntity, byte[], Object> $bytes = new org.seasar.doma.jdbc.entity.DefaultPropertyType<>(org.seasar.doma.internal.apt.entity.BytesPropertyEntity.class, byte[].class, byte[].class, () -> new org.seasar.doma.wrapper.BytesWrapper(), null, null, "bytes", "bytes", true, true, false);
1515

16-
private final org.seasar.doma.jdbc.entity.NullEntityListener<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> __listener;
16+
private final java.util.function.Supplier<org.seasar.doma.jdbc.entity.NullEntityListener<org.seasar.doma.internal.apt.entity.BytesPropertyEntity>> __listenerSupplier;
1717

1818
private final org.seasar.doma.jdbc.entity.NamingType __namingType;
1919

@@ -36,7 +36,7 @@ public final class _BytesPropertyEntity extends org.seasar.doma.jdbc.entity.Abst
3636
private final java.util.Map<String, org.seasar.doma.jdbc.entity.EntityPropertyType<org.seasar.doma.internal.apt.entity.BytesPropertyEntity, ?>> __entityPropertyTypeMap;
3737

3838
private _BytesPropertyEntity() {
39-
__listener = new org.seasar.doma.jdbc.entity.NullEntityListener<org.seasar.doma.internal.apt.entity.BytesPropertyEntity>();
39+
__listenerSupplier = () -> ListenerHolder.listener;
4040
__namingType = org.seasar.doma.jdbc.entity.NamingType.NONE;
4141
__immutable = false;
4242
__name = "BytesPropertyEntity";
@@ -89,33 +89,51 @@ public final class _BytesPropertyEntity extends org.seasar.doma.jdbc.entity.Abst
8989
return __isQuoteRequired;
9090
}
9191

92+
@SuppressWarnings({"rawtypes", "unchecked"})
9293
@Override
9394
public void preInsert(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PreInsertContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
95+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
96+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
9497
__listener.preInsert(entity, context);
9598
}
9699

100+
@SuppressWarnings({"rawtypes", "unchecked"})
97101
@Override
98102
public void preUpdate(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PreUpdateContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
103+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
104+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
99105
__listener.preUpdate(entity, context);
100106
}
101107

108+
@SuppressWarnings({"rawtypes", "unchecked"})
102109
@Override
103110
public void preDelete(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PreDeleteContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
111+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
112+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
104113
__listener.preDelete(entity, context);
105114
}
106115

116+
@SuppressWarnings({"rawtypes", "unchecked"})
107117
@Override
108118
public void postInsert(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PostInsertContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
119+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
120+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
109121
__listener.postInsert(entity, context);
110122
}
111123

124+
@SuppressWarnings({"rawtypes", "unchecked"})
112125
@Override
113126
public void postUpdate(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PostUpdateContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
127+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
128+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
114129
__listener.postUpdate(entity, context);
115130
}
116131

132+
@SuppressWarnings({"rawtypes", "unchecked"})
117133
@Override
118134
public void postDelete(org.seasar.doma.internal.apt.entity.BytesPropertyEntity entity, org.seasar.doma.jdbc.entity.PostDeleteContext<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> context) {
135+
Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class;
136+
org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListener(__listenerClass, __listenerSupplier);
119137
__listener.postDelete(entity, context);
120138
}
121139

@@ -179,4 +197,8 @@ public final class _BytesPropertyEntity extends org.seasar.doma.jdbc.entity.Abst
179197
return new _BytesPropertyEntity();
180198
}
181199

200+
private static class ListenerHolder {
201+
private static org.seasar.doma.jdbc.entity.NullEntityListener<org.seasar.doma.internal.apt.entity.BytesPropertyEntity> listener = new org.seasar.doma.jdbc.entity.NullEntityListener<>();
202+
}
203+
182204
}

0 commit comments

Comments
 (0)