[jOOQ/jOOQ#14853] Kotlin Code generator generates invalid code for

embeddables in POJOs when immutable interfaces is activated

This includes:

- [jOOQ/jOOQ#14855] Compilation error in generated code for embeddable
properties when reducing visibility to internal, and generating
interfaces
This commit is contained in:
Lukas Eder 2023-03-27 12:07:31 +02:00
parent d6dcaa3762
commit 0a65011729

View File

@ -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.
*/