Added configuration for Java records / Scala case classes / Kotlin data classes in code generator.
This commit is contained in:
parent
7570825334
commit
374d1af273
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
*/
|
||||
|
||||
@ -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()));
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user