Added configuration for Java records / Scala case classes / Kotlin data classes in code generator.
This commit is contained in:
Lukas Eder 2020-06-16 17:43:00 +02:00
parent 7570825334
commit 374d1af273
5 changed files with 225 additions and 1 deletions

View File

@ -38,6 +38,9 @@
package org.jooq.codegen;
import static java.lang.Boolean.TRUE;
import static org.jooq.codegen.AbstractGenerator.Language.JAVA;
import static org.jooq.codegen.AbstractGenerator.Language.KOTLIN;
import static org.jooq.codegen.AbstractGenerator.Language.SCALA;
import java.io.File;
import java.sql.Connection;
@ -87,6 +90,9 @@ abstract class AbstractGenerator implements Generator {
boolean generateRecords = true;
boolean generateRecordsImplementingRecordN = true;
boolean generatePojos = false;
boolean generatePojosAsJavaRecordClasses = false;
boolean generatePojosAsScalaCaseClasses = true;
boolean generatePojosAsKotlinDataClasses = true;
boolean generatePojosEqualsAndHashCode = false;
boolean generatePojosToString = true;
boolean generateImmutablePojos = false;
@ -500,7 +506,15 @@ abstract class AbstractGenerator implements Generator {
// [#1339] When immutable POJOs are generated, POJOs must be generated
// [#1280] When DAOs are generated, POJOs must be generated, too
return generatePojos || generateImmutablePojos || generateDaos;
// [#3713] Scala case classes
// [#10287] Java records
// [#10288] Kotlin data classes
return generatePojos
|| generatePojosAsJavaRecordClasses && language == JAVA
|| generatePojosAsScalaCaseClasses && language == SCALA
|| generatePojosAsKotlinDataClasses && language == KOTLIN
|| generateImmutablePojos
|| generateDaos;
}
@Override
@ -508,6 +522,36 @@ abstract class AbstractGenerator implements Generator {
this.generatePojos = generatePojos;
}
@Override
public boolean generatePojosAsJavaRecordClasses() {
return generatePojosAsJavaRecordClasses;
}
@Override
public void setGeneratePojosAsJavaRecordClasses(boolean pojosAsJavaRecordClasses) {
this.generatePojosAsJavaRecordClasses = pojosAsJavaRecordClasses;
}
@Override
public boolean generatePojosAsScalaCaseClasses() {
return generatePojosAsScalaCaseClasses;
}
@Override
public void setGeneratePojosAsScalaCaseClasses(boolean pojosAsScalaCaseClasses) {
this.generatePojosAsScalaCaseClasses = pojosAsScalaCaseClasses;
}
@Override
public boolean generatePojosAsKotlinDataClasses() {
return generatePojosAsKotlinDataClasses;
}
@Override
public void setGeneratePojosAsKotlinDataClasses(boolean pojosAsKotlinDataClasses) {
this.generatePojosAsKotlinDataClasses = pojosAsKotlinDataClasses;
}
@Override
public boolean generateImmutablePojos() {
return generateImmutablePojos;

View File

@ -709,6 +709,12 @@ public class GenerationTool {
generator.setGenerateRecordsImplementingRecordN(g.getGenerate().isRecordsImplementingRecordN());
if (g.getGenerate().isPojos() != null)
generator.setGeneratePojos(g.getGenerate().isPojos());
if (g.getGenerate().isPojosAsJavaRecordClasses() != null)
generator.setGeneratePojosAsJavaRecordClasses(g.getGenerate().isPojosAsJavaRecordClasses());
if (g.getGenerate().isPojosAsScalaCaseClasses() != null)
generator.setGeneratePojosAsScalaCaseClasses(g.getGenerate().isPojosAsScalaCaseClasses());
if (g.getGenerate().isPojosAsKotlinDataClasses() != null)
generator.setGeneratePojosAsKotlinDataClasses(g.getGenerate().isPojosAsKotlinDataClasses());
if (g.getGenerate().isImmutablePojos() != null)
generator.setGenerateImmutablePojos(g.getGenerate().isImmutablePojos());
if (g.getGenerate().isSerializablePojos() != null)

View File

@ -362,6 +362,42 @@ public interface Generator {
*/
void setGeneratePojos(boolean generatePojos);
/**
* Whether POJOs should be generated as Java records by the
* {@link JavaGenerator}.
*/
boolean generatePojosAsJavaRecordClasses();
/**
* Whether POJOs should be generated as Java records by the
* {@link JavaGenerator}.
*/
void setGeneratePojosAsJavaRecordClasses(boolean pojosAsJavaRecordClasses);
/**
* Whether POJOs should be generated as Scala case classes by the
* {@link ScalaGenerator}.
*/
boolean generatePojosAsScalaCaseClasses();
/**
* Whether POJOs should be generated as Scala case classes by the
* {@link ScalaGenerator}.
*/
void setGeneratePojosAsScalaCaseClasses(boolean pojosAsScalaCaseClasses);
/**
* Whether POJOs should be generated as Kotlin data classes by the
* {@link KotlinGenerator}.
*/
boolean generatePojosAsKotlinDataClasses();
/**
* Whether POJOs should be generated as Kotlin data classes by the
* {@link KotlinGenerator}.
*/
void setGeneratePojosAsKotlinDataClasses(boolean pojosAsKotlinDataClasses);
/**
* Whether immutable POJO's should be generated in addition to records
*/

View File

@ -92,6 +92,12 @@ public class Generate implements Serializable, XMLAppendable
@XmlElement(defaultValue = "true")
protected Boolean pojosToString = true;
@XmlElement(defaultValue = "false")
protected Boolean pojosAsJavaRecordClasses = false;
@XmlElement(defaultValue = "true")
protected Boolean pojosAsScalaCaseClasses = true;
@XmlElement(defaultValue = "true")
protected Boolean pojosAsKotlinDataClasses = true;
@XmlElement(defaultValue = "false")
protected Boolean immutablePojos = false;
@XmlElement(defaultValue = "true")
protected Boolean serializablePojos = true;
@ -896,6 +902,78 @@ public class Generate implements Serializable, XMLAppendable
this.pojosToString = value;
}
/**
* Generate POJOs as records, when using the JavaGenerator.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isPojosAsJavaRecordClasses() {
return pojosAsJavaRecordClasses;
}
/**
* Sets the value of the pojosAsJavaRecordClasses property.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setPojosAsJavaRecordClasses(Boolean value) {
this.pojosAsJavaRecordClasses = value;
}
/**
* Generate POJOs as case classes, when using the ScalaGenerator.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isPojosAsScalaCaseClasses() {
return pojosAsScalaCaseClasses;
}
/**
* Sets the value of the pojosAsScalaCaseClasses property.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setPojosAsScalaCaseClasses(Boolean value) {
this.pojosAsScalaCaseClasses = value;
}
/**
* Generate POJOs as data classes, when using the KotlinGenerator.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isPojosAsKotlinDataClasses() {
return pojosAsKotlinDataClasses;
}
/**
* Sets the value of the pojosAsKotlinDataClasses property.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setPojosAsKotlinDataClasses(Boolean value) {
this.pojosAsKotlinDataClasses = value;
}
/**
* Generate immutable POJOs.
*
@ -2233,6 +2311,21 @@ public class Generate implements Serializable, XMLAppendable
return this;
}
public Generate withPojosAsJavaRecordClasses(Boolean value) {
setPojosAsJavaRecordClasses(value);
return this;
}
public Generate withPojosAsScalaCaseClasses(Boolean value) {
setPojosAsScalaCaseClasses(value);
return this;
}
public Generate withPojosAsKotlinDataClasses(Boolean value) {
setPojosAsKotlinDataClasses(value);
return this;
}
public Generate withImmutablePojos(Boolean value) {
setImmutablePojos(value);
return this;
@ -2530,6 +2623,9 @@ public class Generate implements Serializable, XMLAppendable
builder.append("pojos", pojos);
builder.append("pojosEqualsAndHashCode", pojosEqualsAndHashCode);
builder.append("pojosToString", pojosToString);
builder.append("pojosAsJavaRecordClasses", pojosAsJavaRecordClasses);
builder.append("pojosAsScalaCaseClasses", pojosAsScalaCaseClasses);
builder.append("pojosAsKotlinDataClasses", pojosAsKotlinDataClasses);
builder.append("immutablePojos", immutablePojos);
builder.append("serializablePojos", serializablePojos);
builder.append("interfaces", interfaces);
@ -2870,6 +2966,33 @@ public class Generate implements Serializable, XMLAppendable
return false;
}
}
if (pojosAsJavaRecordClasses == null) {
if (other.pojosAsJavaRecordClasses!= null) {
return false;
}
} else {
if (!pojosAsJavaRecordClasses.equals(other.pojosAsJavaRecordClasses)) {
return false;
}
}
if (pojosAsScalaCaseClasses == null) {
if (other.pojosAsScalaCaseClasses!= null) {
return false;
}
} else {
if (!pojosAsScalaCaseClasses.equals(other.pojosAsScalaCaseClasses)) {
return false;
}
}
if (pojosAsKotlinDataClasses == null) {
if (other.pojosAsKotlinDataClasses!= null) {
return false;
}
} else {
if (!pojosAsKotlinDataClasses.equals(other.pojosAsKotlinDataClasses)) {
return false;
}
}
if (immutablePojos == null) {
if (other.immutablePojos!= null) {
return false;
@ -3348,6 +3471,9 @@ public class Generate implements Serializable, XMLAppendable
result = ((prime*result)+((pojos == null)? 0 :pojos.hashCode()));
result = ((prime*result)+((pojosEqualsAndHashCode == null)? 0 :pojosEqualsAndHashCode.hashCode()));
result = ((prime*result)+((pojosToString == null)? 0 :pojosToString.hashCode()));
result = ((prime*result)+((pojosAsJavaRecordClasses == null)? 0 :pojosAsJavaRecordClasses.hashCode()));
result = ((prime*result)+((pojosAsScalaCaseClasses == null)? 0 :pojosAsScalaCaseClasses.hashCode()));
result = ((prime*result)+((pojosAsKotlinDataClasses == null)? 0 :pojosAsKotlinDataClasses.hashCode()));
result = ((prime*result)+((immutablePojos == null)? 0 :immutablePojos.hashCode()));
result = ((prime*result)+((serializablePojos == null)? 0 :serializablePojos.hashCode()));
result = ((prime*result)+((interfaces == null)? 0 :interfaces.hashCode()));

View File

@ -1223,6 +1223,18 @@ jOOQ version used for source code.]]></jxb:javadoc></jxb:property></appinfo></an
<element name="pojosToString" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate basic toString() methods in POJOs.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="pojosAsJavaRecordClasses" type="boolean" default="false" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate POJOs as records, when using the JavaGenerator.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="pojosAsScalaCaseClasses" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate POJOs as case classes, when using the ScalaGenerator.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="pojosAsKotlinDataClasses" type="boolean" default="true" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate POJOs as data classes, when using the KotlinGenerator.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="immutablePojos" type="boolean" default="false" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate immutable POJOs.]]></jxb:javadoc></jxb:property></appinfo></annotation>