[jOOQ/jOOQ#17148] Support Scala 3 enum types
This commit is contained in:
parent
809e0c1cf9
commit
8aee20e2b0
@ -106,6 +106,7 @@ abstract class AbstractGenerator implements Generator {
|
||||
boolean generateRecords = true;
|
||||
boolean generateRecordsImplementingRecordN = false;
|
||||
boolean generateEnumsAsScalaSealedTraits = false;
|
||||
boolean generateEnumsAsScalaEnums = true;
|
||||
boolean generatePojos = false;
|
||||
boolean generatePojosAsJavaRecordClasses = false;
|
||||
boolean generatePojosAsScalaCaseClasses = true;
|
||||
@ -674,6 +675,19 @@ abstract class AbstractGenerator implements Generator {
|
||||
@Override
|
||||
public void setGenerateEnumsAsScalaSealedTraits(boolean generateEnumsAsScalaSealedTraits) {
|
||||
this.generateEnumsAsScalaSealedTraits = generateEnumsAsScalaSealedTraits;
|
||||
|
||||
if (generateEnumsAsScalaSealedTraits)
|
||||
log.warn("Deprecation", "The <generateEnumsAsScalaSealedTraits/> flag is deprecated and will be removed in the future.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean generateEnumsAsScalaEnums() {
|
||||
return generateEnumsAsScalaEnums && language == Language.SCALA_3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGenerateEnumsAsScalaEnums(boolean generateEnumsAsScalaEnums) {
|
||||
this.generateEnumsAsScalaEnums = generateEnumsAsScalaEnums;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -814,6 +814,8 @@ public class GenerationTool {
|
||||
generator.setGenerateRecordsImplementingRecordN(g.getGenerate().isRecordsImplementingRecordN());
|
||||
if (g.getGenerate().isEnumsAsScalaSealedTraits() != null)
|
||||
generator.setGenerateEnumsAsScalaSealedTraits(g.getGenerate().isEnumsAsScalaSealedTraits());
|
||||
if (g.getGenerate().isEnumsAsScalaEnums() != null)
|
||||
generator.setGenerateEnumsAsScalaEnums(g.getGenerate().isEnumsAsScalaEnums());
|
||||
if (g.getGenerate().isPojos() != null)
|
||||
generator.setGeneratePojos(g.getGenerate().isPojos());
|
||||
if (g.getGenerate().isPojosAsJavaRecordClasses() != null)
|
||||
|
||||
@ -515,6 +515,20 @@ public interface Generator {
|
||||
@Deprecated
|
||||
void setGenerateEnumsAsScalaSealedTraits(boolean generateEnumsAsScalaSealedTraits);
|
||||
|
||||
/**
|
||||
* Whether enums are generated as Scala 3 enums by the
|
||||
* {@link ScalaGenerator}, if Scala 3 is supported.
|
||||
*/
|
||||
@Deprecated
|
||||
boolean generateEnumsAsScalaEnums();
|
||||
|
||||
/**
|
||||
* Whether enums are generated as Scala 3 enums by the
|
||||
* {@link ScalaGenerator}, if Scala 3 is supported.
|
||||
*/
|
||||
@Deprecated
|
||||
void setGenerateEnumsAsScalaEnums(boolean generateEnumsAsScalaEnums);
|
||||
|
||||
/**
|
||||
* Whether POJO's should be generated in addition to records
|
||||
*/
|
||||
|
||||
@ -4487,7 +4487,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
Language l = language;
|
||||
|
||||
try {
|
||||
if (!generateEnumsAsScalaSealedTraits()) {
|
||||
if (!generateEnumsAsScalaSealedTraits() && !generateEnumsAsScalaEnums()) {
|
||||
scala = false;
|
||||
language = l.isScala() ? JAVA : l;
|
||||
getStrategy().setTargetLanguage(language);
|
||||
@ -4520,63 +4520,86 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
boolean noCatalog = enumHasNoSchema || noSchema || !generateDefaultCatalog(e.getCatalog());
|
||||
|
||||
if (scala) {
|
||||
out.println("object %s {", className);
|
||||
out.println();
|
||||
if (generateEnumsAsScalaEnums()) {
|
||||
out.println("%senum %s(val literal: %s) extends %s[%s] with %s[[before= with ][separator= with ][%s]] {", visibility(), className, String.class, Enum.class, className, EnumType.class, interfaces);
|
||||
|
||||
for (String identifier : identifiers)
|
||||
out.println("val %s: %s = %s.%s", scalaWhitespaceSuffix(identifier), className, getStrategy().getJavaPackageName(e), identifier);
|
||||
for (int i = 0; i < literals.size(); i++)
|
||||
out.println("case %s extends %s(\"%s\")", identifiers.get(i), className, escapeString(literals.get(i)));
|
||||
|
||||
out.println();
|
||||
out.println("def values: %s[%s] = %s(",
|
||||
out.ref("scala.Array"),
|
||||
className,
|
||||
out.ref("scala.Array"));
|
||||
out.println("%soverride def getCatalog: %s = %s",
|
||||
visibilityPublic(), Catalog.class, noCatalog ? "null" : "getSchema.getCatalog");
|
||||
|
||||
for (int i = 0; i < identifiers.size(); i++) {
|
||||
out.print((i > 0 ? ", " : " "));
|
||||
out.println(identifiers.get(i));
|
||||
}
|
||||
// [#2135] Only the PostgreSQL database supports schema-scoped enum types
|
||||
out.println("%soverride def getSchema: %s = %s",
|
||||
visibilityPublic(), Schema.class, noSchema ? "null" : out.ref(getStrategy().getFullJavaIdentifier(e.getSchema()), 2));
|
||||
|
||||
out.println(")");
|
||||
out.println();
|
||||
out.println("%soverride def getName: %s = %s",
|
||||
visibilityPublic(), String.class, e.isSynthetic() ? "null" : "\"" + escapeString(e.getName()) + "\"");
|
||||
|
||||
out.println("def valueOf(s: %s): %s = s match {", String.class, className);
|
||||
for (int i = 0; i < identifiers.size(); i++) {
|
||||
out.println("case \"%s\" => %s", escapeString(literals.get(i)), identifiers.get(i));
|
||||
}
|
||||
out.println("case _ => throw new %s()", IllegalArgumentException.class);
|
||||
out.println("}");
|
||||
out.println("}");
|
||||
out.println("%soverride def getLiteral: String = literal", visibilityPublic());
|
||||
|
||||
out.println();
|
||||
out.println("sealed trait %s extends %s[[before= with ][separator= with ][%s]] {", className, EnumType.class, interfaces);
|
||||
|
||||
if (noCatalog)
|
||||
out.println("override def getCatalog: %s = null", Catalog.class);
|
||||
else
|
||||
out.println("override def getCatalog: %s = if (getSchema == null) null else getSchema().getCatalog()", Catalog.class);
|
||||
|
||||
// [#2135] Only the PostgreSQL database supports schema-scoped enum types
|
||||
out.println("override def getSchema: %s = %s",
|
||||
Schema.class,
|
||||
noSchema
|
||||
? "null"
|
||||
: out.ref(getStrategy().getFullJavaIdentifier(e.getSchema()), 2));
|
||||
out.println("override def getName: %s = %s",
|
||||
String.class,
|
||||
e.isSynthetic() ? "null" : "\"" + escapeString(e.getName()) + "\"");
|
||||
|
||||
generateEnumClassFooter(e, out);
|
||||
out.println("}");
|
||||
|
||||
for (int i = 0; i < literals.size(); i++) {
|
||||
out.println();
|
||||
out.println("case object %s extends %s {", identifiers.get(i), className);
|
||||
out.println("override def getLiteral: %s = \"%s\"",
|
||||
String.class,
|
||||
literals.get(i));
|
||||
generateEnumClassFooter(e, out);
|
||||
out.println("}");
|
||||
}
|
||||
else {
|
||||
out.println("object %s {", className);
|
||||
out.println();
|
||||
|
||||
for (String identifier : identifiers)
|
||||
out.println("val %s: %s = %s.%s", scalaWhitespaceSuffix(identifier), className, getStrategy().getJavaPackageName(e), identifier);
|
||||
|
||||
out.println();
|
||||
out.println("def values: %s[%s] = %s(",
|
||||
out.ref("scala.Array"),
|
||||
className,
|
||||
out.ref("scala.Array"));
|
||||
|
||||
for (int i = 0; i < identifiers.size(); i++) {
|
||||
out.print((i > 0 ? ", " : " "));
|
||||
out.println(identifiers.get(i));
|
||||
}
|
||||
|
||||
out.println(")");
|
||||
out.println();
|
||||
|
||||
out.println("def valueOf(s: %s): %s = s match {", String.class, className);
|
||||
for (int i = 0; i < identifiers.size(); i++) {
|
||||
out.println("case \"%s\" => %s", escapeString(literals.get(i)), identifiers.get(i));
|
||||
}
|
||||
out.println("case _ => throw new %s()", IllegalArgumentException.class);
|
||||
out.println("}");
|
||||
out.println("}");
|
||||
|
||||
out.println();
|
||||
out.println("sealed trait %s extends %s[[before= with ][separator= with ][%s]] {", className, EnumType.class, interfaces);
|
||||
|
||||
if (noCatalog)
|
||||
out.println("override def getCatalog: %s = null", Catalog.class);
|
||||
else
|
||||
out.println("override def getCatalog: %s = if (getSchema == null) null else getSchema().getCatalog()", Catalog.class);
|
||||
|
||||
// [#2135] Only the PostgreSQL database supports schema-scoped enum types
|
||||
out.println("override def getSchema: %s = %s",
|
||||
Schema.class,
|
||||
noSchema
|
||||
? "null"
|
||||
: out.ref(getStrategy().getFullJavaIdentifier(e.getSchema()), 2));
|
||||
out.println("override def getName: %s = %s",
|
||||
String.class,
|
||||
e.isSynthetic() ? "null" : "\"" + escapeString(e.getName()) + "\"");
|
||||
|
||||
generateEnumClassFooter(e, out);
|
||||
out.println("}");
|
||||
|
||||
for (int i = 0; i < literals.size(); i++) {
|
||||
out.println();
|
||||
out.println("case object %s extends %s {", identifiers.get(i), className);
|
||||
out.println("override def getLiteral: %s = \"%s\"",
|
||||
String.class,
|
||||
literals.get(i));
|
||||
out.println("}");
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (kotlin) {
|
||||
interfaces.add(out.ref(EnumType.class));
|
||||
|
||||
@ -110,6 +110,8 @@ public class Generate implements Serializable, XMLAppendable
|
||||
protected Boolean recordsImplementingRecordN = false;
|
||||
@XmlElement(defaultValue = "false")
|
||||
protected Boolean enumsAsScalaSealedTraits = false;
|
||||
@XmlElement(defaultValue = "true")
|
||||
protected Boolean enumsAsScalaEnums = true;
|
||||
@XmlElement(defaultValue = "false")
|
||||
protected Boolean pojos = false;
|
||||
@XmlElement(defaultValue = "true")
|
||||
@ -1217,6 +1219,30 @@ public class Generate implements Serializable, XMLAppendable
|
||||
this.enumsAsScalaSealedTraits = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate enums as Scala 3.0 enums (if Scala 3 is supported).
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link Boolean }
|
||||
*
|
||||
*/
|
||||
public Boolean isEnumsAsScalaEnums() {
|
||||
return enumsAsScalaEnums;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate enums as Scala 3.0 enums (if Scala 3 is supported).
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link Boolean }
|
||||
*
|
||||
*/
|
||||
public void setEnumsAsScalaEnums(Boolean value) {
|
||||
this.enumsAsScalaEnums = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate POJOs.
|
||||
*
|
||||
@ -3597,6 +3623,15 @@ public class Generate implements Serializable, XMLAppendable
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate enums as Scala 3.0 enums (if Scala 3 is supported).
|
||||
*
|
||||
*/
|
||||
public Generate withEnumsAsScalaEnums(Boolean value) {
|
||||
setEnumsAsScalaEnums(value);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate POJOs.
|
||||
*
|
||||
@ -4426,6 +4461,7 @@ public class Generate implements Serializable, XMLAppendable
|
||||
builder.append("records", records);
|
||||
builder.append("recordsImplementingRecordN", recordsImplementingRecordN);
|
||||
builder.append("enumsAsScalaSealedTraits", enumsAsScalaSealedTraits);
|
||||
builder.append("enumsAsScalaEnums", enumsAsScalaEnums);
|
||||
builder.append("pojos", pojos);
|
||||
builder.append("pojosEqualsAndHashCode", pojosEqualsAndHashCode);
|
||||
builder.append("pojosToString", pojosToString);
|
||||
@ -4882,6 +4918,15 @@ public class Generate implements Serializable, XMLAppendable
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (enumsAsScalaEnums == null) {
|
||||
if (other.enumsAsScalaEnums!= null) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (!enumsAsScalaEnums.equals(other.enumsAsScalaEnums)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (pojos == null) {
|
||||
if (other.pojos!= null) {
|
||||
return false;
|
||||
@ -5684,6 +5729,7 @@ public class Generate implements Serializable, XMLAppendable
|
||||
result = ((prime*result)+((records == null)? 0 :records.hashCode()));
|
||||
result = ((prime*result)+((recordsImplementingRecordN == null)? 0 :recordsImplementingRecordN.hashCode()));
|
||||
result = ((prime*result)+((enumsAsScalaSealedTraits == null)? 0 :enumsAsScalaSealedTraits.hashCode()));
|
||||
result = ((prime*result)+((enumsAsScalaEnums == null)? 0 :enumsAsScalaEnums.hashCode()));
|
||||
result = ((prime*result)+((pojos == null)? 0 :pojos.hashCode()));
|
||||
result = ((prime*result)+((pojosEqualsAndHashCode == null)? 0 :pojosEqualsAndHashCode.hashCode()));
|
||||
result = ((prime*result)+((pojosToString == null)? 0 :pojosToString.hashCode()));
|
||||
|
||||
@ -2671,6 +2671,10 @@ jOOQ API, without adding custom data type bindings to them.]]></jxb:javadoc></jx
|
||||
</appinfo>
|
||||
</annotation>
|
||||
</element>
|
||||
|
||||
<element name="enumsAsScalaEnums" type="boolean" default="true" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate enums as Scala 3.0 enums (if Scala 3 is supported).]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="pojos" type="boolean" default="false" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate POJOs.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user