From 65b97aed0e5fc35fb96bff4299c4d606f7eb4a74 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 29 Oct 2020 13:36:16 +0100 Subject: [PATCH] [jOOQ/jOOQ#10812] Compilation error in KotlinGenerator generated code when flag is turned on --- .../java/org/jooq/codegen/JavaGenerator.java | 20 +++++++++++++++++-- .../meta/AbstractTypedElementDefinition.java | 7 ++++++- .../java/org/jooq/meta/JavaTypeResolver.java | 12 +++++++++++ 3 files changed, 36 insertions(+), 3 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 161ace47ff..f32b20d1dc 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -153,12 +153,10 @@ import org.jooq.meta.IndexDefinition; import org.jooq.meta.JavaTypeResolver; import org.jooq.meta.PackageDefinition; import org.jooq.meta.ParameterDefinition; -import org.jooq.meta.PositionedDefinition; import org.jooq.meta.RoutineDefinition; import org.jooq.meta.SchemaDefinition; import org.jooq.meta.SequenceDefinition; import org.jooq.meta.TableDefinition; -import org.jooq.meta.TableElementDefinition; import org.jooq.meta.TypedElementDefinition; import org.jooq.meta.UDTDefinition; import org.jooq.meta.UniqueKeyDefinition; @@ -8046,6 +8044,24 @@ public class JavaGenerator extends AbstractGenerator { } } + @Override + public String constructorCall(String type) { + String rawtype = type.replaceAll("<.*>", "").replaceAll("\\[.*\\]", ""); + String typeParams = type.replace(rawtype, ""); + + switch (language) { + case SCALA: + return "new " + out.ref(rawtype) + typeParams.replace("<", "[").replace(">", "]"); + + case KOTLIN: + return out.ref(rawtype) + typeParams; + + case JAVA: + default: + return "new " + out.ref(rawtype) + typeParams; + } + } + @Override public String ref(String type) { return out.ref(type); 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 6dc9a0b012..e56eb2d760 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java @@ -153,6 +153,11 @@ public abstract class AbstractTypedElementDefinition public String classLiteral(String type) { return type + ".class"; } + + @Override + public String constructorCall(String type) { + return "new " + type; + } }); return type; @@ -252,7 +257,7 @@ 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 + ">(" + resolver.classLiteral(tType) + ", " + resolver.classLiteral(uType) + ")"; + converter = resolver.constructorCall(EnumConverter.class.getName() + "<" + resolver.ref(tType) + ", " + resolver.ref(uType) + ">") + "(" + resolver.classLiteral(tType) + ", " + resolver.classLiteral(uType) + ")"; } else if (customType.getLambdaConverter() != null) { LambdaConverter c = customType.getLambdaConverter(); 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 6750aecb9d..af1319f98c 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/JavaTypeResolver.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/JavaTypeResolver.java @@ -65,6 +65,18 @@ public interface JavaTypeResolver { */ String classLiteral(String type); + /** + * Get a language dependent constructor call for a type. + *

+ * + * + * + * + * + *
LanguageOutput for String
Javanew EnumConverter<A, B>
Scalanew EnumConverter[A, B]
KotlinEnumConverter<A, B>
+ */ + String constructorCall(String type); + /** * Get the unqualified type reference and add an import for the qualified * type, if necessary.