[jOOQ/jOOQ#13516] KotlinGenerator should generate implicit joins path

accessors as properties
This commit is contained in:
Lukas Eder 2022-05-03 16:40:18 +02:00
parent 5050246b68
commit 51ba61d336
6 changed files with 77 additions and 0 deletions

View File

@ -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();

View File

@ -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)

View File

@ -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 <code>ROW</code> convenience syntax for to-one relationships
* should be generated.

View File

@ -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);

View File

@ -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 <code>ROW</code> convenience syntax for to-one relationships.
* <p>
@ -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()));

View File

@ -1738,6 +1738,10 @@ This is a prerequisite for various advanced features]]></jxb:javadoc></jxb:prope
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate implicit join path constructors on generated tables for outgoing foreign key relationships (to-one relationships)]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="implicitJoinPathsAsKotlinProperties" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether implicit join path constructors should be offered as properties in Kotlin.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="rowConvenienceToOne" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate <code>ROW</code> convenience syntax for to-one relationships.
<p>