From 67639e1076bc801552c1ce5dad2cb4b70b2eadcf Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 26 May 2021 11:06:30 +0200 Subject: [PATCH] [jOOQ/jOOQ#11912] KotlinGenerator generates invalid code when column names X and isX clash --- .../java/org/jooq/codegen/JavaGenerator.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) 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 6718473cae..50c647bb8d 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -2348,6 +2348,7 @@ public class JavaGenerator extends AbstractGenerator { printColumnJPAAnnotation(out, (ColumnDefinition) column); printValidationAnnotation(out, column); + printKotlinSetterAnnotation(out, column, Mode.RECORD); out.println("%s%svar %s: %s?", visibility(generateInterfaces()), (generateInterfaces() ? "override " : ""), member, type); out.tab(1).println("set(value): %s = set(%s, value)", setterReturnType, index); @@ -2938,6 +2939,8 @@ public class JavaGenerator extends AbstractGenerator { printValidationAnnotation(out, column); printNullableOrNonnullAnnotation(out, column); + if (kotlin) + printKotlinSetterAnnotation(out, column, Mode.INTERFACE); if (scala) out.println("%sdef %s: %s", visibilityPublic(), scalaWhitespaceSuffix(getter), type); @@ -4500,6 +4503,7 @@ public class JavaGenerator extends AbstractGenerator { printColumnJPAAnnotation(out, (ColumnDefinition) column); printValidationAnnotation(out, column); + printKotlinSetterAnnotation(out, column, Mode.POJO); out.println("%s%s%s %s: %s? = null%s", visibility(generateInterfaces()), @@ -7251,6 +7255,23 @@ public class JavaGenerator extends AbstractGenerator { } } + protected void printKotlinSetterAnnotation(JavaWriter out, TypedElementDefinition column, Mode mode) { + + // [#11912] When X and IS_X create conflicts, we need to resolve + // them by specifying an explicit setter name + if (column instanceof ColumnDefinition) { + String member = getStrategy().getJavaMemberName(column, mode); + + if (member.startsWith("is") && ((ColumnDefinition) column) + .getContainer() + .getColumns() + .stream() + .anyMatch(c -> member.equals("is" + StringUtils.toUC(getStrategy().getJavaMemberName(c, mode))))) { + out.println("@set:JvmName(\"%s\")", getStrategy().getJavaSetterName(column, mode)); + } + } + } + private String nullableAnnotation(JavaWriter out) { return generateNullableAnnotation() ? out.ref(generatedNullableAnnotationType()) : null; }