diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java index d0d32f68a3..559d87f3df 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java @@ -69,6 +69,7 @@ abstract class AbstractGenerator implements Generator { boolean generateIndexes = true; boolean generateRelations = true; boolean generateImplicitJoinPathsToOne = true; + boolean generateImplicitJoinPathsAsKotlinProperties = true; boolean generateRowConvenienceToOne = true; boolean generateMultisetConvenienceOneToMany = true; boolean generateMultisetConvenienceManyToMany = true; @@ -295,6 +296,16 @@ abstract class AbstractGenerator implements Generator { this.generateImplicitJoinPathsToOne = generateImplicitJoinPathsToOne; } + @Override + public boolean generateImplicitJoinPathsAsKotlinProperties() { + return generateImplicitJoinPathsAsKotlinProperties && generateImplicitJoinPathsToOne(); + } + + @Override + public void setGenerateImplicitJoinPathsAsKotlinProperties(boolean generateImplicitJoinPathsAsKotlinProperties) { + this.generateImplicitJoinPathsAsKotlinProperties = generateImplicitJoinPathsAsKotlinProperties; + } + @Override public boolean generateRowConvenienceToOne() { return generateRowConvenienceToOne && generateRelations(); diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java index 8c20b072f8..003354112d 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java @@ -718,6 +718,8 @@ public class GenerationTool { generator.setGenerateRelations(g.getGenerate().isRelations()); if (g.getGenerate().isImplicitJoinPathsToOne() != null) generator.setGenerateImplicitJoinPathsToOne(g.getGenerate().isImplicitJoinPathsToOne()); + if (g.getGenerate().isImplicitJoinPathsAsKotlinProperties() != null) + generator.setGenerateImplicitJoinPathsAsKotlinProperties(g.getGenerate().isImplicitJoinPathsAsKotlinProperties()); if (g.getGenerate().isRowConvenienceToOne() != null) generator.setGenerateRowConvenienceToOne(g.getGenerate().isRowConvenienceToOne()); if (g.getGenerate().isMultisetConvenienceOneToMany() != null) diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java index f3226c3224..c2f085a509 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java @@ -127,6 +127,18 @@ public interface Generator { */ void setGenerateImplicitJoinPathsToOne(boolean generateImplicitJoinPathsToOne); + /** + * Whether implicit join path constructors should be offered as properties + * in Kotlin. + */ + boolean generateImplicitJoinPathsAsKotlinProperties(); + + /** + * Whether implicit join path constructors should be offered as properties + * in Kotlin. + */ + void setGenerateImplicitJoinPathsAsKotlinProperties(boolean generateImplicitJoinPathsAsKotlinProperties); + /** * Whether ROW convenience syntax for to-one relationships * should be generated. 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 e98df3d2a5..7ccefb1f86 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -6318,6 +6318,12 @@ public class JavaGenerator extends AbstractGenerator { out.println(); out.println("return _%s;", unquotedKeyMethodName); out.println("}"); + + if (generateImplicitJoinPathsAsKotlinProperties()) { + out.println(); + out.println("%sval %s: %s", visibility(), keyMethodName, referencedTableClassName); + out.tab(1).println("get(): %s = %s()", referencedTableClassName, keyMethodName); + } } else { out.println("%s%s %s() {", visibility(), referencedTableClassName, keyMethodName); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java index fc676d80cf..b9f42f46f1 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java @@ -39,6 +39,8 @@ public class Generate implements Serializable, XMLAppendable @XmlElement(defaultValue = "true") protected Boolean implicitJoinPathsToOne = true; @XmlElement(defaultValue = "true") + protected Boolean implicitJoinPathsAsKotlinProperties = true; + @XmlElement(defaultValue = "true") protected Boolean rowConvenienceToOne = true; @XmlElement(defaultValue = "true") protected Boolean multisetConvenienceOneToMany = true; @@ -327,6 +329,30 @@ public class Generate implements Serializable, XMLAppendable this.implicitJoinPathsToOne = value; } + /** + * Whether implicit join path constructors should be offered as properties in Kotlin. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isImplicitJoinPathsAsKotlinProperties() { + return implicitJoinPathsAsKotlinProperties; + } + + /** + * Sets the value of the implicitJoinPathsAsKotlinProperties property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setImplicitJoinPathsAsKotlinProperties(Boolean value) { + this.implicitJoinPathsAsKotlinProperties = value; + } + /** * Generate ROW convenience syntax for to-one relationships. *

@@ -2536,6 +2562,11 @@ public class Generate implements Serializable, XMLAppendable return this; } + public Generate withImplicitJoinPathsAsKotlinProperties(Boolean value) { + setImplicitJoinPathsAsKotlinProperties(value); + return this; + } + public Generate withRowConvenienceToOne(Boolean value) { setRowConvenienceToOne(value); return this; @@ -3056,6 +3087,7 @@ public class Generate implements Serializable, XMLAppendable builder.append("relations", relations); builder.append("sequenceFlags", sequenceFlags); builder.append("implicitJoinPathsToOne", implicitJoinPathsToOne); + builder.append("implicitJoinPathsAsKotlinProperties", implicitJoinPathsAsKotlinProperties); builder.append("rowConvenienceToOne", rowConvenienceToOne); builder.append("multisetConvenienceOneToMany", multisetConvenienceOneToMany); builder.append("multisetConvenienceManyToMany", multisetConvenienceManyToMany); @@ -3206,6 +3238,15 @@ public class Generate implements Serializable, XMLAppendable return false; } } + if (implicitJoinPathsAsKotlinProperties == null) { + if (other.implicitJoinPathsAsKotlinProperties!= null) { + return false; + } + } else { + if (!implicitJoinPathsAsKotlinProperties.equals(other.implicitJoinPathsAsKotlinProperties)) { + return false; + } + } if (rowConvenienceToOne == null) { if (other.rowConvenienceToOne!= null) { return false; @@ -4054,6 +4095,7 @@ public class Generate implements Serializable, XMLAppendable result = ((prime*result)+((relations == null)? 0 :relations.hashCode())); result = ((prime*result)+((sequenceFlags == null)? 0 :sequenceFlags.hashCode())); result = ((prime*result)+((implicitJoinPathsToOne == null)? 0 :implicitJoinPathsToOne.hashCode())); + result = ((prime*result)+((implicitJoinPathsAsKotlinProperties == null)? 0 :implicitJoinPathsAsKotlinProperties.hashCode())); result = ((prime*result)+((rowConvenienceToOne == null)? 0 :rowConvenienceToOne.hashCode())); result = ((prime*result)+((multisetConvenienceOneToMany == null)? 0 :multisetConvenienceOneToMany.hashCode())); result = ((prime*result)+((multisetConvenienceManyToMany == null)? 0 :multisetConvenienceManyToMany.hashCode())); diff --git a/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.17.0.xsd b/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.17.0.xsd index bfebdb315a..7f6bbcca5c 100644 --- a/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.17.0.xsd +++ b/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.17.0.xsd @@ -1738,6 +1738,10 @@ This is a prerequisite for various advanced features]]> + + + + ROW convenience syntax for to-one relationships.