From e66abac092a7717d8326f738ed722e9db93ec6ea Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 19 May 2020 12:28:16 +0200 Subject: [PATCH] [jOOQ/jOOQ#10191] Cannot generate into(E) overload in Scala --- .../java/org/jooq/codegen/JavaGenerator.java | 271 +++++++----------- 1 file changed, 106 insertions(+), 165 deletions(-) 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 8d6cad0b01..3a233699dc 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -2151,14 +2151,18 @@ public class JavaGenerator extends AbstractGenerator { else out.println("public void from(%s from);", qualified); - out.javadoc("Copy data into another generated Record/POJO implementing the common interface %s", local); + // [#10191] Java and Kotlin can produce overloads for this method despite + // generic type erasure, but Scala cannot, see + // https://twitter.com/lukaseder/status/1262652304773259264 + if (scala) {} + else { + out.javadoc("Copy data into another generated Record/POJO implementing the common interface %s", local); - if (scala) - out.println("def into [E <: %s](into: E): E", qualified); - else if (kotlin) - out.println("fun into(into: E): E", qualified); - else - out.println("public E into(E into);", qualified); + if (kotlin) + out.println("fun into(into: E): E", qualified); + else + out.println("public E into(E into);", qualified); + } } @@ -3317,9 +3321,7 @@ public class JavaGenerator extends AbstractGenerator { out.javadoc("Create a new %s without any configuration", className); if (scala) { - out.println("def this() = {"); - out.println("this(null)"); - out.println("}"); + out.println("def this() = this(null)"); } else if (kotlin) { out.println("constructor(): this(null)"); @@ -3348,11 +3350,11 @@ public class JavaGenerator extends AbstractGenerator { // ------------------------------- if (scala) { out.println(); - out.println("override def getId(o: %s): %s = {", pType, tType); + out.print("override def getId(o: %s): %s = ", pType, tType); } else if (kotlin) { out.println(); - out.println("override fun getId(o: %s): %s? {", pType, tType); + out.print("override fun getId(o: %s): %s? = ", pType, tType); } else { out.overrideInherit(); @@ -3363,7 +3365,7 @@ public class JavaGenerator extends AbstractGenerator { if (scala) out.println("o.%s", getStrategy().getJavaGetterName(keyColumns.get(0), Mode.POJO)); else if (kotlin) - out.println("return o.%s", getStrategy().getJavaMemberName(keyColumns.get(0), Mode.POJO)); + out.println("o.%s", getStrategy().getJavaMemberName(keyColumns.get(0), Mode.POJO)); else out.println("return object.%s();", getStrategy().getJavaGetterName(keyColumns.get(0), Mode.POJO)); } @@ -3384,15 +3386,15 @@ public class JavaGenerator extends AbstractGenerator { separator = ", "; } - if (scala) + if (scala || kotlin) out.println("compositeKeyRecord(%s)", params); - else if (kotlin) - out.println("return compositeKeyRecord(%s)", params); else out.println("return compositeKeyRecord(%s);", params); } - out.println("}"); + if (scala || kotlin) {} + else + out.println("}"); for (ColumnDefinition column : table.getColumns()) { final String colName = column.getOutputName(); @@ -3407,12 +3409,12 @@ public class JavaGenerator extends AbstractGenerator { out.javadoc("Fetch records that have %s BETWEEN lowerInclusive AND upperInclusive", colName); if (scala) { - out.println("def fetchRangeOf%s(lowerInclusive: %s, upperInclusive: %s): %s[%s] = {", colClass, colType, colType, List.class, pType); - out.println("fetchRange(%s, lowerInclusive, upperInclusive)", colIdentifier); - out.println("}"); + out.println("def fetchRangeOf%s(lowerInclusive: %s, upperInclusive: %s): %s[%s] = fetchRange(%s, lowerInclusive, upperInclusive)", + colClass, colType, colType, List.class, pType, colIdentifier); } else if (kotlin) { - out.println("fun fetchRangeOf%s(lowerInclusive: %s?, upperInclusive: %s?): %s<%s> = fetchRange(%s, lowerInclusive, upperInclusive)", colClass, colType, colType, out.ref(KLIST), pType, colIdentifier); + out.println("fun fetchRangeOf%s(lowerInclusive: %s?, upperInclusive: %s?): %s<%s> = fetchRange(%s, lowerInclusive, upperInclusive)", + colClass, colType, colType, out.ref(KLIST), pType, colIdentifier); } else { out.println("public %s<%s> fetchRangeOf%s(%s lowerInclusive, %s upperInclusive) {", List.class, pType, colClass, colType, colType); @@ -3426,9 +3428,7 @@ public class JavaGenerator extends AbstractGenerator { out.javadoc("Fetch records that have %s IN (values)", colName); if (scala) { - out.println("def fetchBy%s(values: %s*): %s[%s] = {", colClass, colType, List.class, pType); - out.println("fetch(%s, values:_*)", colIdentifier); - out.println("}"); + out.println("def fetchBy%s(values: %s*): %s[%s] = fetch(%s, values:_*)", colClass, colType, List.class, pType, colIdentifier); } else if (kotlin) { String toTypedArray = PRIMITIVE_WRAPPERS.contains(colTypeFull) ? ".toTypedArray()" : ""; @@ -3451,9 +3451,7 @@ public class JavaGenerator extends AbstractGenerator { out.javadoc("Fetch a unique record that has %s = value", colName); if (scala) { - out.println("def fetchOneBy%s(value: %s): %s = {", colClass, colType, pType); - out.println("fetchOne(%s, value)", colIdentifier); - out.println("}"); + out.println("def fetchOneBy%s(value: %s): %s = fetchOne(%s, value)", colClass, colType, pType, colIdentifier); } else if (kotlin) { out.println("fun fetchOneBy%s(value: %s): %s? = fetchOne(%s, value)", colClass, colType, pType, colIdentifier); @@ -3719,23 +3717,20 @@ public class JavaGenerator extends AbstractGenerator { out.println(); if (scala) { - out.println("def this (value: %s) = {", generateInterfaces() ? interfaceName : className); - out.println("this("); + out.println("def this(value: %s) = this(", generateInterfaces() ? interfaceName : className); String separator = " "; for (TypedElementDefinition column : getTypedElements(tableOrUDT)) { out.println("%svalue.%s", separator, - getStrategy().getJavaMemberName(column, Mode.POJO), generateInterfaces() - ? getStrategy().getJavaMemberName(column, Mode.INTERFACE) + ? getStrategy().getJavaGetterName(column, Mode.INTERFACE) : getStrategy().getJavaMemberName(column, Mode.POJO)); separator = ", "; } out.println(")"); - out.println("}"); } else { out.println("public %s(%s value) {", className, generateInterfaces() ? interfaceName : className); @@ -3774,13 +3769,11 @@ 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(Mode.POJO)), Mode.POJO))); else nulls.add("null"); - out.println("def this() = {", className); - out.println("this([[%s]])", nulls); - out.println("}"); + out.println("def this() = this([[%s]])", nulls); } } else if (kotlin) { @@ -3824,9 +3817,7 @@ public class JavaGenerator extends AbstractGenerator { printNullableOrNonnullAnnotation(out, column); if (scala) { - out.println("def %s: %s = {", columnGetter, columnType); - out.println("this.%s", columnMember); - out.println("}"); + out.println("def %s: %s = this.%s", columnGetter, columnType, columnMember); } else { out.overrideIf(generateInterfaces()); @@ -4084,7 +4075,7 @@ public class JavaGenerator extends AbstractGenerator { out.println(); out.println("sb.append(\")\")"); - out.println("return sb.toString"); + out.println("sb.toString"); out.println("}"); } else { @@ -4327,16 +4318,12 @@ public class JavaGenerator extends AbstractGenerator { // [#10191] This constructor must be generated first in Scala to prevent // "called constructor's definition must precede calling constructor's definition" if (scala) { - out.println("private def this(alias: %s, aliased: %s[%s]) = {", Name.class, Table.class, recordType); - if (table.isTableValuedFunction()) - out.println("this(alias, null, null, aliased, new %s[ %s[_] ](%s))", out.ref("scala.Array"), Field.class, parameters.size()); + out.println("private def this(alias: %s, aliased: %s[%s]) = this(alias, null, null, aliased, new %s[ %s[_] ](%s))", + Name.class, Table.class, recordType, out.ref("scala.Array"), Field.class, parameters.size()); else - out.println("this(alias, null, null, aliased, null)"); - - out.println("}"); - - // TODO: Add the private constructor being called from above! + out.println("private def this(alias: %s, aliased: %s[%s]) = this(alias, null, null, aliased, null)", + Name.class, Table.class, recordType); } else if (kotlin) { if (table.isTableValuedFunction()) @@ -4371,14 +4358,10 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.javadoc("Create an aliased %s table reference", table.getQualifiedOutputName()); - out.println("def this(alias: %s) = {", String.class); - out.println("this(%s.name(alias), %s)", DSL.class, tableId); - out.println("}"); + out.println("def this(alias: %s) = this(%s.name(alias), %s)", String.class, DSL.class, tableId); out.javadoc("Create an aliased %s table reference", table.getQualifiedOutputName()); - out.println("def this(alias: %s) = {", Name.class); - out.println("this(alias, %s)", tableId); - out.println("}"); + out.println("def this(alias: %s) = this(alias, %s)", Name.class, tableId); } else if (kotlin) { out.javadoc("Create an aliased %s table reference", table.getQualifiedOutputName()); @@ -4406,13 +4389,11 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.javadoc("Create a %s table reference", table.getQualifiedOutputName()); - out.println("def this() = {"); - out.println("this(%s.name(\"%s\"))", DSL.class, table.getOutputName()); - out.println("}"); + out.println("def this() = this(%s.name(\"%s\"))", DSL.class, escapeString(table.getOutputName())); } else if (kotlin) { out.javadoc("Create a %s table reference", table.getQualifiedOutputName()); - out.println("constructor(): this(%s.name(\"%s\"))", DSL.class, table.getOutputName()); + out.println("constructor(): this(%s.name(\"%s\"))", DSL.class, escapeString(table.getOutputName())); } else { // [#1255] With instance fields, the table constructor may @@ -4434,9 +4415,8 @@ public class JavaGenerator extends AbstractGenerator { out.println(); if (scala) { - out.println("def this(child: %s[_ <: %s], key: %s[_ <: %s, %s]) = {", Table.class, Record.class, ForeignKey.class, Record.class, recordType); - out.println("this(%s.createPathAlias(child, key), child, key, %s, null)", Internal.class, tableId); - out.println("}"); + out.println("def this(child: %s[_ <: %s], key: %s[_ <: %s, %s]) = this(%s.createPathAlias(child, key), child, key, %s, null)", + Table.class, Record.class, ForeignKey.class, Record.class, recordType, Internal.class, tableId); } else if (kotlin) { out.println("constructor(child: %s, key: %s): this(%s.createPathAlias(child, key), child, key, %s, null)", @@ -4473,9 +4453,8 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.println(); - out.println("override def getIndexes: %s[ %s ] = {", List.class, Index.class); - out.println("return %s.asList[ %s ]([[%s]])", Arrays.class, Index.class, indexFullIds); - out.println("}"); + out.println("override def getIndexes: %s[%s] = %s.asList[ %s ]([[%s]])", + List.class, Index.class, Arrays.class, Index.class, indexFullIds); } else if (kotlin) { out.println("override fun getIndexes(): %s<%s> = listOf([[%s]])", out.ref(KLIST), Index.class, indexFullIds); @@ -4492,8 +4471,7 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.println(); - out.println("override def getIndexes: %s[ %s ] = {", List.class, Index.class); - out.println("return %s.asList[ %s ](", Arrays.class, Index.class); + out.println("override def getIndexes: %s[%s] = %s.asList[%s](", List.class, Index.class, Arrays.class, Index.class); for (IndexDefinition index : indexes) { out.print("%s", separator); @@ -4503,7 +4481,6 @@ public class JavaGenerator extends AbstractGenerator { } out.println(")"); - out.println("}"); } else if (kotlin) { out.println("override fun getIndexes(): %s<%s> = listOf(", out.ref(KLIST), Index.class); @@ -4552,21 +4529,21 @@ public class JavaGenerator extends AbstractGenerator { out.println(); printDeprecationIfUnknownType(out, identityTypeFull); - out.println("override def getIdentity: %s[%s, %s] = {", Identity.class, recordType, identityType); + out.print("override def getIdentity: %s[%s, %s] = ", Identity.class, recordType, identityType); if (identityFullId != null) - out.println("%s", identityFullId); + out.print("%s", identityFullId); else printCreateIdentity(out, identity); - out.println("}"); + out.println(); } else if (kotlin) { printDeprecationIfUnknownType(out, identityTypeFull); out.print("override fun getIdentity(): %s<%s, %s?> = ", Identity.class, recordType, identityType); if (identityFullId != null) - out.println("%s", identityFullId); + out.print("%s", identityFullId); else printCreateIdentity(out, identity); @@ -4599,20 +4576,20 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.println(); - out.println("override def getPrimaryKey: %s[%s] = {", UniqueKey.class, recordType); + out.print("override def getPrimaryKey: %s[%s] = ", UniqueKey.class, recordType); if (keyFullId != null) - out.println("%s", keyFullId); + out.print("%s", keyFullId); else printCreateUniqueKey(out, primaryKey); - out.println("}"); + out.println(); } else if (kotlin) { out.print("override fun getPrimaryKey(): %s<%s> = ", UniqueKey.class, recordType); if (keyFullId != null) - out.println("%s", keyFullId); + out.print("%s", keyFullId); else printCreateUniqueKey(out, primaryKey); @@ -4641,9 +4618,8 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.println(); - out.println("override def getKeys: %s[ %s[%s] ] = {", List.class, UniqueKey.class, recordType); - out.println("return %s.asList[ %s[%s] ]([[%s]])", Arrays.class, UniqueKey.class, recordType, keyFullIds); - out.println("}"); + out.println("override def getKeys: %s[ %s[%s] ] = %s.asList[ %s[%s] ]([[%s]])", + List.class, UniqueKey.class, recordType, Arrays.class, UniqueKey.class, recordType, keyFullIds); } else if (kotlin) { out.println("override fun getKeys(): %s<%s<%s>> = listOf([[%s]])", out.ref(KLIST), UniqueKey.class, recordType, keyFullIds); @@ -4660,8 +4636,8 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.println(); - out.println("override def getKeys: %s[ %s[%s] ] = {", List.class, UniqueKey.class, recordType); - out.println("return %s.asList[ %s[%s] ](", Arrays.class, UniqueKey.class, recordType); + out.println("override def getKeys: %s[ %s[%s] ] = %s.asList[ %s[%s] ](", + List.class, UniqueKey.class, recordType, Arrays.class, UniqueKey.class, recordType); for (UniqueKeyDefinition uniqueKey : uniqueKeys) { out.print("%s", separator); @@ -4671,7 +4647,6 @@ public class JavaGenerator extends AbstractGenerator { } out.println(")"); - out.println("}"); } else if (kotlin) { out.println("override fun getKeys(): %s<%s<%s>> = listOf(", out.ref(KLIST), UniqueKey.class, recordType); @@ -4712,9 +4687,8 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.println(); - out.println("override def getReferences: %s[ %s[%s, _] ] = {", List.class, ForeignKey.class, recordType); - out.println("return %s.asList[ %s[%s, _] ]([[%s]])", Arrays.class, ForeignKey.class, recordType, keyFullIds); - out.println("}"); + out.println("override def getReferences: %s[ %s[%s, _] ] = %s.asList[ %s[%s, _] ]([[%s]])", + List.class, ForeignKey.class, recordType, Arrays.class, ForeignKey.class, recordType, keyFullIds); } else if (kotlin) { out.println("override fun getReferences(): %s<%s<%s, *>> = listOf([[%s]])", out.ref(KLIST), ForeignKey.class, recordType, keyFullIds); @@ -4734,10 +4708,7 @@ public class JavaGenerator extends AbstractGenerator { final String keyMethodName = out.ref(getStrategy().getJavaMethodName(foreignKey)); if (scala) { - out.println(); - out.println("def %s: %s = {", keyMethodName, referencedTableClassName); - out.println("return new %s(this, %s)", referencedTableClassName, keyFullId); - out.println("}"); + out.println("def %s: %s = new %s(this, %s)", keyMethodName, referencedTableClassName, referencedTableClassName, keyFullId); } else if (kotlin) { out.println("fun %s(): %s = %s(this, %s)", keyMethodName, referencedTableClassName, referencedTableClassName, keyFullId); @@ -4757,12 +4728,12 @@ public class JavaGenerator extends AbstractGenerator { if (!cc.isEmpty()) { if (scala) { - out.println(); - out.println("override def getChecks: %s[ %s[%s] ] = {", List.class, Check.class, recordType); - out.println("return %s.asList[ %s[%s] ](", Arrays.class, Check.class, recordType); + out.println("override def getChecks: %s[ %s[%s] ] = %s.asList[ %s[%s] ](", + List.class, Check.class, recordType, Arrays.class, Check.class, recordType); } else if (kotlin) { - out.println("override fun getChecks(): %s<%s<%s>> = listOf(", out.ref(KLIST), Check.class, recordType); + out.println("override fun getChecks(): %s<%s<%s>> = listOf(", + out.ref(KLIST), Check.class, recordType); } else { out.overrideInherit(); @@ -4776,7 +4747,7 @@ public class JavaGenerator extends AbstractGenerator { separator = ", "; } - if (kotlin) { + if (scala || kotlin) { out.println(")"); } else { @@ -4800,12 +4771,8 @@ public class JavaGenerator extends AbstractGenerator { final String columnId = getStrategy().getJavaIdentifier(column); if (scala) { - out.println(); - printDeprecationIfUnknownType(out, columnTypeFull); - out.println("override def getRecordVersion: %s[%s, %s] = {", TableField.class, recordType, columnType); - out.println("%s", columnId); - out.println("}"); + out.println("override def getRecordVersion: %s[%s, %s] = %s", TableField.class, recordType, columnType, columnId); } else if (kotlin) { printDeprecationIfUnknownType(out, columnTypeFull); @@ -4840,12 +4807,8 @@ public class JavaGenerator extends AbstractGenerator { final String columnId = getStrategy().getJavaIdentifier(column); if (scala) { - out.println(); - printDeprecationIfUnknownType(out, columnTypeFull); - out.println("override def getRecordTimestamp: %s[%s, %s] = {", TableField.class, recordType, columnType); - out.println("%s", columnId); - out.println("}"); + out.println("override def getRecordTimestamp: %s[%s, %s] = %s", TableField.class, recordType, columnType, columnId); } else if (kotlin) { printDeprecationIfUnknownType(out, columnTypeFull); @@ -4869,26 +4832,19 @@ public class JavaGenerator extends AbstractGenerator { } if (scala) { - out.println(); - out.println("override def as(alias: %s): %s = {", String.class, className); + out.print("override def as(alias: %s): %s = ", String.class, className); if (table.isTableValuedFunction()) out.println("new %s(%s.name(alias), this, null, null, parameters)", className, DSL.class); else out.println("new %s(%s.name(alias), this)", className, DSL.class); - out.println("}"); - - - out.println(); - out.println("override def as(alias: %s): %s = {", Name.class, className); + out.print("override def as(alias: %s): %s = ", Name.class, className); if (table.isTableValuedFunction()) out.println("new %s(alias, this, null, null, parameters)", className); else out.println("new %s(alias, this)", className); - - out.println("}"); } else if (kotlin) { out.print("override fun `as`(alias: %s): %s = ", String.class, className); @@ -4933,24 +4889,20 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.javadoc("Rename this table"); - out.println("override def rename(name: %s): %s = {", String.class, className); + out.print("override def rename(name: %s): %s = ", String.class, className); if (table.isTableValuedFunction()) out.println("new %s(%s.name(name), null, null, null, parameters)", className, DSL.class); else out.println("new %s(%s.name(name), null)", className, DSL.class); - out.println("}"); - out.javadoc("Rename this table"); - out.println("override def rename(name: %s): %s = {", Name.class, className); + out.print("override def rename(name: %s): %s = ", Name.class, className); if (table.isTableValuedFunction()) out.println("new %s(name, null, null, null, parameters)", className); else out.println("new %s(name, null)", className); - - out.println("}"); } else if (kotlin) { @@ -5001,23 +4953,19 @@ public class JavaGenerator extends AbstractGenerator { String rowType = refRowType(out, table.getColumns()); if (generateRecordsImplementingRecordN() && degree > 0 && degree <= Constants.MAX_ROW_DEGREE) { - out.header("Row%s type methods", degree); + final String rowNType = out.ref(Row.class.getName() + degree); + out.header("Row%s type methods", degree); if (scala) { - out.println(); - out.println("override def fieldsRow: %s[%s] = {", out.ref(Row.class.getName() + degree), rowType); - out.println("super.fieldsRow.asInstanceOf[ %s[%s] ]", out.ref(Row.class.getName() + degree), rowType); - out.println("}"); + out.println("override def fieldsRow: %s[%s] = super.fieldsRow.asInstanceOf[ %s[%s] ]", rowNType, rowType, rowNType, rowType); } else if (kotlin) { - out.println(); - out.println("override fun fieldsRow(): %s<%s> = super.fieldsRow() as %s<%s>", - out.ref(Row.class.getName() + degree), rowType, out.ref(Row.class.getName() + degree), rowType); + out.println("override fun fieldsRow(): %s<%s> = super.fieldsRow() as %s<%s>", rowNType, rowType, rowNType, rowType); } else { out.overrideInherit(); - out.println("public %s<%s> fieldsRow() {", out.ref(Row.class.getName() + degree), rowType); - out.println("return (%s) super.fieldsRow();", out.ref(Row.class.getName() + degree)); + out.println("public %s<%s> fieldsRow() {", rowNType, rowType); + out.println("return (%s) super.fieldsRow();", rowNType); out.println("}"); } } @@ -5035,7 +4983,7 @@ public class JavaGenerator extends AbstractGenerator { if (scala) { out.print("def call(").printlnIf(!parameters.isEmpty()); printParameterDeclarations(out, parameters, parametersAsField, " "); - out.println("): %s = {", className); + out.print("): %s = ", className); out.print("new %s(%s.name(getName()), null, null, null, %s(", className, DSL.class, out.ref("scala.Array")).printlnIf(!parameters.isEmpty()); String separator = " "; @@ -5055,8 +5003,7 @@ public class JavaGenerator extends AbstractGenerator { separator = ", "; } - out.println("));"); - out.println("}"); + out.println("))"); } else if (kotlin) { out.print("fun call(").printlnIf(!parameters.isEmpty()); @@ -5635,13 +5582,22 @@ public class JavaGenerator extends AbstractGenerator { out.println("}"); - if (generateInterfaces() && !generateImmutableInterfaces()) { + if (override) { + // [#10191] Java and Kotlin can produce overloads for this method despite + // generic type erasure, but Scala cannot, see + // https://twitter.com/lukaseder/status/1262652304773259264 + if (scala) { - out.println(); - out.println("%sdef into [E <: %s](into: E): E = {", (override ? "override " : ""), qualified); - out.println("into.from(this)"); - out.println("into"); - out.println("}"); + if (mode != Mode.POJO) { + out.println(); + out.println("override def into [E](into: E): E = {", qualified); + out.println("if (into.isInstanceOf[%s])", qualified); + out.println("into.asInstanceOf[%s].from(this)", qualified); + out.println("else"); + out.println("super.into(into)"); + out.println("into"); + out.println("}"); + } } else if (kotlin) { out.println(); @@ -5750,9 +5706,9 @@ public class JavaGenerator extends AbstractGenerator { out.println(); if (scala) { - out.println("private def get%ss%s(): %s[%s%s] = {", type.getSimpleName(), i / INITIALISER_SIZE, List.class, type, generic); - out.println("return %s.asList[%s%s]([[before=\n\t\t\t][separator=,\n\t\t\t][%s]])", Arrays.class, type, generic, references.subList(i, Math.min(i + INITIALISER_SIZE, references.size()))); - out.println("}"); + out.println("private def get%ss%s(): %s[%s%s] = %s.asList[%s%s](", type.getSimpleName(), i / INITIALISER_SIZE, List.class, type, generic, Arrays.class, type, generic); + out.println("[[before=\n\t\t\t][separator=,\n\t\t\t][%s]]", references.subList(i, Math.min(i + INITIALISER_SIZE, references.size()))); + out.println(")"); } else if (kotlin) { out.println("private fun get%ss%s(): %s<%s%s> = listOf(", type.getSimpleName(), i / INITIALISER_SIZE, out.ref(KLIST), type, generic); @@ -6215,9 +6171,8 @@ public class JavaGenerator extends AbstractGenerator { out.javadoc("Set the %s parameter IN value to the routine", parameter.getOutputName()); if (scala) { - out.println("def %s(%s: %s) : Unit = {", setter, paramName, refNumberType(out, parameter.getType(resolver()))); - out.println("set%s(%s.%s, %s)", numberValue, className, paramId, paramName); - out.println("}"); + out.println("def %s(%s: %s) : Unit = set%s(%s.%s, %s)", + setter, paramName, refNumberType(out, parameter.getType(resolver())), numberValue, className, paramId, paramName); } else if (kotlin) { out.println("fun %s(%s: %s?) = set%s(%s, %s)", @@ -6277,9 +6232,7 @@ public class JavaGenerator extends AbstractGenerator { out.javadoc("Get the %s parameter OUT value from the routine", paramName); if (scala) { - out.println("def %s: %s = {", paramGetter, paramType); - out.println("get(%s.%s)", className, paramId); - out.println("}"); + out.println("def %s: %s = get(%s.%s)", paramGetter, paramType, className, paramId); } else if (kotlin) { out.println("fun %s(): %s? = get(%s)", paramGetter, paramType, paramId); @@ -6422,11 +6375,7 @@ public class JavaGenerator extends AbstractGenerator { printParameterDeclarations(out, function.getParameters(), parametersAsField, " "); - if (scala) { - out.println("): %s = {", className); - out.println("%s.call(", functionIdentifier); - } - else if (kotlin) { + if (scala || kotlin) { out.println("): %s = %s.call(", className, functionIdentifier); } else { @@ -6444,11 +6393,8 @@ public class JavaGenerator extends AbstractGenerator { if (scala || kotlin) out.println(")"); else - out.println(");"); - - if (kotlin) {} - else - out.println("}"); + out.println(");") + .println("}"); } private void printParameterDeclarations(JavaWriter out, List parameters, boolean parametersAsField, String separator) { @@ -6774,8 +6720,7 @@ public class JavaGenerator extends AbstractGenerator { printParameterDeclarations(out, function.getParameters(), false, ", "); if (scala) { - out.println("): %s[%s] = {", Result.class, recordClassName); - out.println("%s.dsl().selectFrom(%s.call(", configurationArgument, functionName); + out.println("): %s[%s] = %s.dsl().selectFrom(%s.call(", Result.class, recordClassName, configurationArgument, functionName); } else if (kotlin) { out.println("): %s<%s> = %s.dsl().selectFrom(%s.call(", Result.class, recordClassName, configurationArgument, functionName); @@ -6795,10 +6740,8 @@ public class JavaGenerator extends AbstractGenerator { if (scala || kotlin) out.println(")).fetch()"); else - out.println(")).fetch();"); - - if (!kotlin) - out.println("}"); + out.println(")).fetch();") + .println("}"); } protected void printRecordTypeMethod(JavaWriter out, Definition definition) { @@ -6807,9 +6750,7 @@ public class JavaGenerator extends AbstractGenerator { out.javadoc("The class holding records for this type"); if (scala) { - out.println("override def getRecordType: %s[%s] = {", Class.class, className); - out.println("classOf[%s]", className); - out.println("}"); + out.println("override def getRecordType: %s[%s] = classOf[%s]", Class.class, className, className); } else if (kotlin) { out.println("override fun getRecordType(): %s<%s> = %s::class.java", Class.class, className, className);