[jOOQ/jOOQ#10287] Add <pojosAsJavaRecordClasses/> to allow for generating Java POJOs as JDK records instead
This commit is contained in:
parent
f831677db0
commit
17dfdbb57c
@ -568,7 +568,7 @@ abstract class AbstractGenerator implements Generator {
|
||||
|
||||
@Override
|
||||
public boolean generateImmutablePojos() {
|
||||
return generateImmutablePojos;
|
||||
return generateImmutablePojos || generatePojosAsJavaRecordClasses();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -76,6 +76,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TimeZone;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
@ -2132,7 +2133,9 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.println("%s(new %s(value.%s()));",
|
||||
getStrategy().getJavaSetterName(column, Mode.RECORD),
|
||||
out.ref(getStrategy().getFullJavaClassName(column, Mode.RECORD)),
|
||||
getStrategy().getJavaGetterName(column, Mode.DEFAULT));
|
||||
generatePojosAsJavaRecordClasses()
|
||||
? getStrategy().getJavaMemberName(column, Mode.POJO)
|
||||
: getStrategy().getJavaGetterName(column, Mode.DEFAULT));
|
||||
else
|
||||
out.println("%s(%s);",
|
||||
getStrategy().getJavaSetterName(column, Mode.RECORD),
|
||||
@ -2223,7 +2226,9 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
getStrategy().getJavaSetterName(column, Mode.RECORD),
|
||||
getStrategy().getJavaGetterName(column, Mode.POJO),
|
||||
udtType,
|
||||
getStrategy().getJavaGetterName(column, Mode.POJO),
|
||||
generatePojosAsJavaRecordClasses()
|
||||
? getStrategy().getJavaMemberName(column, Mode.POJO)
|
||||
: getStrategy().getJavaGetterName(column, Mode.POJO),
|
||||
udtArrayElementType,
|
||||
Collectors.class);
|
||||
else if (isArrayOfUDTs)
|
||||
@ -2231,7 +2236,9 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
getStrategy().getJavaSetterName(column, Mode.RECORD),
|
||||
getStrategy().getJavaGetterName(column, Mode.POJO),
|
||||
Stream.class,
|
||||
getStrategy().getJavaGetterName(column, Mode.POJO),
|
||||
generatePojosAsJavaRecordClasses()
|
||||
? getStrategy().getJavaMemberName(column, Mode.POJO)
|
||||
: getStrategy().getJavaGetterName(column, Mode.POJO),
|
||||
udtArrayElementType,
|
||||
udtArrayElementType);
|
||||
else if (isUDT || isArray)
|
||||
@ -2239,11 +2246,15 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
getStrategy().getJavaSetterName(column, Mode.RECORD),
|
||||
getStrategy().getJavaGetterName(column, Mode.POJO),
|
||||
udtType,
|
||||
getStrategy().getJavaGetterName(column, Mode.POJO));
|
||||
generatePojosAsJavaRecordClasses()
|
||||
? getStrategy().getJavaMemberName(column, Mode.POJO)
|
||||
: getStrategy().getJavaGetterName(column, Mode.POJO));
|
||||
else
|
||||
out.println("%s(value.%s());",
|
||||
getStrategy().getJavaSetterName(column, Mode.RECORD),
|
||||
getStrategy().getJavaGetterName(column, Mode.POJO));
|
||||
generatePojosAsJavaRecordClasses()
|
||||
? getStrategy().getJavaMemberName(column, Mode.POJO)
|
||||
: getStrategy().getJavaGetterName(column, Mode.POJO));
|
||||
else
|
||||
out.println("%s(%s);",
|
||||
getStrategy().getJavaSetterName(column, Mode.RECORD),
|
||||
@ -2603,27 +2614,23 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
else
|
||||
out.println("return new %s(", type);
|
||||
|
||||
String separator = " ";
|
||||
|
||||
for (EmbeddableColumnDefinition column : embeddable.getColumns()) {
|
||||
forEach(embeddable.getColumns(), (column, separator) -> {
|
||||
final String columnType = out.ref(getJavaType(column.getReferencingColumn().getType(resolver(out)), out));
|
||||
final int position = column.getReferencingColumnPosition() - 1;
|
||||
|
||||
if (scala)
|
||||
out.println("%sget(%s).asInstanceOf[%s]", separator, position, columnType);
|
||||
out.println("get(%s).asInstanceOf[%s]%s", position, columnType, separator);
|
||||
else if (kotlin)
|
||||
out.tab(1).println("%sget(%s) as %s?", separator, position, columnType);
|
||||
out.tab(1).println("get(%s) as %s?%s", position, columnType, separator);
|
||||
else {
|
||||
|
||||
// [#6705] Avoid generating code with a redundant (Object) cast
|
||||
if (Object.class.getName().equals(typeFull))
|
||||
out.println("%sget(%s)", separator, position);
|
||||
out.println("get(%s)%s", position, separator);
|
||||
else
|
||||
out.println("%s(%s) get(%s)", separator, columnType, position);
|
||||
out.println("(%s) get(%s)%s", columnType, position, separator);
|
||||
}
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
});
|
||||
|
||||
if (scala)
|
||||
out.println(")");
|
||||
@ -2679,17 +2686,15 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
|
||||
private String refRowType(JavaWriter out, Collection<? extends Definition> columns) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
String separator = "";
|
||||
|
||||
for (Definition column : columns) {
|
||||
result.append(separator);
|
||||
forEach(columns, "", ", ", (column, separator) -> {
|
||||
result.append(getJavaTypeRef(column, out));
|
||||
|
||||
if (kotlin && !(column instanceof EmbeddableDefinition))
|
||||
result.append("?");
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
result.append(separator);
|
||||
});
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
@ -4139,16 +4144,15 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
else if (keyColumns.size() <= Constants.MAX_ROW_DEGREE) {
|
||||
StringBuilder generics = new StringBuilder();
|
||||
String separator = "";
|
||||
|
||||
for (ColumnDefinition column : keyColumns) {
|
||||
generics.append(separator).append(out.ref(getJavaType(column.getType(resolver(out)), out)));
|
||||
forEach(keyColumns, "", ", ", (column, separator) -> {
|
||||
generics.append(out.ref(getJavaType(column.getType(resolver(out)), out)));
|
||||
|
||||
if (kotlin)
|
||||
generics.append("?");
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
generics.append(separator);
|
||||
});
|
||||
|
||||
if (scala)
|
||||
tType = Record.class.getName() + keyColumns.size() + "[" + generics + "]";
|
||||
@ -4234,18 +4238,17 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
// [#2574] This should be replaced by a call to a method on the target table's Key type
|
||||
else {
|
||||
StringBuilder params = new StringBuilder();
|
||||
String separator = "";
|
||||
|
||||
for (ColumnDefinition column : keyColumns) {
|
||||
forEach(keyColumns, "", ", ", (column, separator) -> {
|
||||
if (scala)
|
||||
params.append(separator).append("o.").append(getStrategy().getJavaGetterName(column, Mode.POJO));
|
||||
params.append("o.").append(getStrategy().getJavaGetterName(column, Mode.POJO));
|
||||
else if (kotlin)
|
||||
params.append(separator).append("o.").append(getStrategy().getJavaMemberName(column, Mode.POJO));
|
||||
params.append("o.").append(getStrategy().getJavaMemberName(column, Mode.POJO));
|
||||
else
|
||||
params.append(separator).append("object.").append(getStrategy().getJavaGetterName(column, Mode.POJO)).append("()");
|
||||
params.append("object.").append(getStrategy().getJavaGetterName(column, Mode.POJO)).append("()");
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
params.append(separator);
|
||||
});
|
||||
|
||||
if (scala || kotlin)
|
||||
out.println("compositeKeyRecord(%s)", params.toString());
|
||||
@ -4469,37 +4472,30 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
if (tableUdtOrEmbeddable instanceof TableDefinition)
|
||||
printTableJPAAnnotation(out, (TableDefinition) tableUdtOrEmbeddable);
|
||||
|
||||
int maxLength = 0;
|
||||
int maxLength0 = 0;
|
||||
for (TypedElementDefinition<?> column : getTypedElements(tableUdtOrEmbeddable))
|
||||
maxLength = Math.max(maxLength, out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)).length());
|
||||
maxLength0 = Math.max(maxLength0, out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)).length());
|
||||
int maxLength = maxLength0;
|
||||
|
||||
if (scala) {
|
||||
out.println("%s%sclass %s(", visibility(), (generatePojosAsScalaCaseClasses() ? "case " : ""), className);
|
||||
|
||||
String separator = " ";
|
||||
for (TypedElementDefinition<?> column : getTypedElements(tableUdtOrEmbeddable)) {
|
||||
out.println("%s%s%s %s: %s",
|
||||
separator,
|
||||
forEach(getTypedElements(tableUdtOrEmbeddable), (column, separator) -> {
|
||||
out.println("%s%s %s: %s%s",
|
||||
visibility(generateInterfaces()),
|
||||
generateImmutablePojos() ? "val" : "var",
|
||||
getStrategy().getJavaMemberName(column, Mode.POJO),
|
||||
out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)));
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)),
|
||||
separator
|
||||
);
|
||||
});
|
||||
|
||||
out.println(")[[before= extends ][%s]][[before= with ][separator= with ][%s]] {", first(superTypes), remaining(superTypes));
|
||||
}
|
||||
else if (kotlin) {
|
||||
out.println("%s%sclass %s(", visibility(), (generatePojosAsKotlinDataClasses() ? "data " : ""), className);
|
||||
|
||||
String separator = ", ";
|
||||
List<? extends TypedElementDefinition<? extends Definition>> typedElements = getTypedElements(tableUdtOrEmbeddable);
|
||||
for (int i = 0; i < typedElements.size(); i++) {
|
||||
if (i + 1 == typedElements.size())
|
||||
separator = "";
|
||||
|
||||
TypedElementDefinition<?> column = typedElements.get(i);
|
||||
forEach(getTypedElements(tableUdtOrEmbeddable), (column, separator) -> {
|
||||
final String member = getStrategy().getJavaMemberName(column, Mode.POJO);
|
||||
|
||||
if (column instanceof ColumnDefinition)
|
||||
@ -4515,31 +4511,45 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)),
|
||||
separator
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
out.println(")[[before=: ][%s]] {", superTypes);
|
||||
}
|
||||
else {
|
||||
out.println("%sclass %s[[before= extends ][%s]][[before= implements ][%s]] {", visibility(), className, list(superName), interfaces);
|
||||
if (generatePojosAsJavaRecordClasses()) {
|
||||
out.println("%srecord %s(", visibility(), className);
|
||||
|
||||
forEach(getTypedElements(tableUdtOrEmbeddable), (column, separator) -> {
|
||||
out.println("%s %s%s",
|
||||
StringUtils.rightPad(out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)), maxLength),
|
||||
getStrategy().getJavaMemberName(column, Mode.POJO),
|
||||
separator);
|
||||
});
|
||||
|
||||
out.println(")[[before= implements ][%s]] {", interfaces);
|
||||
}
|
||||
else {
|
||||
out.println("%sclass %s[[before= extends ][%s]][[before= implements ][%s]] {", visibility(), className, list(superName), interfaces);
|
||||
}
|
||||
|
||||
if (generateSerializablePojos() || generateSerializableInterfaces())
|
||||
out.printSerial();
|
||||
|
||||
out.println();
|
||||
|
||||
for (TypedElementDefinition<?> column : getTypedElements(tableUdtOrEmbeddable)) {
|
||||
out.println("private %s%s %s;",
|
||||
generateImmutablePojos() ? "final " : "",
|
||||
StringUtils.rightPad(out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)), maxLength),
|
||||
getStrategy().getJavaMemberName(column, Mode.POJO));
|
||||
}
|
||||
if (!generatePojosAsJavaRecordClasses())
|
||||
for (TypedElementDefinition<?> column : getTypedElements(tableUdtOrEmbeddable))
|
||||
out.println("private %s%s %s;",
|
||||
generateImmutablePojos() ? "final " : "",
|
||||
StringUtils.rightPad(out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)), maxLength0),
|
||||
getStrategy().getJavaMemberName(column, Mode.POJO));
|
||||
}
|
||||
|
||||
// Constructors
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
// Default constructor
|
||||
if (!generateImmutablePojos())
|
||||
if (!generateImmutablePojos() && !generatePojosAsJavaRecordClasses())
|
||||
generatePojoDefaultConstructor(tableUdtOrEmbeddable, out);
|
||||
|
||||
if (!kotlin) {
|
||||
@ -4548,23 +4558,25 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
generatePojoCopyConstructor(tableUdtOrEmbeddable, out);
|
||||
|
||||
// Multi-constructor
|
||||
generatePojoMultiConstructor(tableUdtOrEmbeddable, out);
|
||||
if (!generatePojosAsJavaRecordClasses()) {
|
||||
generatePojoMultiConstructor(tableUdtOrEmbeddable, out);
|
||||
|
||||
List<? extends TypedElementDefinition<?>> elements = getTypedElements(tableUdtOrEmbeddable);
|
||||
for (int i = 0; i < elements.size(); i++) {
|
||||
TypedElementDefinition<?> column = elements.get(i);
|
||||
List<? extends TypedElementDefinition<?>> elements = getTypedElements(tableUdtOrEmbeddable);
|
||||
for (int i = 0; i < elements.size(); i++) {
|
||||
TypedElementDefinition<?> column = elements.get(i);
|
||||
|
||||
if (tableUdtOrEmbeddable instanceof TableDefinition)
|
||||
generatePojoGetter(column, i, out);
|
||||
else
|
||||
generateUDTPojoGetter(column, i, out);
|
||||
|
||||
// Setter
|
||||
if (!generateImmutablePojos())
|
||||
if (tableUdtOrEmbeddable instanceof TableDefinition)
|
||||
generatePojoSetter(column, i, out);
|
||||
generatePojoGetter(column, i, out);
|
||||
else
|
||||
generateUDTPojoSetter(column, i, out);
|
||||
generateUDTPojoGetter(column, i, out);
|
||||
|
||||
// Setter
|
||||
if (!generateImmutablePojos())
|
||||
if (tableUdtOrEmbeddable instanceof TableDefinition)
|
||||
generatePojoSetter(column, i, out);
|
||||
else
|
||||
generateUDTPojoSetter(column, i, out);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -4664,31 +4676,50 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
if (scala) {
|
||||
out.println("%sdef this(value: %s) = this(", visibility(), generateInterfaces() ? interfaceName : className);
|
||||
|
||||
String separator = " ";
|
||||
for (TypedElementDefinition<?> column : getTypedElements(tableOrUDT)) {
|
||||
out.println("%svalue.%s",
|
||||
separator,
|
||||
generateInterfaces()
|
||||
? getStrategy().getJavaGetterName(column, Mode.INTERFACE)
|
||||
: getStrategy().getJavaMemberName(column, Mode.POJO));
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
|
||||
out.println(")");
|
||||
}
|
||||
else {
|
||||
out.println("%s%s(%s value) {", visibility(), className, generateInterfaces() ? interfaceName : className);
|
||||
|
||||
for (TypedElementDefinition<?> column : getTypedElements(tableOrUDT)) {
|
||||
out.println("this.%s = value.%s%s;",
|
||||
getStrategy().getJavaMemberName(column, Mode.POJO),
|
||||
forEach(getTypedElements(tableOrUDT), (column, separator) -> {
|
||||
out.println("value.%s%s",
|
||||
generateInterfaces()
|
||||
? getStrategy().getJavaGetterName(column, Mode.INTERFACE)
|
||||
: getStrategy().getJavaMemberName(column, Mode.POJO),
|
||||
generateInterfaces()
|
||||
? "()"
|
||||
: "");
|
||||
separator
|
||||
);
|
||||
});
|
||||
|
||||
out.println(")");
|
||||
}
|
||||
|
||||
// Should never be called
|
||||
else if (kotlin) {}
|
||||
else {
|
||||
out.println("%s%s(%s value) {", visibility(), className, generateInterfaces() ? interfaceName : className);
|
||||
|
||||
if (generatePojosAsJavaRecordClasses()) {
|
||||
out.println("this(");
|
||||
|
||||
forEach(getTypedElements(tableOrUDT), (column, separator) -> {
|
||||
out.println("value.%s%s%s",
|
||||
generateInterfaces()
|
||||
? getStrategy().getJavaGetterName(column, Mode.INTERFACE)
|
||||
: getStrategy().getJavaMemberName(column, Mode.POJO),
|
||||
generateInterfaces()
|
||||
? "()"
|
||||
: "",
|
||||
separator);
|
||||
});
|
||||
|
||||
out.println(");");
|
||||
}
|
||||
else {
|
||||
for (TypedElementDefinition<?> column : getTypedElements(tableOrUDT)) {
|
||||
out.println("this.%s = value.%s%s;",
|
||||
getStrategy().getJavaMemberName(column, Mode.POJO),
|
||||
generateInterfaces()
|
||||
? getStrategy().getJavaGetterName(column, Mode.INTERFACE)
|
||||
: getStrategy().getJavaMemberName(column, Mode.POJO),
|
||||
generateInterfaces()
|
||||
? "()"
|
||||
: "");
|
||||
}
|
||||
}
|
||||
|
||||
out.println("}");
|
||||
@ -4761,15 +4792,12 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.println("return new %s(", columnType);
|
||||
}
|
||||
|
||||
String separator = " ";
|
||||
for (EmbeddableColumnDefinition column : embeddable.getColumns()) {
|
||||
forEach(embeddable.getColumns(), (column, separator) -> {
|
||||
if (kotlin)
|
||||
out.tab(1).println("%s%s", separator, getStrategy().getJavaMemberName(column.getReferencingColumn(), Mode.POJO));
|
||||
out.tab(1).println("%s%s", getStrategy().getJavaMemberName(column.getReferencingColumn(), Mode.POJO), separator);
|
||||
else
|
||||
out.println("%s%s%s", separator, getStrategy().getJavaGetterName(column.getReferencingColumn(), Mode.POJO), emptyparens);
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s%s%s", getStrategy().getJavaGetterName(column.getReferencingColumn(), Mode.POJO), emptyparens, separator);
|
||||
});
|
||||
|
||||
if (scala)
|
||||
out.println(")");
|
||||
@ -5464,15 +5492,13 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.println("private def this(alias: %s, aliased: %s[%s]) = this(alias, null, null, aliased, %s(",
|
||||
Name.class, Table.class, recordType, out.ref("scala.Array"));
|
||||
|
||||
String separator = " ";
|
||||
for (ParameterDefinition parameter : parameters) {
|
||||
forEach(parameters, (parameter, separator) -> {
|
||||
final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
|
||||
final List<String> converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
|
||||
final List<String> binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
|
||||
|
||||
out.println("%s%s.value(null, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")", separator, DSL.class, paramTypeRef, converter, binding);
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s.value(null, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")%s", DSL.class, paramTypeRef, converter, binding, separator);
|
||||
});
|
||||
|
||||
out.println("))");
|
||||
}
|
||||
@ -5485,15 +5511,13 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.println("private constructor(alias: %s, aliased: %s<%s>?): this(alias, null, null, aliased, arrayOf(",
|
||||
Name.class, Table.class, recordType, Field.class, parameters.size());
|
||||
|
||||
String separator = " ";
|
||||
for (ParameterDefinition parameter : parameters) {
|
||||
forEach(parameters, (parameter, separator) -> {
|
||||
final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
|
||||
final List<String> converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
|
||||
final List<String> binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
|
||||
|
||||
out.println("%s%s.value(null, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")", separator, DSL.class, paramTypeRef, converter, binding);
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s.value(null, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")%s", DSL.class, paramTypeRef, converter, binding, separator);
|
||||
});
|
||||
|
||||
out.println("))");
|
||||
}
|
||||
@ -5509,16 +5533,13 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
if (table.isTableValuedFunction()) {
|
||||
out.println("this(alias, aliased, new %s[] {", Field.class);
|
||||
|
||||
String separator = " ";
|
||||
|
||||
for (ParameterDefinition parameter : parameters) {
|
||||
forEach(parameters, (parameter, separator) -> {
|
||||
final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
|
||||
final List<String> converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
|
||||
final List<String> binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
|
||||
|
||||
out.println("%s%s.val(null, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")", separator, DSL.class, paramTypeRef, converter, binding);
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s.val(null, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")%s", DSL.class, paramTypeRef, converter, binding, separator);
|
||||
});
|
||||
|
||||
out.println("});");
|
||||
}
|
||||
@ -5655,30 +5676,24 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
}
|
||||
else {
|
||||
String separator = "";
|
||||
|
||||
if (scala) {
|
||||
out.println();
|
||||
out.println("%soverride def getIndexes: %s[%s] = %s.asList[%s](", visibilityPublic(), List.class, Index.class, Arrays.class, Index.class);
|
||||
|
||||
for (IndexDefinition index : indexes) {
|
||||
out.print("%s", separator);
|
||||
forEach(indexes, "", ", ", (index, separator) -> {
|
||||
printCreateIndex(out, index);
|
||||
out.println();
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s", separator);
|
||||
});
|
||||
|
||||
out.println(")");
|
||||
}
|
||||
else if (kotlin) {
|
||||
out.println("%soverride fun getIndexes(): %s<%s> = listOf(", visibilityPublic(), out.ref(KLIST), Index.class);
|
||||
|
||||
for (IndexDefinition index : indexes) {
|
||||
out.print("%s", separator);
|
||||
forEach(indexes, "", ", ", (index, separator) -> {
|
||||
printCreateIndex(out, index);
|
||||
out.println();
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s", separator);
|
||||
});
|
||||
|
||||
out.println(")");
|
||||
}
|
||||
@ -5688,12 +5703,10 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.println("%s%s<%s> getIndexes() {", visibilityPublic(), List.class, Index.class);
|
||||
out.println("return %s.asList(", Arrays.class);
|
||||
|
||||
for (IndexDefinition index : indexes) {
|
||||
out.print("%s", separator);
|
||||
forEach(indexes, "", ", ", (index, separator) -> {
|
||||
printCreateIndex(out, index);
|
||||
out.println();
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s", separator);
|
||||
});
|
||||
|
||||
out.println(");");
|
||||
out.println("}");
|
||||
@ -5807,19 +5820,15 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
}
|
||||
else {
|
||||
String separator = " ";
|
||||
|
||||
if (scala) {
|
||||
out.println();
|
||||
out.println("%soverride def getUniqueKeys: %s[ %s[%s] ] = %s.asList[ %s[%s] ](",
|
||||
visibilityPublic(), List.class, UniqueKey.class, recordType, Arrays.class, UniqueKey.class, recordType);
|
||||
|
||||
for (UniqueKeyDefinition uniqueKey : uniqueKeys) {
|
||||
out.print("%s", separator);
|
||||
forEach(uniqueKeys, "", ", ", (uniqueKey, separator) -> {
|
||||
printCreateUniqueKey(out, uniqueKey);
|
||||
out.println();
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s", separator);
|
||||
});
|
||||
|
||||
out.println(")");
|
||||
}
|
||||
@ -5827,12 +5836,10 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.println("%soverride fun getUniqueKeys(): %s<%s<%s>> = listOf(",
|
||||
visibilityPublic(), out.ref(KLIST), UniqueKey.class, recordType);
|
||||
|
||||
for (UniqueKeyDefinition uniqueKey : uniqueKeys) {
|
||||
out.print("%s", separator);
|
||||
forEach(uniqueKeys, "", ", ", (uniqueKey, separator) -> {
|
||||
printCreateUniqueKey(out, uniqueKey);
|
||||
out.println();
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s", separator);
|
||||
});
|
||||
|
||||
out.println(")");
|
||||
}
|
||||
@ -5842,12 +5849,10 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.println("%s%s<%s<%s>> getUniqueKeys() {", visibilityPublic(), List.class, UniqueKey.class, recordType);
|
||||
out.println("return %s.asList(", Arrays.class);
|
||||
|
||||
for (UniqueKeyDefinition uniqueKey : uniqueKeys) {
|
||||
out.print("%s", separator);
|
||||
forEach(uniqueKeys, "", ", ", (uniqueKey, separator) -> {
|
||||
printCreateUniqueKey(out, uniqueKey);
|
||||
out.println();
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s", separator);
|
||||
});
|
||||
|
||||
out.println(");");
|
||||
out.println("}");
|
||||
@ -5949,11 +5954,9 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.println("return %s.asList(", Arrays.class);
|
||||
}
|
||||
|
||||
String separator = " ";
|
||||
for (CheckConstraintDefinition c : cc) {
|
||||
out.println("%s%s.createCheck(this, %s.name(\"%s\"), \"%s\", %s)", separator, Internal.class, DSL.class, escapeString(c.getName()), escapeString(c.getCheckClause()), c.enforced());
|
||||
separator = ", ";
|
||||
}
|
||||
forEach(cc, (c, separator) -> {
|
||||
out.println("%s.createCheck(this, %s.name(\"%s\"), \"%s\", %s)%s", Internal.class, DSL.class, escapeString(c.getName()), escapeString(c.getCheckClause()), c.enforced(), separator);
|
||||
});
|
||||
|
||||
if (scala || kotlin) {
|
||||
out.println(")");
|
||||
@ -6205,20 +6208,18 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.print("): %s = ", className);
|
||||
|
||||
out.print("Option(new %s(%s.name(\"%s\"), null, null, null, %s(", className, DSL.class, escapeString(table.getOutputName()), out.ref("scala.Array")).printlnIf(!parameters.isEmpty());
|
||||
String separator = " ";
|
||||
for (ParameterDefinition parameter : parameters) {
|
||||
|
||||
forEach(parameters, (parameter, separator) -> {
|
||||
final String paramArgName = getStrategy().getJavaMemberName(parameter);
|
||||
final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
|
||||
final List<String> converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
|
||||
final List<String> binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
|
||||
|
||||
if (parametersAsField)
|
||||
out.println("%s%s", separator, paramArgName);
|
||||
out.println("%s%s", paramArgName, separator);
|
||||
else
|
||||
out.println("%s%s.value(%s, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")", separator, DSL.class, paramArgName, paramTypeRef, converter, binding);
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s.value(%s, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")%s", DSL.class, paramArgName, paramTypeRef, converter, binding, separator);
|
||||
});
|
||||
|
||||
out.println("))).map(r => if (aliased()) r.as(getUnqualifiedName) else r).get");
|
||||
}
|
||||
@ -6227,20 +6228,17 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
printParameterDeclarations(out, parameters, parametersAsField, " ");
|
||||
out.print("): %s = %s(%s.name(\"%s\"), null, arrayOf(", className, className, DSL.class, escapeString(table.getOutputName()), Field.class).printlnIf(!parameters.isEmpty());
|
||||
|
||||
String separator = " ";
|
||||
for (ParameterDefinition parameter : parameters) {
|
||||
forEach(parameters, (parameter, separator) -> {
|
||||
final String paramArgName = getStrategy().getJavaMemberName(parameter);
|
||||
final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
|
||||
final List<String> converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
|
||||
final List<String> binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
|
||||
|
||||
if (parametersAsField)
|
||||
out.println("%s%s", separator, paramArgName);
|
||||
out.println("%s%s", paramArgName, separator);
|
||||
else
|
||||
out.println("%s%s.value(%s, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")", separator, DSL.class, paramArgName, paramTypeRef, converter, binding);
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s.value(%s, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")%s", DSL.class, paramArgName, paramTypeRef, converter, binding, separator);
|
||||
});
|
||||
|
||||
out.println(")).let { if (aliased()) it.`as`(unqualifiedName) else it }");
|
||||
}
|
||||
@ -6250,20 +6248,18 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.println(") {");
|
||||
|
||||
out.print("%s result = new %s(%s.name(\"%s\"), null, new %s[] {", className, className, DSL.class, escapeString(table.getOutputName()), Field.class).printlnIf(!parameters.isEmpty());
|
||||
String separator = " ";
|
||||
for (ParameterDefinition parameter : parameters) {
|
||||
|
||||
forEach(parameters, (parameter, separator) -> {
|
||||
final String paramArgName = getStrategy().getJavaMemberName(parameter);
|
||||
final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
|
||||
final List<String> converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
|
||||
final List<String> binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
|
||||
|
||||
if (parametersAsField)
|
||||
out.println("%s%s", separator, paramArgName);
|
||||
out.println("%s%s", paramArgName, separator);
|
||||
else
|
||||
out.println("%s%s.val(%s, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")", separator, DSL.class, paramArgName, paramTypeRef, converter, binding);
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
out.println("%s.val(%s, %s" + converterTemplateForTableValuedFunction(converter) + converterTemplateForTableValuedFunction(binding) + ")%s", DSL.class, paramArgName, paramTypeRef, converter, binding, separator);
|
||||
});
|
||||
|
||||
out.println("});");
|
||||
out.println();
|
||||
@ -7740,12 +7736,9 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
out.println("return %s.call(", functionIdentifier);
|
||||
}
|
||||
|
||||
String separator = " ";
|
||||
for (ParameterDefinition parameter : function.getParameters()) {
|
||||
out.println("%s%s", separator, getStrategy().getJavaMemberName(parameter));
|
||||
|
||||
separator = ", ";
|
||||
}
|
||||
forEach(function.getParameters(), (parameter, separator) -> {
|
||||
out.println("%s%s", getStrategy().getJavaMemberName(parameter), separator);
|
||||
});
|
||||
|
||||
if (scala || kotlin)
|
||||
out.println(")");
|
||||
@ -8331,6 +8324,18 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
private final <T> void forEach(Collection<T> list, BiConsumer<? super T, ? super String> definitionAndSeparator) {
|
||||
forEach(list, "", ",", definitionAndSeparator);
|
||||
}
|
||||
|
||||
private final <T> void forEach(Collection<T> list, String nonSeparator, String separator, BiConsumer<? super T, ? super String> definitionAndSeparator) {
|
||||
int size = list.size();
|
||||
int i = 0;
|
||||
|
||||
for (T d : list)
|
||||
definitionAndSeparator.accept(d, i++ < size - 1 ? separator : nonSeparator);
|
||||
}
|
||||
|
||||
protected String refExtendsNumberType(JavaWriter out, DataTypeDefinition type) {
|
||||
if (type.isGenericNumberType())
|
||||
return (scala ? "_ <: " : kotlin ? "out ": "? extends ") + out.ref(Number.class);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user