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 2d3b44c774..69b42785f2 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -372,7 +372,7 @@ public class JavaGenerator extends AbstractGenerator { if (scala) return ""; else if (kotlin) - return "".equals(visibility()) ? visibility() : "public "; + return "public "; else return "public "; } @@ -2582,7 +2582,7 @@ public class JavaGenerator extends AbstractGenerator { } else if (kotlin) { out.println(); - out.println("%sopen %svar %s: %s", visibility(override), (generateInterfaces() ? "override " : ""), member, type); + out.println("%sopen %svar %s: %s", visibility(generateInterfaces()), (generateInterfaces() ? "override " : ""), member, type); out.tab(1).println("set(value): %s {", setterReturnType); } else { @@ -5411,6 +5411,7 @@ public class JavaGenerator extends AbstractGenerator { final String columnTypeDeclaredFull = getStrategy().getFullJavaClassName(embeddable, generateInterfaces() ? Mode.INTERFACE : Mode.POJO); final String columnTypeDeclared = out.ref(columnTypeDeclaredFull); final String columnGetter = getStrategy().getJavaGetterName(embeddable, Mode.POJO); + final String columnMember = getStrategy().getJavaMemberName(embeddable, Mode.POJO); final String name = embeddable.getQualifiedOutputName(); // Getter @@ -5419,10 +5420,18 @@ public class JavaGenerator extends AbstractGenerator { printNonnullAnnotation(out); - if (scala) + if (scala) { out.println("%sdef %s: %s = new %s(", visibility(generateInterfaces()), scalaWhitespaceSuffix(columnGetter), columnType, columnType); - else if (kotlin) + } + else if (kotlin) { + + // [#14853] The POJO property hasn't been generated in the setter, if the POJO + // is immutable, as there are no setters. + if (generateImmutablePojos()) + generateEmbeddablePojoProperty(out, generateImmutableInterfaces(), generateInterfaces(), columnTypeDeclared, columnMember); + out.tab(1).println("get(): %s = %s(", columnTypeDeclared, columnType); + } else { out.overrideIf(generateInterfaces()); out.println("%s%s %s() {", visibility(generateInterfaces()), columnType, columnGetter); @@ -5511,7 +5520,7 @@ public class JavaGenerator extends AbstractGenerator { out.println("%sdef %s(value: %s): %s = {", visibility(override), columnSetter, columnType, columnSetterReturnType); } else if (kotlin) { - out.println("%s%svar %s: %s", visibility(override), override ? "override " : "", columnMember, columnType); + generateEmbeddablePojoProperty(out, false, override, columnType, columnMember); out.tab(1).println("set(value): %s {", columnSetterReturnType); } else { @@ -5545,6 +5554,10 @@ public class JavaGenerator extends AbstractGenerator { out.println("}"); } + private void generateEmbeddablePojoProperty(JavaWriter out, boolean immutable, boolean override, String columnType, String columnMember) { + out.println("%s%s%s %s: %s", visibility(override), override ? "override " : "", immutable ? "val" : "var", columnMember, columnType); + } + /** * Subclasses may override this method to provide their own pojo setters. */