2020import java .io .IOException ;
2121import java .util .Iterator ;
2222import java .util .Map ;
23+ import java .util .function .BiFunction ;
2324
2425import javax .annotation .processing .ProcessingEnvironment ;
2526import javax .lang .model .element .TypeElement ;
4344import org .seasar .doma .internal .apt .meta .SequenceIdGeneratorMeta ;
4445import org .seasar .doma .internal .apt .meta .TableIdGeneratorMeta ;
4546import org .seasar .doma .internal .apt .util .TypeMirrorUtil ;
47+ import org .seasar .doma .jdbc .Naming ;
4648import org .seasar .doma .jdbc .entity .AbstractEntityType ;
4749import org .seasar .doma .jdbc .entity .AssignedIdPropertyType ;
4850import org .seasar .doma .jdbc .entity .DefaultPropertyType ;
@@ -112,10 +114,10 @@ protected void printClass() {
112114 protected void printFields () {
113115 printSingletonField ();
114116 printOriginalStatesAccessorField ();
117+ printNamingTypeField ();
115118 printIdGeneratorField ();
116119 printPropertyTypeFields ();
117120 printListenerSupplierField ();
118- printNamingTypeField ();
119121 printImmutableField ();
120122 printCatalogNameField ();
121123 printSchemaNameField ();
@@ -188,7 +190,7 @@ protected void printPropertyTypeFields() {
188190 iprint ("/** the %1$s */%n" , pm .getName ());
189191 if (pm .isId ()) {
190192 if (pm .getIdGeneratorMeta () != null ) {
191- iprint ("public final %1$s<%11$s, %2$s, %3$s, %14$s> %12$s = new %1$s<>(%6$s.class, %13$s.class, %3$s.class, () -> %7$s, %10$s, %8$s, \" %4$s\" , \" %5$s\" , %15$s, __idGenerator);%n" ,
193+ iprint ("public final %1$s<%11$s, %2$s, %3$s, %14$s> %12$s = new %1$s<>(%6$s.class, %13$s.class, %3$s.class, () -> %7$s, %10$s, %8$s, \" %4$s\" , \" %5$s\" , __namingType, %15$s, __idGenerator);%n" ,
192194 /* 1 */ GeneratedIdPropertyType .class .getName (),
193195 /* 2 */ entityMeta .getEntityTypeName (),
194196 /* 3 */ basicCtType .getBoxedTypeName (),
@@ -205,7 +207,7 @@ protected void printPropertyTypeFields() {
205207 /* 14 */ domainTypeName ,
206208 /* 15 */ pm .isColumnQuoteRequired ());
207209 } else {
208- iprint ("public final %1$s<%11$s, %2$s, %3$s, %14$s> %12$s = new %1$s<>(%6$s.class, %13$s.class, %3$s.class, () -> %7$s, %10$s, %8$s, \" %4$s\" , \" %5$s\" , %15$s);%n" ,
210+ iprint ("public final %1$s<%11$s, %2$s, %3$s, %14$s> %12$s = new %1$s<>(%6$s.class, %13$s.class, %3$s.class, () -> %7$s, %10$s, %8$s, \" %4$s\" , \" %5$s\" , __namingType, %15$s);%n" ,
209211 /* 1 */ AssignedIdPropertyType .class .getName (),
210212 /* 2 */ entityMeta .getEntityTypeName (),
211213 /* 3 */ basicCtType .getBoxedTypeName (),
@@ -223,7 +225,7 @@ protected void printPropertyTypeFields() {
223225 /* 15 */ pm .isColumnQuoteRequired ());
224226 }
225227 } else if (pm .isVersion ()) {
226- iprint ("public final %1$s<%11$s, %2$s, %3$s, %14$s> %12$s = new %1$s<>(%6$s.class, %13$s.class, %3$s.class, () -> %7$s, %10$s, %8$s, \" %4$s\" , \" %5$s\" , %15$s);%n" ,
228+ iprint ("public final %1$s<%11$s, %2$s, %3$s, %14$s> %12$s = new %1$s<>(%6$s.class, %13$s.class, %3$s.class, () -> %7$s, %10$s, %8$s, \" %4$s\" , \" %5$s\" , __namingType, %15$s);%n" ,
227229 /* 1 */ VersionPropertyType .class .getName (),
228230 /* 2 */ entityMeta .getEntityTypeName (),
229231 /* 3 */ basicCtType .getBoxedTypeName (),
@@ -240,7 +242,7 @@ protected void printPropertyTypeFields() {
240242 /* 14 */ domainTypeName ,
241243 /* 15 */ pm .isColumnQuoteRequired ());
242244 } else {
243- iprint ("public final %1$s<%13$s, %2$s, %3$s, %16$s> %14$s = new %1$s<>(%8$s.class, %15$s.class, %3$s.class, () -> %9$s, %12$s, %10$s, \" %4$s\" , \" %5$s\" , %6$s, %7$s, %17$s);%n" ,
245+ iprint ("public final %1$s<%13$s, %2$s, %3$s, %16$s> %14$s = new %1$s<>(%8$s.class, %15$s.class, %3$s.class, () -> %9$s, %12$s, %10$s, \" %4$s\" , \" %5$s\" , __namingType, %6$s, %7$s, %17$s);%n" ,
244246 /* 1 */ DefaultPropertyType .class .getName (),
245247 /* 2 */ entityMeta .getEntityTypeName (),
246248 /* 3 */ basicCtType .getBoxedTypeName (),
@@ -263,6 +265,13 @@ protected void printPropertyTypeFields() {
263265 }
264266 }
265267
268+ protected String getNamingTypeExpression (boolean defined ) {
269+ if (defined ) {
270+ return NamingType .class .getName () + "." + NamingType .NONE ;
271+ }
272+ return "__namingType" ;
273+ }
274+
266275 protected void printListenerSupplierField () {
267276 if (entityMeta .isGenericEntityListener ()) {
268277 iprint ("private final java.util.function.Supplier<%1$s<%2$s>> __listenerSupplier;%n" ,
@@ -276,7 +285,14 @@ protected void printListenerSupplierField() {
276285 }
277286
278287 protected void printNamingTypeField () {
279- iprint ("private final %1$s __namingType;%n" , NamingType .class .getName ());
288+ NamingType namingType = entityMeta .getNamingType ();
289+ if (namingType == null ) {
290+ iprint ("private final %1$s __namingType = null;%n" ,
291+ NamingType .class .getName ());
292+ } else {
293+ iprint ("private final %1$s __namingType = %1$s.%2$s;%n" ,
294+ NamingType .class .getName (), namingType .name ());
295+ }
280296 print ("%n" );
281297 }
282298
@@ -334,8 +350,6 @@ protected void printEntityPropertyTypeMapField() {
334350 protected void printConstructor () {
335351 iprint ("private %1$s() {%n" , simpleName );
336352 iprint (" __listenerSupplier = () -> ListenerHolder.listener;%n" );
337- iprint (" __namingType = %1$s.%2$s;%n" , NamingType .class .getName (),
338- entityMeta .getNamingType ().name ());
339353 iprint (" __immutable = %1$s;%n" , entityMeta .isImmutable ());
340354 iprint (" __name = \" %1$s\" ;%n" , entityMeta .getEntityName ());
341355 iprint (" __catalogName = \" %1$s\" ;%n" , entityMeta .getCatalogName ());
@@ -438,6 +452,16 @@ protected void printGetSchemaNameMethod() {
438452 protected void printGetTableNameMethod () {
439453 iprint ("@Override%n" );
440454 iprint ("public String getTableName() {%n" );
455+ iprint (" return getTableName(%1$s.DEFAULT::apply);%n" ,
456+ Naming .class .getName ());
457+ iprint ("}%n" );
458+ print ("%n" );
459+ iprint ("@Override%n" );
460+ iprint ("public String getTableName(%1$s<%2$s, String, String> namingFunction) {%n" ,
461+ BiFunction .class .getName (), NamingType .class .getName ());
462+ iprint (" if (__tableName.isEmpty()) {%n" );
463+ iprint (" return namingFunction.apply(__namingType, __name);%n" );
464+ iprint (" }%n" );
441465 iprint (" return __tableName;%n" );
442466 iprint ("}%n" );
443467 print ("%n" );
0 commit comments