diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
index f5bd9011f9..91f1b99966 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
@@ -1522,7 +1522,7 @@ public class JavaGenerator extends AbstractGenerator {
if (column instanceof EmbeddableColumnDefinition)
column = ((EmbeddableColumnDefinition) column).getReferencingColumn();
- final String colTypeFull = getJavaType(column.getType(resolver()));
+ final String colTypeFull = getJavaType(column.getType(resolver(out)), out);
final String colType = out.ref(colTypeFull);
final String colIdentifier = out.ref(getStrategy().getFullJavaIdentifier(column), colRefSegments(column));
@@ -1581,7 +1581,7 @@ public class JavaGenerator extends AbstractGenerator {
for (int i = 1; i <= degree; i++) {
TypedElementDefinition> column = columns.get(i - 1);
- final String colTypeFull = getJavaType(column.getType(resolver()));
+ final String colTypeFull = getJavaType(column.getType(resolver(out)), out);
final String colType = out.ref(colTypeFull);
final String colGetter = getStrategy().getJavaGetterName(column, Mode.RECORD);
final String colMember = getStrategy().getJavaMemberName(column, Mode.POJO);
@@ -1612,7 +1612,7 @@ public class JavaGenerator extends AbstractGenerator {
for (int i = 1; i <= degree; i++) {
TypedElementDefinition> column = columns.get(i - 1);
- final String colTypeFull = getJavaType(column.getType(resolver()));
+ final String colTypeFull = getJavaType(column.getType(resolver(out)), out);
final String colType = out.ref(colTypeFull);
final String colGetter = getStrategy().getJavaGetterName(column, Mode.RECORD);
final String colMember = getStrategy().getJavaMemberName(column, Mode.POJO);
@@ -1643,7 +1643,7 @@ public class JavaGenerator extends AbstractGenerator {
for (int i = 1; i <= degree; i++) {
TypedElementDefinition> column = columns.get(i - 1);
- final String colTypeFull = getJavaType(column.getType(resolver()));
+ final String colTypeFull = getJavaType(column.getType(resolver(out)), out);
final String colType = out.ref(colTypeFull);
final String colSetter = getStrategy().getJavaSetterName(column, Mode.RECORD);
final String colMember = getStrategy().getJavaMemberName(column, Mode.POJO);
@@ -1684,7 +1684,7 @@ public class JavaGenerator extends AbstractGenerator {
for (int i = 1; i <= degree; i++) {
TypedElementDefinition> column = columns.get(i - 1);
- final String colType = out.ref(getJavaType(column.getType(resolver())));
+ final String colType = out.ref(getJavaType(column.getType(resolver(out)), out));
if (scala) {
arguments.add("value" + i + " : " + colType);
@@ -1823,7 +1823,7 @@ public class JavaGenerator extends AbstractGenerator {
final String columnMember = getStrategy().getJavaMemberName(column, Mode.DEFAULT);
final String type = column instanceof EmbeddableDefinition
? out.ref(getStrategy().getFullJavaClassName(column, Mode.RECORD))
- : out.ref(getJavaType(((TypedElementDefinition>) column).getType(resolver())));
+ : out.ref(getJavaType(((TypedElementDefinition>) column).getType(resolver(out)), out));
if (scala) {
arguments.add(columnMember + " : " + type);
@@ -1912,12 +1912,12 @@ public class JavaGenerator extends AbstractGenerator {
final String setterReturnType = generateFluentSetters() ? className : tokenVoid;
final String setter = getStrategy().getJavaSetterName(column, Mode.RECORD);
final String member = getStrategy().getJavaMemberName(column, Mode.POJO);
- final String typeFull = getJavaType(column.getType(resolver()));
+ final String typeFull = getJavaType(column.getType(resolver(out)), out);
final String type = out.ref(typeFull);
final String name = column.getQualifiedOutputName();
- final boolean isUDT = column.getType(resolver()).isUDT();
- final boolean isArray = column.getType(resolver()).isArray();
- final boolean isUDTArray = column.getType(resolver()).isArray() && database.getArray(column.getType(resolver()).getSchema(), column.getType(resolver()).getQualifiedUserType()).getElementType(resolver()).isUDT();
+ final boolean isUDT = column.getType(resolver(out)).isUDT();
+ final boolean isArray = column.getType(resolver(out)).isArray();
+ final boolean isUDTArray = column.getType(resolver(out)).isArray() && database.getArray(column.getType(resolver(out)).getSchema(), column.getType(resolver(out)).getQualifiedUserType()).getElementType(resolver(out)).isUDT();
boolean override = generateInterfaces() && !generateImmutableInterfaces() && !isUDT;
// We cannot have covariant setters for arrays because of type erasure
@@ -1956,9 +1956,9 @@ public class JavaGenerator extends AbstractGenerator {
// [#3117] Avoid covariant setters for UDTs when generating interfaces
if (generateInterfaces() && !generateImmutableInterfaces() && (isUDT || isArray)) {
- final String columnTypeFull = getJavaType(column.getType(resolver(Mode.RECORD)), Mode.RECORD);
+ final String columnTypeFull = getJavaType(column.getType(resolver(out, Mode.RECORD)), out, Mode.RECORD);
final String columnType = out.ref(columnTypeFull);
- final String columnTypeInterface = out.ref(getJavaType(column.getType(resolver(Mode.INTERFACE)), Mode.INTERFACE));
+ final String columnTypeInterface = out.ref(getJavaType(column.getType(resolver(out, Mode.INTERFACE)), out, Mode.INTERFACE));
if (!printDeprecationIfUnknownType(out, columnTypeFull))
out.javadoc("Setter for %s.[[before= ][%s]]", name, list(escapeEntities(comment(column))));
@@ -1994,9 +1994,9 @@ public class JavaGenerator extends AbstractGenerator {
out.println("set(%s, value.into(new %s()));", index, type);
}
else if (isArray) {
- final ArrayDefinition array = database.getArray(column.getType(resolver()).getSchema(), column.getType(resolver()).getQualifiedUserType());
- final String componentType = out.ref(getJavaType(array.getElementType(resolver(Mode.RECORD)), Mode.RECORD));
- final String componentTypeInterface = out.ref(getJavaType(array.getElementType(resolver(Mode.INTERFACE)), Mode.INTERFACE));
+ final ArrayDefinition array = database.getArray(column.getType(resolver(out)).getSchema(), column.getType(resolver(out)).getQualifiedUserType());
+ final String componentType = out.ref(getJavaType(array.getElementType(resolver(out, Mode.RECORD)), out, Mode.RECORD));
+ final String componentTypeInterface = out.ref(getJavaType(array.getElementType(resolver(out, Mode.INTERFACE)), out, Mode.INTERFACE));
out.println("else {");
out.println("%s a = new %s();", columnType, columnType);
@@ -2103,7 +2103,7 @@ public class JavaGenerator extends AbstractGenerator {
private final void generateRecordGetter0(TypedElementDefinition> column, int index, JavaWriter out) {
final String getter = getStrategy().getJavaGetterName(column, Mode.RECORD);
- final String typeFull = getJavaType(column.getType(resolver()));
+ final String typeFull = getJavaType(column.getType(resolver(out)), out);
final String type = out.ref(typeFull);
final String name = column.getQualifiedOutputName();
@@ -2165,7 +2165,7 @@ public class JavaGenerator extends AbstractGenerator {
String separator = " ";
for (EmbeddableColumnDefinition column : embeddable.getColumns()) {
- final String columnType = out.ref(getJavaType(column.getReferencingColumn().getType(resolver())));
+ final String columnType = out.ref(getJavaType(column.getReferencingColumn().getType(resolver(out)), out));
final int position = column.getReferencingColumnPosition() - 1;
if (scala)
@@ -2239,7 +2239,7 @@ public class JavaGenerator extends AbstractGenerator {
for (TypedElementDefinition> column : columns) {
result.append(separator);
- result.append(out.ref(getJavaType(column.getType(resolver()))));
+ result.append(out.ref(getJavaType(column.getType(resolver(out)), out)));
if (kotlin)
result.append("?");
@@ -2423,7 +2423,7 @@ public class JavaGenerator extends AbstractGenerator {
final String className = getStrategy().getJavaClassName(column.getContainer(), Mode.INTERFACE);
final String setterReturnType = generateFluentSetters() ? className : tokenVoid;
final String setter = getStrategy().getJavaSetterName(column, Mode.INTERFACE);
- final String typeFull = getJavaType(column.getType(resolver(Mode.INTERFACE)), Mode.INTERFACE);
+ final String typeFull = getJavaType(column.getType(resolver(out, Mode.INTERFACE)), out, Mode.INTERFACE);
final String type = out.ref(typeFull);
final String name = column.getQualifiedOutputName();
@@ -2482,7 +2482,7 @@ public class JavaGenerator extends AbstractGenerator {
// TODO: The Mode should be INTERFACE
final String member = getStrategy().getJavaMemberName(column, Mode.POJO);
final String getter = getStrategy().getJavaGetterName(column, Mode.INTERFACE);
- final String typeFull = getJavaType(column.getType(resolver(Mode.INTERFACE)), Mode.INTERFACE);
+ final String typeFull = getJavaType(column.getType(resolver(out, Mode.INTERFACE)), out, Mode.INTERFACE);
final String type = out.ref(typeFull);
final String name = column.getQualifiedOutputName();
@@ -2591,13 +2591,13 @@ public class JavaGenerator extends AbstractGenerator {
printRecordTypeMethod(out, udt);
for (AttributeDefinition attribute : udt.getAttributes()) {
- final String attrTypeFull = getJavaType(attribute.getType(resolver()));
+ final String attrTypeFull = getJavaType(attribute.getType(resolver(out)), out);
final String attrType = out.ref(attrTypeFull);
- final String attrTypeRef = getJavaTypeReference(attribute.getDatabase(), attribute.getType(resolver()), out);
+ final String attrTypeRef = getJavaTypeReference(attribute.getDatabase(), attribute.getType(resolver(out)), out);
final String attrId = out.ref(getStrategy().getJavaIdentifier(attribute), 2);
final String attrName = attribute.getName();
- final List converter = out.ref(list(attribute.getType(resolver()).getConverter()));
- final List binding = out.ref(list(attribute.getType(resolver()).getBinding()));
+ final List converter = out.ref(list(attribute.getType(resolver(out)).getConverter()));
+ final List binding = out.ref(list(attribute.getType(resolver(out)).getBinding()));
if (scala) {
printDeprecationIfUnknownType(out, attrTypeFull);
@@ -2849,9 +2849,9 @@ public class JavaGenerator extends AbstractGenerator {
for (DomainDefinition domain : database.getDomains(schema)) {
final String id = getStrategy().getJavaIdentifier(domain);
- final String domainTypeFull = getJavaType(domain.getType(resolver()));
+ final String domainTypeFull = getJavaType(domain.getType(resolver(out)), out);
final String domainType = out.ref(domainTypeFull);
- final String domainTypeRef = getJavaTypeReference(domain.getDatabase(), domain.getType(resolver()), out);
+ final String domainTypeRef = getJavaTypeReference(domain.getDatabase(), domain.getType(resolver(out)), out);
out.javadoc("The domain %s.", domain.getQualifiedOutputName());
@@ -3571,14 +3571,14 @@ public class JavaGenerator extends AbstractGenerator {
List keyColumns = key.getKeyColumns();
if (keyColumns.size() == 1) {
- tType = getJavaType(keyColumns.get(0).getType(resolver()), Mode.POJO);
+ tType = getJavaType(keyColumns.get(0).getType(resolver(out)), out, Mode.POJO);
}
else if (keyColumns.size() <= Constants.MAX_ROW_DEGREE) {
String generics = "";
String separator = "";
for (ColumnDefinition column : keyColumns) {
- generics += separator + out.ref(getJavaType(column.getType(resolver())));
+ generics += separator + out.ref(getJavaType(column.getType(resolver(out)), out));
separator = ", ";
}
@@ -3692,7 +3692,7 @@ public class JavaGenerator extends AbstractGenerator {
for (ColumnDefinition column : table.getColumns()) {
final String colName = column.getOutputName();
final String colClass = getStrategy().getJavaClassName(column);
- final String colTypeFull = getJavaType(column.getType(resolver()));
+ final String colTypeFull = getJavaType(column.getType(resolver(out)), out);
final String colType = out.ref(colTypeFull);
final String colIdentifier = out.ref(getStrategy().getFullJavaIdentifier(column), colRefSegments(column));
@@ -3852,7 +3852,7 @@ public class JavaGenerator extends AbstractGenerator {
int maxLength = 0;
for (TypedElementDefinition> column : getTypedElements(tableUdtOrEmbeddable))
- maxLength = Math.max(maxLength, out.ref(getJavaType(column.getType(resolver(Mode.POJO)), Mode.POJO)).length());
+ maxLength = Math.max(maxLength, out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)).length());
if (scala) {
out.println("%sclass %s(", (generatePojosAsScalaCaseClasses() ? "case " : ""), className);
@@ -3863,7 +3863,7 @@ public class JavaGenerator extends AbstractGenerator {
separator,
generateImmutablePojos() ? "val" : "var",
getStrategy().getJavaMemberName(column, Mode.POJO),
- out.ref(getJavaType(column.getType(resolver(Mode.POJO)), Mode.POJO)));
+ out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)));
separator = ", ";
}
@@ -3882,7 +3882,7 @@ public class JavaGenerator extends AbstractGenerator {
generateInterfaces() ? "override " : "",
generateImmutablePojos() ? "val" : "var",
member,
- out.ref(getJavaType(column.getType(resolver(Mode.POJO)), Mode.POJO)));
+ out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)));
separator = ", ";
}
@@ -3900,7 +3900,7 @@ public class JavaGenerator extends AbstractGenerator {
for (TypedElementDefinition> column : getTypedElements(tableUdtOrEmbeddable)) {
out.println("private %s%s %s;",
generateImmutablePojos() ? "final " : "",
- StringUtils.rightPad(out.ref(getJavaType(column.getType(resolver(Mode.POJO)), Mode.POJO)), maxLength),
+ StringUtils.rightPad(out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)), maxLength),
getStrategy().getJavaMemberName(column, Mode.POJO));
}
}
@@ -3977,7 +3977,7 @@ public class JavaGenerator extends AbstractGenerator {
int maxLength = 0;
for (TypedElementDefinition> column : getTypedElements(tableOrUDT)) {
- maxLength = Math.max(maxLength, out.ref(getJavaType(column.getType(resolver(Mode.POJO)), Mode.POJO)).length());
+ maxLength = Math.max(maxLength, out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)).length());
properties.add("\"" + escapeString(getStrategy().getJavaMemberName(column, Mode.POJO)) + "\"");
}
@@ -4002,7 +4002,7 @@ public class JavaGenerator extends AbstractGenerator {
out.println(separator1);
out.print("[[before=@][after= ][%s]]%s %s",
list(nullableAnnotation),
- StringUtils.rightPad(out.ref(getJavaType(column.getType(resolver(Mode.POJO)), Mode.POJO)), maxLength),
+ StringUtils.rightPad(out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)), maxLength),
getStrategy().getJavaMemberName(column, Mode.POJO));
separator1 = ",";
}
@@ -4084,7 +4084,7 @@ public class JavaGenerator extends AbstractGenerator {
// Avoid ambiguities between a single-T-value constructor
// and the copy constructor
if (size == 1)
- nulls.add("null: " + out.ref(getJavaType(column.getType(resolver(Mode.POJO)), Mode.POJO)));
+ nulls.add("null: " + out.ref(getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO)));
else
nulls.add("null");
@@ -4159,7 +4159,7 @@ public class JavaGenerator extends AbstractGenerator {
}
private final void generatePojoGetter0(TypedElementDefinition> column, @SuppressWarnings("unused") int index, JavaWriter out) {
- final String columnTypeFull = getJavaType(column.getType(resolver(Mode.POJO)), Mode.POJO);
+ final String columnTypeFull = getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO);
final String columnType = out.ref(columnTypeFull);
final String columnGetter = getStrategy().getJavaGetterName(column, Mode.POJO);
final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
@@ -4255,13 +4255,13 @@ public class JavaGenerator extends AbstractGenerator {
private final void generatePojoSetter0(TypedElementDefinition> column, @SuppressWarnings("unused") int index, JavaWriter out) {
final String className = getStrategy().getJavaClassName(column.getContainer(), Mode.POJO);
- final String columnTypeFull = getJavaType(column.getType(resolver(Mode.POJO)), Mode.POJO);
+ final String columnTypeFull = getJavaType(column.getType(resolver(out, Mode.POJO)), out, Mode.POJO);
final String columnType = out.ref(columnTypeFull);
final String columnSetterReturnType = generateFluentSetters() ? className : tokenVoid;
final String columnSetter = getStrategy().getJavaSetterName(column, Mode.POJO);
final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
- final boolean isUDT = column.getType(resolver()).isUDT();
- final boolean isUDTArray = column.getType(resolver()).isArray() && database.getArray(column.getType(resolver()).getSchema(), column.getType(resolver()).getQualifiedUserType()).getElementType(resolver()).isUDT();
+ final boolean isUDT = column.getType(resolver(out)).isUDT();
+ final boolean isUDTArray = column.getType(resolver(out)).isArray() && database.getArray(column.getType(resolver(out)).getSchema(), column.getType(resolver(out)).getQualifiedUserType()).getElementType(resolver(out)).isUDT();
final String name = column.getQualifiedOutputName();
// We cannot have covariant setters for arrays because of type erasure
@@ -4294,7 +4294,7 @@ public class JavaGenerator extends AbstractGenerator {
// [#3117] To avoid covariant setters on POJOs, we need to generate two setter overloads
if (generateInterfaces() && (isUDT || isUDTArray)) {
- final String columnTypeInterface = out.ref(getJavaType(column.getType(resolver(Mode.INTERFACE)), Mode.INTERFACE));
+ final String columnTypeInterface = out.ref(getJavaType(column.getType(resolver(out, Mode.INTERFACE)), out, Mode.INTERFACE));
out.println();
@@ -4323,9 +4323,9 @@ public class JavaGenerator extends AbstractGenerator {
out.println("this.%s = %s.into(new %s());", columnMember, columnMember, columnType);
}
else if (isUDTArray) {
- final ArrayDefinition array = database.getArray(column.getType(resolver()).getSchema(), column.getType(resolver()).getQualifiedUserType());
- final String componentType = out.ref(getJavaType(array.getElementType(resolver(Mode.POJO)), Mode.POJO));
- final String componentTypeInterface = out.ref(getJavaType(array.getElementType(resolver(Mode.INTERFACE)), Mode.INTERFACE));
+ final ArrayDefinition array = database.getArray(column.getType(resolver(out)).getSchema(), column.getType(resolver(out)).getQualifiedUserType());
+ final String componentType = out.ref(getJavaType(array.getElementType(resolver(out, Mode.POJO)), out, Mode.POJO));
+ final String componentTypeInterface = out.ref(getJavaType(array.getElementType(resolver(out, Mode.INTERFACE)), out, Mode.INTERFACE));
out.println("else {");
out.println("this.%s = new %s();", columnMember, ArrayList.class);
@@ -4374,7 +4374,7 @@ public class JavaGenerator extends AbstractGenerator {
out.println("return false");
out.println("}");
- if (getJavaType(column.getType(resolver())).endsWith("[]"))
+ if (getJavaType(column.getType(resolver(out)), out).endsWith("[]"))
out.println("else if (!%s.equals(%s, other.%s))", Arrays.class, columnMember, columnMember);
else
out.println("else if (!%s.equals(other.%s))", columnMember, columnMember);
@@ -4404,7 +4404,7 @@ public class JavaGenerator extends AbstractGenerator {
out.println("return false");
out.println("}");
- if (getJavaType(column.getType(resolver())).endsWith("[]"))
+ if (getJavaType(column.getType(resolver(out)), out).endsWith("[]"))
out.println("else if (!%s.equals(%s, other.%s))", Arrays.class, columnMember, columnMember);
else
out.println("else if (%s != other.%s)", columnMember, columnMember);
@@ -4435,7 +4435,7 @@ public class JavaGenerator extends AbstractGenerator {
out.println("return false;");
out.println("}");
- if (getJavaType(column.getType(resolver())).endsWith("[]"))
+ if (getJavaType(column.getType(resolver(out)), out).endsWith("[]"))
out.println("else if (!%s.equals(%s, other.%s))", Arrays.class, columnMember, columnMember);
else
out.println("else if (!%s.equals(other.%s))", columnMember, columnMember);
@@ -4457,7 +4457,7 @@ public class JavaGenerator extends AbstractGenerator {
for (TypedElementDefinition> column : getTypedElements(tableOrUDT)) {
final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
- if (getJavaType(column.getType(resolver())).endsWith("[]"))
+ if (getJavaType(column.getType(resolver(out)), out).endsWith("[]"))
out.println("result = prime * result + (if (this.%s == null) 0 else %s.hashCode(this.%s))", columnMember, Arrays.class, columnMember);
else
out.println("result = prime * result + (if (this.%s == null) 0 else this.%s.hashCode())", columnMember, columnMember);
@@ -4474,7 +4474,7 @@ public class JavaGenerator extends AbstractGenerator {
for (TypedElementDefinition> column : getTypedElements(tableOrUDT)) {
final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
- if (getJavaType(column.getType(resolver())).endsWith("[]"))
+ if (getJavaType(column.getType(resolver(out)), out).endsWith("[]"))
out.println("result = prime * result + (if (this.%s === null) 0 else %s.hashCode(this.%s))", columnMember, Arrays.class, columnMember);
else
out.println("result = prime * result + (if (this.%s === null) 0 else this.%s.hashCode())", columnMember, columnMember);
@@ -4492,7 +4492,7 @@ public class JavaGenerator extends AbstractGenerator {
for (TypedElementDefinition> column : getTypedElements(tableOrUDT)) {
final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
- if (getJavaType(column.getType(resolver())).endsWith("[]"))
+ if (getJavaType(column.getType(resolver(out)), out).endsWith("[]"))
out.println("result = prime * result + ((this.%s == null) ? 0 : %s.hashCode(this.%s));", columnMember, Arrays.class, columnMember);
else
out.println("result = prime * result + ((this.%s == null) ? 0 : this.%s.hashCode());", columnMember, columnMember);
@@ -4524,7 +4524,7 @@ public class JavaGenerator extends AbstractGenerator {
String separator = "";
for (TypedElementDefinition> column : getTypedElements(tableOrUDT)) {
final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
- final String columnType = getJavaType(column.getType(resolver()));
+ final String columnType = getJavaType(column.getType(resolver(out)), out);
if (columnType.equals("scala.Array[scala.Byte]"))
out.println("sb%s.append(\"[binary...]\")", separator);
@@ -4548,7 +4548,7 @@ public class JavaGenerator extends AbstractGenerator {
String separator = "";
for (TypedElementDefinition> column : getTypedElements(tableOrUDT)) {
final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
- final String columnType = getJavaType(column.getType(resolver()));
+ final String columnType = getJavaType(column.getType(resolver(out)), out);
final boolean array = columnType.endsWith("[]");
if (array && columnType.equals("kotlin.ByteArray"))
@@ -4575,7 +4575,7 @@ public class JavaGenerator extends AbstractGenerator {
String separator = "";
for (TypedElementDefinition> column : getTypedElements(tableOrUDT)) {
final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
- final String columnType = getJavaType(column.getType(resolver()));
+ final String columnType = getJavaType(column.getType(resolver(out)), out);
final boolean array = columnType.endsWith("[]");
if (array && columnType.equals("byte[]"))
@@ -4746,13 +4746,13 @@ public class JavaGenerator extends AbstractGenerator {
printRecordTypeMethod(out, table);
for (ColumnDefinition column : table.getColumns()) {
- final String columnTypeFull = getJavaType(column.getType(resolver()));
+ final String columnTypeFull = getJavaType(column.getType(resolver(out)), out);
final String columnType = out.ref(columnTypeFull);
- final String columnTypeRef = getJavaTypeReference(column.getDatabase(), column.getType(resolver()), out);
+ final String columnTypeRef = getJavaTypeReference(column.getDatabase(), column.getType(resolver(out)), out);
final String columnId = out.ref(getStrategy().getJavaIdentifier(column), colRefSegments(column));
final String columnName = column.getName();
- final List converter = out.ref(list(column.getType(resolver()).getConverter()));
- final List binding = out.ref(list(column.getType(resolver()).getBinding()));
+ final List converter = out.ref(list(column.getType(resolver(out)).getConverter()));
+ final List binding = out.ref(list(column.getType(resolver(out)).getBinding()));
final String columnVisibility =
@@ -5010,7 +5010,7 @@ public class JavaGenerator extends AbstractGenerator {
// The identity column
if (identity != null) {
- final String identityTypeFull = getJavaType(identity.getColumn().getType(resolver()));
+ final String identityTypeFull = getJavaType(identity.getColumn().getType(resolver(out)), out);
final String identityType = out.ref(identityTypeFull);
if (scala) {
@@ -5233,7 +5233,7 @@ public class JavaGenerator extends AbstractGenerator {
if ((p.matcher(column.getName()).matches() ||
p.matcher(column.getQualifiedName()).matches())) {
- final String columnTypeFull = getJavaType(column.getType(resolver()));
+ final String columnTypeFull = getJavaType(column.getType(resolver(out)), out);
final String columnType = out.ref(columnTypeFull);
final String columnId = getStrategy().getJavaIdentifier(column);
@@ -5269,7 +5269,7 @@ public class JavaGenerator extends AbstractGenerator {
if ((p.matcher(column.getName()).matches() ||
p.matcher(column.getQualifiedName()).matches())) {
- final String columnTypeFull = getJavaType(column.getType(resolver()));
+ final String columnTypeFull = getJavaType(column.getType(resolver(out)), out);
final String columnType = out.ref(columnTypeFull);
final String columnId = getStrategy().getJavaIdentifier(column);
@@ -5456,9 +5456,9 @@ public class JavaGenerator extends AbstractGenerator {
String separator = " ";
for (ParameterDefinition parameter : parameters) {
final String paramArgName = getStrategy().getJavaMemberName(parameter);
- final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver()), out);
- final List converter = out.ref(list(parameter.getType(resolver()).getConverter()));
- final List binding = out.ref(list(parameter.getType(resolver()).getBinding()));
+ final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
+ final List converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
+ final List binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
out.print(separator);
@@ -5480,9 +5480,9 @@ public class JavaGenerator extends AbstractGenerator {
String separator = " ";
for (ParameterDefinition parameter : parameters) {
final String paramArgName = getStrategy().getJavaMemberName(parameter);
- final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver()), out);
- final List converter = out.ref(list(parameter.getType(resolver()).getConverter()));
- final List binding = out.ref(list(parameter.getType(resolver()).getBinding()));
+ final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
+ final List converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
+ final List binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
if (parametersAsField)
out.println("%s%s", separator, paramArgName);
@@ -5503,9 +5503,9 @@ public class JavaGenerator extends AbstractGenerator {
String separator = " ";
for (ParameterDefinition parameter : parameters) {
final String paramArgName = getStrategy().getJavaMemberName(parameter);
- final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver()), out);
- final List converter = out.ref(list(parameter.getType(resolver()).getConverter()));
- final List binding = out.ref(list(parameter.getType(resolver()).getBinding()));
+ final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
+ final List converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
+ final List binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
out.print(separator);
@@ -5633,7 +5633,15 @@ public class JavaGenerator extends AbstractGenerator {
throw new IllegalArgumentException();
switch (GenerationUtil.expressionType(converter.get(0))) {
case CONSTRUCTOR_REFERENCE:
- return "[[before=, ][new %s()]]";
+ switch (language) {
+ case KOTLIN:
+ return "[[before=, ][%s()]]";
+
+ case JAVA:
+ case SCALA:
+ default:
+ return "[[before=, ][new %s()]]";
+ }
case EXPRESSION:
return "[[before=, ][%s]]";
default:
@@ -5648,7 +5656,15 @@ public class JavaGenerator extends AbstractGenerator {
throw new IllegalArgumentException();
switch (GenerationUtil.expressionType(converter.get(0))) {
case CONSTRUCTOR_REFERENCE:
- return "[[before=.asConvertedDataType(][after=)][new %s()]]";
+ switch (language) {
+ case KOTLIN:
+ return "[[before=.asConvertedDataType(][after=)][%s()]]";
+
+ case JAVA:
+ case SCALA:
+ default:
+ return "[[before=.asConvertedDataType(][after=)][new %s()]]";
+ }
case EXPRESSION:
return "[[before=.asConvertedDataType(][after=)][%s]]";
default:
@@ -5715,13 +5731,13 @@ public class JavaGenerator extends AbstractGenerator {
boolean qualifySequenceClassReferences = containsConflictingDefinition(schema, database.getSequences(schema));
for (SequenceDefinition sequence : database.getSequences(schema)) {
- final String seqTypeFull = getJavaType(sequence.getType(resolver()));
+ final String seqTypeFull = getJavaType(sequence.getType(resolver(out)), out);
final String seqType = out.ref(seqTypeFull);
final String seqId = getStrategy().getJavaIdentifier(sequence);
final String seqName = sequence.getOutputName();
final String schemaId = qualifySequenceClassReferences ? getStrategy().getFullJavaIdentifier(schema)
: out.ref(getStrategy().getFullJavaIdentifier(schema), 2);
- final String typeRef = getJavaTypeReference(sequence.getDatabase(), sequence.getType(resolver()), out);
+ final String typeRef = getJavaTypeReference(sequence.getDatabase(), sequence.getType(resolver(out)), out);
if (!printDeprecationIfUnknownType(out, seqTypeFull))
out.javadoc("The sequence %s", sequence.getQualifiedOutputName());
@@ -6388,21 +6404,21 @@ public class JavaGenerator extends AbstractGenerator {
}
String nullable = "";
- if (!column.getType(resolver()).isNullable())
+ if (!column.getType(resolver(out)).isNullable())
nullable = ", nullable = false";
String length = "";
String precision = "";
String scale = "";
- if (column.getType(resolver()).getLength() > 0) {
- length = ", length = " + column.getType(resolver()).getLength();
+ if (column.getType(resolver(out)).getLength() > 0) {
+ length = ", length = " + column.getType(resolver(out)).getLength();
}
- else if (column.getType(resolver()).getPrecision() > 0) {
- precision = ", precision = " + column.getType(resolver()).getPrecision();
+ else if (column.getType(resolver(out)).getPrecision() > 0) {
+ precision = ", precision = " + column.getType(resolver(out)).getPrecision();
- if (column.getType(resolver()).getScale() > 0) {
- scale = ", scale = " + column.getType(resolver()).getScale();
+ if (column.getType(resolver(out)).getScale() > 0) {
+ scale = ", scale = " + column.getType(resolver(out)).getScale();
}
}
@@ -6434,15 +6450,15 @@ public class JavaGenerator extends AbstractGenerator {
private void printValidationAnnotation(JavaWriter out, TypedElementDefinition> column) {
if (generateValidationAnnotations()) {
- DataTypeDefinition type = column.getType(resolver());
+ DataTypeDefinition type = column.getType(resolver(out));
// [#5128] defaulted columns are nullable in Java
- if (!column.getType(resolver()).isNullable() &&
- !column.getType(resolver()).isDefaulted() &&
- !column.getType(resolver()).isIdentity())
+ if (!column.getType(resolver(out)).isNullable() &&
+ !column.getType(resolver(out)).isDefaulted() &&
+ !column.getType(resolver(out)).isIdentity())
out.println("@%s", out.ref("javax.validation.constraints.NotNull"));
- String javaType = getJavaType(type);
+ String javaType = getJavaType(type, out);
if ("java.lang.String".equals(javaType) || "byte[]".equals(javaType)) {
int length = type.getLength();
@@ -6487,7 +6503,7 @@ public class JavaGenerator extends AbstractGenerator {
private boolean printDeprecationIfUnknownTypes(JavaWriter out, Collection extends ParameterDefinition> params) {
for (ParameterDefinition param : params)
- if (printDeprecationIfUnknownType(out, getJavaType(param.getType(resolver()))))
+ if (printDeprecationIfUnknownType(out, getJavaType(param.getType(resolver(out)), out)))
return true;
return false;
@@ -6520,20 +6536,20 @@ public class JavaGenerator extends AbstractGenerator {
final String className = getStrategy().getJavaClassName(routine);
final String returnTypeFull = (routine.getReturnValue() == null)
? Void.class.getName()
- : getJavaType(routine.getReturnType(resolver()));
+ : getJavaType(routine.getReturnType(resolver(out)), out);
final String returnType = (routine.getReturnValue() == null)
? Void.class.getName()
: out.ref(returnTypeFull);
final List returnTypeRef = list((routine.getReturnValue() != null)
- ? getJavaTypeReference(database, routine.getReturnType(resolver()), out)
+ ? getJavaTypeReference(database, routine.getReturnType(resolver(out)), out)
: null);
final List returnConverter = out.ref(list(
(routine.getReturnValue() != null)
- ? routine.getReturnType(resolver()).getConverter()
+ ? routine.getReturnType(resolver(out)).getConverter()
: null));
final List returnBinding = out.ref(list(
(routine.getReturnValue() != null)
- ? routine.getReturnType(resolver()).getBinding()
+ ? routine.getReturnType(resolver(out)).getBinding()
: null));
final List interfaces = out.ref(getStrategy().getJavaClassImplements(routine, Mode.DEFAULT));
@@ -6545,15 +6561,15 @@ public class JavaGenerator extends AbstractGenerator {
if (scala) {
out.println("object %s {", className);
for (ParameterDefinition parameter : routine.getAllParameters()) {
- final String paramTypeFull = getJavaType(parameter.getType(resolver()));
+ final String paramTypeFull = getJavaType(parameter.getType(resolver(out)), out);
final String paramType = out.ref(paramTypeFull);
- final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver()), out);
+ final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
final String paramId = out.ref(getStrategy().getJavaIdentifier(parameter), 2);
final String paramName = parameter.getName();
final String isDefaulted = parameter.isDefaulted() ? "true" : "false";
final String isUnnamed = parameter.isUnnamed() ? "true" : "false";
- final List converter = out.ref(list(parameter.getType(resolver()).getConverter()));
- final List binding = out.ref(list(parameter.getType(resolver()).getBinding()));
+ final List converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
+ final List binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
if (!printDeprecationIfUnknownType(out, paramTypeFull))
out.javadoc("The parameter %s.[[before= ][%s]]", parameter.getQualifiedOutputName(), list(escapeEntities(comment(parameter))));
@@ -6590,15 +6606,15 @@ public class JavaGenerator extends AbstractGenerator {
out.println("companion object {");
for (ParameterDefinition parameter : routine.getAllParameters()) {
- final String paramTypeFull = getJavaType(parameter.getType(resolver()));
+ final String paramTypeFull = getJavaType(parameter.getType(resolver(out)), out);
final String paramType = out.ref(paramTypeFull);
- final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver()), out);
+ final String paramTypeRef = getJavaTypeReference(parameter.getDatabase(), parameter.getType(resolver(out)), out);
final String paramId = getStrategy().getJavaIdentifier(parameter);
final String paramName = parameter.getName();
final String isDefaulted = parameter.isDefaulted() ? "true" : "false";
final String isUnnamed = parameter.isUnnamed() ? "true" : "false";
- final List converter = out.ref(list(parameter.getType(resolver()).getConverter()));
- final List binding = out.ref(list(parameter.getType(resolver()).getBinding()));
+ final List converter = out.ref(list(parameter.getType(resolver(out)).getConverter()));
+ final List binding = out.ref(list(parameter.getType(resolver(out)).getBinding()));
if (!printDeprecationIfUnknownType(out, paramTypeFull))
out.javadoc("The parameter %s.[[before= ][%s]]", parameter.getQualifiedOutputName(), list(escapeEntities(comment(parameter))));
@@ -6718,8 +6734,8 @@ public class JavaGenerator extends AbstractGenerator {
for (ParameterDefinition parameter : routine.getInParameters()) {
final String setterReturnType = generateFluentSetters() ? className : tokenVoid;
final String setter = getStrategy().getJavaSetterName(parameter, Mode.DEFAULT);
- final String numberValue = parameter.getType(resolver()).isGenericNumberType() ? "Number" : "Value";
- final String numberField = parameter.getType(resolver()).isGenericNumberType() ? "Number" : "Field";
+ final String numberValue = parameter.getType(resolver(out)).isGenericNumberType() ? "Number" : "Value";
+ final String numberField = parameter.getType(resolver(out)).isGenericNumberType() ? "Number" : "Field";
final String paramId = getStrategy().getJavaIdentifier(parameter);
final String paramName = "value".equals(paramId) ? "value_" : "value";
@@ -6727,14 +6743,14 @@ public class JavaGenerator extends AbstractGenerator {
if (scala) {
out.println("def %s(%s: %s) : Unit = set%s(%s.%s, %s)",
- setter, paramName, refNumberType(out, parameter.getType(resolver())), numberValue, className, paramId, paramName);
+ setter, paramName, refNumberType(out, parameter.getType(resolver(out))), numberValue, className, paramId, paramName);
}
else if (kotlin) {
out.println("fun %s(%s: %s?) = set%s(%s, %s)",
- setter, paramName, refNumberType(out, parameter.getType(resolver())), numberValue, paramId, paramName);
+ setter, paramName, refNumberType(out, parameter.getType(resolver(out))), numberValue, paramId, paramName);
}
else {
- out.println("public void %s(%s %s) {", setter, varargsIfArray(refNumberType(out, parameter.getType(resolver()))), paramName);
+ out.println("public void %s(%s %s) {", setter, varargsIfArray(refNumberType(out, parameter.getType(resolver(out)))), paramName);
out.println("set%s(%s, %s);", numberValue, paramId, paramName);
out.println("}");
}
@@ -6743,7 +6759,7 @@ public class JavaGenerator extends AbstractGenerator {
out.javadoc("Set the %s parameter to the function to be used with a {@link org.jooq.Select} statement", parameter.getOutputName());
if (scala) {
- out.println("def %s(field: %s[%s]): %s = {", setter, Field.class, refExtendsNumberType(out, parameter.getType(resolver())), setterReturnType);
+ out.println("def %s(field: %s[%s]): %s = {", setter, Field.class, refExtendsNumberType(out, parameter.getType(resolver(out))), setterReturnType);
out.println("set%s(%s.%s, field)", numberField, className, paramId);
if (generateFluentSetters())
@@ -6752,7 +6768,7 @@ public class JavaGenerator extends AbstractGenerator {
out.println("}");
}
else if (kotlin) {
- out.println("fun %s(field: %s<%s?>): %s {", setter, Field.class, refExtendsNumberType(out, parameter.getType(resolver())), setterReturnType);
+ out.println("fun %s(field: %s<%s?>): %s {", setter, Field.class, refExtendsNumberType(out, parameter.getType(resolver(out))), setterReturnType);
out.println("set%s(%s, field)", numberField, paramId);
if (generateFluentSetters())
@@ -6761,7 +6777,7 @@ public class JavaGenerator extends AbstractGenerator {
out.println("}");
}
else {
- out.println("public %s %s(%s<%s> field) {", setterReturnType, setter, Field.class, refExtendsNumberType(out, parameter.getType(resolver())));
+ out.println("public %s %s(%s<%s> field) {", setterReturnType, setter, Field.class, refExtendsNumberType(out, parameter.getType(resolver(out))));
out.println("set%s(%s, field);", numberField, paramId);
if (generateFluentSetters())
@@ -6778,7 +6794,7 @@ public class JavaGenerator extends AbstractGenerator {
if (isOutParameter && !isReturnValue) {
final String paramName = parameter.getOutputName();
- final String paramTypeFull = getJavaType(parameter.getType(resolver()));
+ final String paramTypeFull = getJavaType(parameter.getType(resolver(out)), out);
final String paramType = out.ref(paramTypeFull);
final String paramGetter = getStrategy().getJavaGetterName(parameter, Mode.DEFAULT);
final String paramId = getStrategy().getJavaIdentifier(parameter);
@@ -6833,7 +6849,7 @@ public class JavaGenerator extends AbstractGenerator {
if (parametersAsField && function.getInParameters().isEmpty())
return;
- final String functionTypeFull = getJavaType(function.getReturnType(resolver()));
+ final String functionTypeFull = getJavaType(function.getReturnType(resolver(out)), out);
final String functionType = out.ref(functionTypeFull);
final String className = out.ref(getStrategy().getFullJavaClassName(function));
final String localVar = disambiguateJavaMemberName(function.getInParameters(), "f");
@@ -6955,21 +6971,21 @@ public class JavaGenerator extends AbstractGenerator {
if (scala) {
if (parametersAsField)
- out.println("%s%s: %s[%s]", separator, memberName, Field.class, refExtendsNumberType(out, parameter.getType(resolver())));
+ out.println("%s%s: %s[%s]", separator, memberName, Field.class, refExtendsNumberType(out, parameter.getType(resolver(out))));
else
- out.println("%s%s: %s", separator, memberName, refNumberType(out, parameter.getType(resolver())));
+ out.println("%s%s: %s", separator, memberName, refNumberType(out, parameter.getType(resolver(out))));
}
else if (kotlin) {
if (parametersAsField)
- out.println("%s%s: %s<%s?>", separator, memberName, Field.class, refExtendsNumberType(out, parameter.getType(resolver())));
+ out.println("%s%s: %s<%s?>", separator, memberName, Field.class, refExtendsNumberType(out, parameter.getType(resolver(out))));
else
- out.println("%s%s: %s?", separator, memberName, refNumberType(out, parameter.getType(resolver())));
+ out.println("%s%s: %s?", separator, memberName, refNumberType(out, parameter.getType(resolver(out))));
}
else {
if (parametersAsField)
- out.println("%s%s<%s> %s", separator, Field.class, refExtendsNumberType(out, parameter.getType(resolver())), memberName);
+ out.println("%s%s<%s> %s", separator, Field.class, refExtendsNumberType(out, parameter.getType(resolver(out))), memberName);
else
- out.println("%s%s %s", separator, refNumberType(out, parameter.getType(resolver())), memberName);
+ out.println("%s%s %s", separator, refNumberType(out, parameter.getType(resolver(out))), memberName);
}
separator = ", ";
@@ -7002,7 +7018,7 @@ public class JavaGenerator extends AbstractGenerator {
final String className = out.ref(getStrategy().getFullJavaClassName(function));
final String functionName = function.getQualifiedOutputName();
- final String functionTypeFull = getJavaType(function.getReturnType(resolver()));
+ final String functionTypeFull = getJavaType(function.getReturnType(resolver(out)), out);
final String functionType = out.ref(functionTypeFull);
final String methodName = getStrategy().getJavaMethodName(function, Mode.DEFAULT);
@@ -7037,7 +7053,7 @@ public class JavaGenerator extends AbstractGenerator {
if (instance && parameter.equals(function.getInParameters().get(0)))
continue;
- final String paramType = refNumberType(out, parameter.getType(resolver()));
+ final String paramType = refNumberType(out, parameter.getType(resolver(out)));
final String paramMember = getStrategy().getJavaMemberName(parameter);
if (scala)
@@ -7100,7 +7116,7 @@ public class JavaGenerator extends AbstractGenerator {
final String localVar = disambiguateJavaMemberName(procedure.getInParameters(), "p");
final List outParams = list(procedure.getReturnValue(), procedure.getOutParameters());
final String methodName = getStrategy().getJavaMethodName(procedure, Mode.DEFAULT);
- final String firstOutParamType = outParams.size() == 1 ? out.ref(getJavaType(outParams.get(0).getType(resolver()))) : "";
+ final String firstOutParamType = outParams.size() == 1 ? out.ref(getJavaType(outParams.get(0).getType(resolver(out)), out)) : "";
if (!printDeprecationIfUnknownTypes(out, procedure.getAllParameters()))
out.javadoc("Call %s", procedure.getQualifiedOutputName());
@@ -7134,7 +7150,7 @@ public class JavaGenerator extends AbstractGenerator {
continue;
final String memberName = getStrategy().getJavaMemberName(parameter);
- final String typeName = refNumberType(out, parameter.getType(resolver()));
+ final String typeName = refNumberType(out, parameter.getType(resolver(out)));
if (scala)
out.println("%s%s: %s", separator, memberName, typeName);
@@ -7178,13 +7194,13 @@ public class JavaGenerator extends AbstractGenerator {
final String getter = parameter == procedure.getReturnValue()
? "getReturnValue"
: getStrategy().getJavaGetterName(parameter, Mode.DEFAULT);
- final boolean isUDT = parameter.getType(resolver()).isUDT();
+ final boolean isUDT = parameter.getType(resolver(out)).isUDT();
if (instance) {
// [#3117] Avoid funny call-site ambiguity if this is a UDT that is implemented by an interface
if (generateInterfaces() && isUDT) {
- final String columnTypeInterface = out.ref(getJavaType(parameter.getType(resolver(Mode.INTERFACE)), Mode.INTERFACE));
+ final String columnTypeInterface = out.ref(getJavaType(parameter.getType(resolver(out, Mode.INTERFACE)), out, Mode.INTERFACE));
if (scala)
out.println("from(%s.%s.asInstanceOf[%s])", localVar, getter, columnTypeInterface);
@@ -7547,52 +7563,18 @@ public class JavaGenerator extends AbstractGenerator {
}
}
- @Deprecated
- protected String getExtendsNumberType(DataTypeDefinition type) {
- return getNumberType(type, scala ? "_ <: " : "? extends ");
- }
-
protected String refExtendsNumberType(JavaWriter out, DataTypeDefinition type) {
- if (type.isGenericNumberType()) {
+ if (type.isGenericNumberType())
return (scala ? "_ <: " : "? extends ") + out.ref(Number.class);
- }
- else {
- return out.ref(getJavaType(type));
- }
- }
-
- @Deprecated
- protected String getNumberType(DataTypeDefinition type) {
- if (type.isGenericNumberType()) {
- return Number.class.getName();
- }
- else {
- return getJavaType(type);
- }
+ else
+ return out.ref(getJavaType(type, out));
}
protected String refNumberType(JavaWriter out, DataTypeDefinition type) {
- if (type.isGenericNumberType()) {
+ if (type.isGenericNumberType())
return out.ref(Number.class);
- }
- else {
- return out.ref(getJavaType(type));
- }
- }
-
- @Deprecated
- protected String getNumberType(DataTypeDefinition type, String prefix) {
- if (type.isGenericNumberType()) {
- return prefix + Number.class.getName();
- }
- else {
- return getJavaType(type);
- }
- }
-
- @Deprecated
- protected String getSimpleJavaType(DataTypeDefinition type) {
- return GenerationUtil.getSimpleJavaType(getJavaType(type));
+ else
+ return out.ref(getJavaType(type, out));
}
protected String getJavaTypeReference(Database db, DataTypeDefinition type, JavaWriter out) {
@@ -7631,32 +7613,71 @@ public class JavaGenerator extends AbstractGenerator {
}
}
- protected JavaTypeResolver resolver() {
- return new JavaTypeResolver() {
- @Override
- public String resolve(DataTypeDefinition type) {
- return getJavaType(type);
+ private class Resolver implements JavaTypeResolver {
+ private final JavaWriter out;
+ private final Mode mode;
+
+ Resolver(JavaWriter out, Mode mode) {
+ this.out = out;
+ this.mode = mode;
+ }
+
+ @Override
+ public String resolve(DataTypeDefinition type) {
+ return mode == null ? getJavaType(type, out) : getJavaType(type, out, mode);
+ }
+
+ @Override
+ public String classLiteral(String type) {
+ String rawtype = type.replaceAll("<.*>", "").replaceAll("\\[.*\\]", "");
+ boolean generic = !rawtype.equals(type);
+
+ switch (language) {
+ case SCALA:
+ return "classOf[" + out.ref(type) + "]";
+
+ case KOTLIN:
+ return out.ref(rawtype) + "::class.java" + (generic ? (" as " + out.ref(Class.class) + "<" + out.ref(type) + ">") : "");
+
+ case JAVA:
+ default:
+ return (generic ? "" : "(" + out.ref(Class.class) + ") ") + out.ref(rawtype) + ".class";
}
- };
+ }
+
+ @Override
+ public String ref(String type) {
+ return out.ref(type);
+ }
+
+ @Override
+ public String ref(Class> type) {
+ return out.ref(type);
+ }
}
- protected JavaTypeResolver resolver(final Mode udtMode) {
- return new JavaTypeResolver() {
- @Override
- public String resolve(DataTypeDefinition type) {
- return getJavaType(type, udtMode);
- }
- };
+ private static final String classLiteral(String type) {
+ String rawtype = type.replaceAll("<.*>", "").replaceAll("\\[.*\\]", "");
+ return (rawtype.equals(type) ? "" : "(java.lang.Class) ") + rawtype + ".class";
}
- protected String getJavaType(DataTypeDefinition type) {
- return getJavaType(type, Mode.RECORD);
+ protected JavaTypeResolver resolver(JavaWriter out) {
+ return new Resolver(out, null);
}
- protected String getJavaType(DataTypeDefinition type, Mode udtMode) {
+ protected JavaTypeResolver resolver(JavaWriter out, Mode mode) {
+ return new Resolver(out, mode);
+ }
+
+ protected String getJavaType(DataTypeDefinition type, JavaWriter out) {
+ return getJavaType(type, out, Mode.RECORD);
+ }
+
+ protected String getJavaType(DataTypeDefinition type, JavaWriter out, Mode udtMode) {
return getType(
type.getDatabase(),
type.getSchema(),
+ out,
type.getType(),
type.getPrecision(),
type.getScale(),
@@ -7670,23 +7691,23 @@ public class JavaGenerator extends AbstractGenerator {
* @deprecated - 3.9.0 - [#330] - Use {@link #getType(Database, SchemaDefinition, String, int, int, Name, String, String)} instead.
*/
@Deprecated
- protected String getType(Database db, SchemaDefinition schema, String t, int p, int s, String u, String javaType, String defaultType) {
- return getType(db, schema, t, p, s, name(u), javaType, defaultType);
+ protected String getType(Database db, SchemaDefinition schema, JavaWriter out, String t, int p, int s, String u, String javaType, String defaultType) {
+ return getType(db, schema, out, t, p, s, name(u), javaType, defaultType);
}
- protected String getType(Database db, SchemaDefinition schema, String t, int p, int s, Name u, String javaType, String defaultType) {
- return getType(db, schema, t, p, s, u, javaType, defaultType, Mode.RECORD);
+ protected String getType(Database db, SchemaDefinition schema, JavaWriter out, String t, int p, int s, Name u, String javaType, String defaultType) {
+ return getType(db, schema, out, t, p, s, u, javaType, defaultType, Mode.RECORD);
}
/**
* @deprecated - 3.9.0 - [#330] - Use {@link #getType(Database, SchemaDefinition, String, int, int, Name, String, String, Mode)} instead.
*/
@Deprecated
- protected String getType(Database db, SchemaDefinition schema, String t, int p, int s, String u, String javaType, String defaultType, Mode udtMode) {
- return getType(db, schema, t, p, s, name(u), javaType, defaultType, udtMode);
+ protected String getType(Database db, SchemaDefinition schema, JavaWriter out, String t, int p, int s, String u, String javaType, String defaultType, Mode udtMode) {
+ return getType(db, schema, out, t, p, s, name(u), javaType, defaultType, udtMode);
}
- protected String getType(Database db, SchemaDefinition schema, String t, int p, int s, Name u, String javaType, String defaultType, Mode udtMode) {
+ protected String getType(Database db, SchemaDefinition schema, JavaWriter out, String t, int p, int s, Name u, String javaType, String defaultType, Mode udtMode) {
String type = defaultType;
// Custom types
@@ -7703,28 +7724,28 @@ public class JavaGenerator extends AbstractGenerator {
// [#10309] TODO: The schema should be taken from baseType, if available. Might be different than the argument schema.
// When can this happen?
if (scala)
- type = "scala.Array[" + getType(db, schema, baseType.last(), p, s, baseType, javaType, defaultType, udtMode) + "]";
+ type = "scala.Array[" + getType(db, schema, out, baseType.last(), p, s, baseType, javaType, defaultType, udtMode) + "]";
else if (kotlin)
- type = "kotlin.Array<" + getType(db, schema, baseType.last(), p, s, baseType, javaType, defaultType, udtMode) + "?>";
+ type = "kotlin.Array<" + getType(db, schema, out, baseType.last(), p, s, baseType, javaType, defaultType, udtMode) + "?>";
else
- type = getType(db, schema, baseType.last(), p, s, baseType, javaType, defaultType, udtMode) + "[]";
+ type = getType(db, schema, out, baseType.last(), p, s, baseType, javaType, defaultType, udtMode) + "[]";
}
// Check for Oracle-style VARRAY types
else if (db.getArray(schema, u) != null) {
- boolean udtArray = db.getArray(schema, u).getElementType(resolver()).isUDT();
+ boolean udtArray = db.getArray(schema, u).getElementType(resolver(out)).isUDT();
if (udtMode == Mode.POJO || (udtMode == Mode.INTERFACE && !udtArray)) {
if (scala)
- type = "java.util.List[" + getJavaType(db.getArray(schema, u).getElementType(resolver(udtMode)), udtMode) + "]";
+ type = "java.util.List[" + getJavaType(db.getArray(schema, u).getElementType(resolver(out, udtMode)), out, udtMode) + "]";
else
- type = "java.util.List<" + getJavaType(db.getArray(schema, u).getElementType(resolver(udtMode)), udtMode) + ">";
+ type = "java.util.List<" + getJavaType(db.getArray(schema, u).getElementType(resolver(out, udtMode)), out, udtMode) + ">";
}
else if (udtMode == Mode.INTERFACE) {
if (scala)
- type = "java.util.List[_ <:" + getJavaType(db.getArray(schema, u).getElementType(resolver(udtMode)), udtMode) + "]";
+ type = "java.util.List[_ <:" + getJavaType(db.getArray(schema, u).getElementType(resolver(out, udtMode)), out, udtMode) + "]";
else
- type = "java.util.List extends " + getJavaType(db.getArray(schema, u).getElementType(resolver(udtMode)), udtMode) + ">";
+ type = "java.util.List extends " + getJavaType(db.getArray(schema, u).getElementType(resolver(out, udtMode)), out, udtMode) + ">";
}
else {
type = getStrategy().getFullJavaClassName(db.getArray(schema, u), Mode.RECORD);
@@ -7733,7 +7754,7 @@ public class JavaGenerator extends AbstractGenerator {
// Check for DOMAIN types
else if (db.getDomain(schema, u) != null) {
- type = getJavaType(db.getDomain(schema, u).getDefinedType());
+ type = getJavaType(db.getDomain(schema, u).getDefinedType(), out);
}
// Check for ENUM types
@@ -7801,7 +7822,7 @@ public class JavaGenerator extends AbstractGenerator {
if (db.getArray(schema, u) != null) {
ArrayDefinition array = database.getArray(schema, u);
- sb.append(getJavaTypeReference(db, array.getElementType(resolver()), out));
+ sb.append(getJavaTypeReference(db, array.getElementType(resolver(out)), out));
sb.append(".asArrayDataType(");
sb.append(classOf(getStrategy().getFullJavaClassName(array, Mode.RECORD)));
sb.append(")");
@@ -7954,11 +7975,6 @@ public class JavaGenerator extends AbstractGenerator {
return result;
}
- @Deprecated
- protected boolean match(DataTypeDefinition type1, DataTypeDefinition type2) {
- return getJavaType(type1).equals(getJavaType(type2));
- }
-
@SafeVarargs
private static final List list(T... objects) {
List result = new ArrayList<>();
diff --git a/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Actor.java b/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Actor.java
index 84726055d3..9500036f56 100644
--- a/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Actor.java
+++ b/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Actor.java
@@ -22,6 +22,7 @@ import org.jooq.example.jpa.jooq.DefaultSchema;
import org.jooq.example.jpa.jooq.Keys;
import org.jooq.example.jpa.jooq.tables.records.ActorRecord;
import org.jooq.impl.DSL;
+import org.jooq.impl.SQLDataType;
import org.jooq.impl.TableImpl;
@@ -31,7 +32,7 @@ import org.jooq.impl.TableImpl;
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Actor extends TableImpl {
- private static final long serialVersionUID = -837715027;
+ private static final long serialVersionUID = -976374127;
/**
* The reference instance of ACTOR
@@ -49,17 +50,17 @@ public class Actor extends TableImpl {
/**
* The column ACTOR.ACTORID.
*/
- public final TableField ACTORID = createField(DSL.name("ACTORID"), org.jooq.impl.SQLDataType.INTEGER.nullable(false).identity(true), this, "");
+ public final TableField ACTORID = createField(DSL.name("ACTORID"), SQLDataType.INTEGER.nullable(false).identity(true), this, "");
/**
* The column ACTOR.FIRSTNAME.
*/
- public final TableField FIRSTNAME = createField(DSL.name("FIRSTNAME"), org.jooq.impl.SQLDataType.VARCHAR(255), this, "");
+ public final TableField FIRSTNAME = createField(DSL.name("FIRSTNAME"), SQLDataType.VARCHAR(255), this, "");
/**
* The column ACTOR.LASTNAME.
*/
- public final TableField LASTNAME = createField(DSL.name("LASTNAME"), org.jooq.impl.SQLDataType.VARCHAR(255), this, "");
+ public final TableField LASTNAME = createField(DSL.name("LASTNAME"), SQLDataType.VARCHAR(255), this, "");
private Actor(Name alias, Table aliased) {
this(alias, aliased, null);
diff --git a/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Film.java b/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Film.java
index f3788f823a..1474310229 100644
--- a/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Film.java
+++ b/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Film.java
@@ -23,6 +23,7 @@ import org.jooq.example.jpa.jooq.DefaultSchema;
import org.jooq.example.jpa.jooq.Keys;
import org.jooq.example.jpa.jooq.tables.records.FilmRecord;
import org.jooq.impl.DSL;
+import org.jooq.impl.SQLDataType;
import org.jooq.impl.TableImpl;
@@ -32,7 +33,7 @@ import org.jooq.impl.TableImpl;
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Film extends TableImpl {
- private static final long serialVersionUID = 380882165;
+ private static final long serialVersionUID = 1891488862;
/**
* The reference instance of FILM
@@ -50,32 +51,32 @@ public class Film extends TableImpl {
/**
* The column FILM.FILMID.
*/
- public final TableField FILMID = createField(DSL.name("FILMID"), org.jooq.impl.SQLDataType.INTEGER.nullable(false).identity(true), this, "");
+ public final TableField FILMID = createField(DSL.name("FILMID"), SQLDataType.INTEGER.nullable(false).identity(true), this, "");
/**
* The column FILM.LENGTH.
*/
- public final TableField LENGTH = createField(DSL.name("LENGTH"), org.jooq.impl.SQLDataType.INTEGER, this, "");
+ public final TableField LENGTH = createField(DSL.name("LENGTH"), SQLDataType.INTEGER, this, "");
/**
* The column FILM.RELEASE_YEAR.
*/
- public final TableField RELEASE_YEAR = createField(DSL.name("RELEASE_YEAR"), org.jooq.impl.SQLDataType.INTEGER, this, "", new org.jooq.impl.JPAConverter(org.jooq.example.jpa.converters.YearConverter.class));
+ public final TableField RELEASE_YEAR = createField(DSL.name("RELEASE_YEAR"), SQLDataType.INTEGER, this, "", new org.jooq.impl.JPAConverter(org.jooq.example.jpa.converters.YearConverter.class));
/**
* The column FILM.TITLE.
*/
- public final TableField TITLE = createField(DSL.name("TITLE"), org.jooq.impl.SQLDataType.VARCHAR(255), this, "");
+ public final TableField TITLE = createField(DSL.name("TITLE"), SQLDataType.VARCHAR(255), this, "");
/**
* The column FILM.LANGUAGE_LANGUAGEID.
*/
- public final TableField LANGUAGE_LANGUAGEID = createField(DSL.name("LANGUAGE_LANGUAGEID"), org.jooq.impl.SQLDataType.INTEGER, this, "");
+ public final TableField LANGUAGE_LANGUAGEID = createField(DSL.name("LANGUAGE_LANGUAGEID"), SQLDataType.INTEGER, this, "");
/**
* The column FILM.ORIGINALLANGUAGE_LANGUAGEID.
*/
- public final TableField ORIGINALLANGUAGE_LANGUAGEID = createField(DSL.name("ORIGINALLANGUAGE_LANGUAGEID"), org.jooq.impl.SQLDataType.INTEGER, this, "");
+ public final TableField ORIGINALLANGUAGE_LANGUAGEID = createField(DSL.name("ORIGINALLANGUAGE_LANGUAGEID"), SQLDataType.INTEGER, this, "");
private Film(Name alias, Table aliased) {
this(alias, aliased, null);
diff --git a/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/FilmActor.java b/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/FilmActor.java
index 8af335d296..4135b26a7e 100644
--- a/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/FilmActor.java
+++ b/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/FilmActor.java
@@ -21,6 +21,7 @@ import org.jooq.example.jpa.jooq.DefaultSchema;
import org.jooq.example.jpa.jooq.Keys;
import org.jooq.example.jpa.jooq.tables.records.FilmActorRecord;
import org.jooq.impl.DSL;
+import org.jooq.impl.SQLDataType;
import org.jooq.impl.TableImpl;
@@ -30,7 +31,7 @@ import org.jooq.impl.TableImpl;
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class FilmActor extends TableImpl {
- private static final long serialVersionUID = 1729998951;
+ private static final long serialVersionUID = -1780609702;
/**
* The reference instance of FILM_ACTOR
@@ -48,12 +49,12 @@ public class FilmActor extends TableImpl {
/**
* The column FILM_ACTOR.FILMS_FILMID.
*/
- public final TableField FILMS_FILMID = createField(DSL.name("FILMS_FILMID"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
+ public final TableField FILMS_FILMID = createField(DSL.name("FILMS_FILMID"), SQLDataType.INTEGER.nullable(false), this, "");
/**
* The column FILM_ACTOR.ACTORS_ACTORID.
*/
- public final TableField ACTORS_ACTORID = createField(DSL.name("ACTORS_ACTORID"), org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
+ public final TableField ACTORS_ACTORID = createField(DSL.name("ACTORS_ACTORID"), SQLDataType.INTEGER.nullable(false), this, "");
private FilmActor(Name alias, Table aliased) {
this(alias, aliased, null);
diff --git a/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Language.java b/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Language.java
index 3fdeca487e..44da0901aa 100644
--- a/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Language.java
+++ b/jOOQ-examples/jOOQ-jpa-example/src/main/java/org/jooq/example/jpa/jooq/tables/Language.java
@@ -22,6 +22,7 @@ import org.jooq.example.jpa.jooq.DefaultSchema;
import org.jooq.example.jpa.jooq.Keys;
import org.jooq.example.jpa.jooq.tables.records.LanguageRecord;
import org.jooq.impl.DSL;
+import org.jooq.impl.SQLDataType;
import org.jooq.impl.TableImpl;
@@ -31,7 +32,7 @@ import org.jooq.impl.TableImpl;
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Language extends TableImpl {
- private static final long serialVersionUID = -1201806006;
+ private static final long serialVersionUID = -985164033;
/**
* The reference instance of LANGUAGE
@@ -49,12 +50,12 @@ public class Language extends TableImpl {
/**
* The column LANGUAGE.LANGUAGEID.
*/
- public final TableField LANGUAGEID = createField(DSL.name("LANGUAGEID"), org.jooq.impl.SQLDataType.INTEGER.nullable(false).identity(true), this, "");
+ public final TableField LANGUAGEID = createField(DSL.name("LANGUAGEID"), SQLDataType.INTEGER.nullable(false).identity(true), this, "");
/**
* The column LANGUAGE.NAME.
*/
- public final TableField NAME = createField(DSL.name("NAME"), org.jooq.impl.SQLDataType.VARCHAR(255), this, "");
+ public final TableField NAME = createField(DSL.name("NAME"), SQLDataType.VARCHAR(255), this, "");
private Language(Name alias, Table aliased) {
this(alias, aliased, null);
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java
index d7e32a03e6..149110dc9d 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java
@@ -49,6 +49,7 @@ import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.jooq.Converter;
import org.jooq.DataType;
import org.jooq.Name;
import org.jooq.exception.SQLDialectNotSupportedException;
@@ -128,7 +129,31 @@ public abstract class AbstractTypedElementDefinition
@Override
public DataTypeDefinition getType() {
if (type == null)
- type = mapDefinedType(container, this, definedType, null);
+ type = mapDefinedType(container, this, definedType, new JavaTypeResolver() {
+
+ // [#10553] TODO: This was introduced as a dummy implementation
+ // to make [#10534] work. jOOQ-meta should not have any
+ // such implementation
+ @Override
+ public String resolve(DataTypeDefinition type) {
+ return "java.lang.Object";
+ }
+
+ @Override
+ public String ref(Class> type) {
+ return type.getName();
+ }
+
+ @Override
+ public String ref(String type) {
+ return type;
+ }
+
+ @Override
+ public String classLiteral(String type) {
+ return type + ".class";
+ }
+ });
return type;
}
@@ -228,12 +253,12 @@ public abstract class AbstractTypedElementDefinition
if (Boolean.TRUE.equals(customType.isEnumConverter()) ||
EnumConverter.class.getName().equals(customType.getConverter())) {
String tType = tType(db, resolver, definedType);
- converter = "new " + EnumConverter.class.getName() + "<" + tType + ", " + uType + ">(" + classLiteral(tType) + ", " + classLiteral(uType) + ")";
+ converter = "new " + EnumConverter.class.getName() + "<" + tType + ", " + uType + ">(" + resolver.classLiteral(tType) + ", " + resolver.classLiteral(uType) + ")";
}
else if (customType.getLambdaConverter() != null) {
LambdaConverter c = customType.getLambdaConverter();
String tType = tType(db, resolver, definedType);
- converter = "org.jooq.Converter.of" + (!FALSE.equals(c.isNullable()) ? "Nullable" : "") + "(" + classLiteral(tType) + ", " + classLiteral(uType) + ", " + c.getFrom() + ", " + c.getTo() + ")";
+ converter = resolver.ref(Converter.class) + ".of" + (!FALSE.equals(c.isNullable()) ? "Nullable" : "") + "(" + resolver.classLiteral(tType) + ", " + resolver.classLiteral(uType) + ", " + c.getFrom() + ", " + c.getTo() + ")";
}
else if (!StringUtils.isBlank(customType.getConverter())) {
converter = customType.getConverter();
@@ -318,11 +343,6 @@ public abstract class AbstractTypedElementDefinition
}
}
- private static final String classLiteral(String type) {
- String rawtype = type.replaceAll("<.*>", "").replaceAll("\\[.*\\]", "");
- return (rawtype.equals(type) ? "" : "(java.lang.Class) ") + rawtype + ".class";
- }
-
@SuppressWarnings("deprecation")
public static final CustomType customType(Database db, ForcedType forcedType) {
String name = forcedType.getName();
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/JavaTypeResolver.java b/jOOQ-meta/src/main/java/org/jooq/meta/JavaTypeResolver.java
index 2c00a316ff..6750aecb9d 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/JavaTypeResolver.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/JavaTypeResolver.java
@@ -46,11 +46,34 @@ package org.jooq.meta;
*
* @author Lukas Eder
*/
-@FunctionalInterface
public interface JavaTypeResolver {
/**
* Resolve a Java type from a {@link DataTypeDefinition}.
*/
String resolve(DataTypeDefinition type);
+
+ /**
+ * Get a language dependent class literal for a type.
+ *
+ *
+ * | Language | Output for String |
+ * | Java | String.class |
+ * | Scala | classOf[String] |
+ * | Kotlin | String::class.java |
+ *
+ */
+ String classLiteral(String type);
+
+ /**
+ * Get the unqualified type reference and add an import for the qualified
+ * type, if necessary.
+ */
+ String ref(String type);
+
+ /**
+ * Get the unqualified type reference and add an import for the qualified
+ * type, if necessary.
+ */
+ String ref(Class> type);
}