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]]>