[jOOQ/jOOQ#10654 Make the generation of the serialVersionUID configurable
This commit is contained in:
parent
c77c7abd4e
commit
f541eda04d
@ -49,6 +49,7 @@ import java.util.Set;
|
||||
|
||||
import org.jooq.meta.Database;
|
||||
import org.jooq.meta.jaxb.GeneratedAnnotationType;
|
||||
import org.jooq.meta.jaxb.GeneratedSerialVersionUID;
|
||||
import org.jooq.tools.JooqLogger;
|
||||
|
||||
|
||||
@ -103,6 +104,7 @@ abstract class AbstractGenerator implements Generator {
|
||||
String generateJPAVersion = "";
|
||||
boolean generateValidationAnnotations = false;
|
||||
boolean generateSpringAnnotations = false;
|
||||
GeneratedSerialVersionUID generatedSerialVersionUID = GeneratedSerialVersionUID.CONSTANT;
|
||||
boolean generateQueues = true;
|
||||
boolean generateLinks = true;
|
||||
boolean generateKeys = true;
|
||||
@ -645,6 +647,16 @@ abstract class AbstractGenerator implements Generator {
|
||||
this.generateSpringAnnotations = generateSpringAnnotations;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GeneratedSerialVersionUID generatedSerialVersionUID() {
|
||||
return generatedSerialVersionUID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGenerateGeneratedSerialVersionUID(GeneratedSerialVersionUID generatedSerialVersionUID) {
|
||||
this.generatedSerialVersionUID = generatedSerialVersionUID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean generateGlobalObjectReferences() {
|
||||
return generateGlobalObjectReferences;
|
||||
|
||||
@ -747,6 +747,8 @@ public class GenerationTool {
|
||||
generator.setGenerateValidationAnnotations(g.getGenerate().isValidationAnnotations());
|
||||
if (g.getGenerate().isSpringAnnotations() != null)
|
||||
generator.setGenerateSpringAnnotations(g.getGenerate().isSpringAnnotations());
|
||||
if (g.getGenerate().getGeneratedSerialVersionUID() != null)
|
||||
generator.setGenerateGeneratedSerialVersionUID(g.getGenerate().getGeneratedSerialVersionUID());
|
||||
if (g.getGenerate().isQueues() != null)
|
||||
generator.setGenerateQueues(g.getGenerate().isQueues());
|
||||
if (g.getGenerate().isLinks() != null)
|
||||
|
||||
@ -43,6 +43,7 @@ import java.util.Locale;
|
||||
|
||||
import org.jooq.meta.Database;
|
||||
import org.jooq.meta.jaxb.GeneratedAnnotationType;
|
||||
import org.jooq.meta.jaxb.GeneratedSerialVersionUID;
|
||||
|
||||
/**
|
||||
* The Generator provides a basic interface for java code generation
|
||||
@ -505,6 +506,16 @@ public interface Generator {
|
||||
*/
|
||||
void setGenerateSpringAnnotations(boolean generateSpringAnnotations);
|
||||
|
||||
/**
|
||||
* The type of <code>serialVersionUID</code> that should be generated.
|
||||
*/
|
||||
GeneratedSerialVersionUID generatedSerialVersionUID();
|
||||
|
||||
/**
|
||||
* The type of <code>serialVersionUID</code> that should be generated.
|
||||
*/
|
||||
void setGenerateGeneratedSerialVersionUID(GeneratedSerialVersionUID generatedSerialVersionUID);
|
||||
|
||||
/**
|
||||
* Whether global object references should be generated
|
||||
*/
|
||||
|
||||
@ -8315,7 +8315,7 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
// [#3880] Users may need to call this method
|
||||
protected JavaWriter newJavaWriter(File file) {
|
||||
file = fixSuffix(file);
|
||||
JavaWriter result = new JavaWriter(file, generateFullyQualifiedTypes(), targetEncoding, generateJavadoc(), fileCache);
|
||||
JavaWriter result = new JavaWriter(file, generateFullyQualifiedTypes(), targetEncoding, generateJavadoc(), fileCache, generatedSerialVersionUID());
|
||||
|
||||
if (generateIndentation != null)
|
||||
result.tabString(generateIndentation);
|
||||
|
||||
@ -17,6 +17,7 @@ import java.util.TreeSet;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.jooq.meta.jaxb.GeneratedSerialVersionUID;
|
||||
import org.jooq.tools.StringUtils;
|
||||
|
||||
/**
|
||||
@ -29,19 +30,20 @@ import org.jooq.tools.StringUtils;
|
||||
*/
|
||||
public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
|
||||
private static final String SERIAL_STATEMENT = "__SERIAL_STATEMENT__";
|
||||
private static final String IMPORT_STATEMENT = "__IMPORT_STATEMENT__";
|
||||
private static final String SERIAL_STATEMENT = "__SERIAL_STATEMENT__";
|
||||
private static final String IMPORT_STATEMENT = "__IMPORT_STATEMENT__";
|
||||
|
||||
private final Pattern fullyQualifiedTypes;
|
||||
private final boolean javadoc;
|
||||
private final Set<String> refConflicts;
|
||||
private final Set<String> qualifiedTypes = new TreeSet<>(qualifiedTypeComparator());
|
||||
private final Map<String, String> unqualifiedTypes = new TreeMap<>();
|
||||
private final String className;
|
||||
private String packageName;
|
||||
private final boolean isJava;
|
||||
private final boolean isScala;
|
||||
private final boolean isKotlin;
|
||||
private final Pattern fullyQualifiedTypes;
|
||||
private final boolean javadoc;
|
||||
private final Set<String> refConflicts;
|
||||
private final Set<String> qualifiedTypes = new TreeSet<>(qualifiedTypeComparator());
|
||||
private final Map<String, String> unqualifiedTypes = new TreeMap<>();
|
||||
private final String className;
|
||||
private String packageName;
|
||||
private final boolean isJava;
|
||||
private final boolean isScala;
|
||||
private final boolean isKotlin;
|
||||
private final GeneratedSerialVersionUID generatedSerialVersionUID;
|
||||
|
||||
public JavaWriter(File file, String fullyQualifiedTypes) {
|
||||
this(file, fullyQualifiedTypes, null);
|
||||
@ -56,6 +58,10 @@ public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
}
|
||||
|
||||
public JavaWriter(File file, String fullyQualifiedTypes, String encoding, boolean javadoc, Files files) {
|
||||
this(file, fullyQualifiedTypes, encoding, javadoc, files, GeneratedSerialVersionUID.CONSTANT);
|
||||
}
|
||||
|
||||
public JavaWriter(File file, String fullyQualifiedTypes, String encoding, boolean javadoc, Files files, GeneratedSerialVersionUID generatedSerialVersionUID) {
|
||||
super(file, encoding, files);
|
||||
|
||||
this.className = file.getName().replaceAll("\\.(java|scala|kt)$", "");
|
||||
@ -65,6 +71,7 @@ public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
this.refConflicts = new HashSet<>();
|
||||
this.fullyQualifiedTypes = fullyQualifiedTypes == null ? null : Pattern.compile(fullyQualifiedTypes);
|
||||
this.javadoc = javadoc;
|
||||
this.generatedSerialVersionUID = generatedSerialVersionUID;
|
||||
|
||||
if (isJava || isKotlin)
|
||||
tabString(" ");
|
||||
@ -165,7 +172,7 @@ public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
}
|
||||
|
||||
public void printSerial() {
|
||||
if (isJava) {
|
||||
if (isJava && generatedSerialVersionUID != GeneratedSerialVersionUID.OFF) {
|
||||
println();
|
||||
println("private static final long serialVersionUID = %s;", SERIAL_STATEMENT);
|
||||
}
|
||||
@ -233,7 +240,23 @@ public class JavaWriter extends GeneratorWriter<JavaWriter> {
|
||||
}
|
||||
|
||||
string = string.replaceAll(IMPORT_STATEMENT, Matcher.quoteReplacement(importString.toString()));
|
||||
string = string.replaceAll(SERIAL_STATEMENT, Matcher.quoteReplacement(String.valueOf(string.hashCode())));
|
||||
|
||||
if (isJava) {
|
||||
switch (StringUtils.defaultIfNull(generatedSerialVersionUID, GeneratedSerialVersionUID.CONSTANT)) {
|
||||
case HASH:
|
||||
string = string.replaceAll(SERIAL_STATEMENT, Matcher.quoteReplacement(String.valueOf(string.hashCode())));
|
||||
break;
|
||||
|
||||
case OFF:
|
||||
break;
|
||||
|
||||
case CONSTANT:
|
||||
default:
|
||||
string = string.replaceAll(SERIAL_STATEMENT, Matcher.quoteReplacement("1L"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
|
||||
@ -183,6 +183,9 @@ public class Generate implements Serializable, XMLAppendable
|
||||
protected Boolean javaBeansGettersAndSetters = false;
|
||||
@XmlElement(defaultValue = "false")
|
||||
protected Boolean varargSetters = false;
|
||||
@XmlElement(defaultValue = "CONSTANT")
|
||||
@XmlSchemaType(name = "string")
|
||||
protected GeneratedSerialVersionUID generatedSerialVersionUID = GeneratedSerialVersionUID.CONSTANT;
|
||||
@XmlElement(defaultValue = "")
|
||||
@XmlJavaTypeAdapter(StringAdapter.class)
|
||||
protected String fullyQualifiedTypes = "";
|
||||
@ -2017,6 +2020,22 @@ public class Generate implements Serializable, XMLAppendable
|
||||
this.varargSetters = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* The serial version UID to be generated in all files.
|
||||
*
|
||||
*/
|
||||
public GeneratedSerialVersionUID getGeneratedSerialVersionUID() {
|
||||
return generatedSerialVersionUID;
|
||||
}
|
||||
|
||||
/**
|
||||
* The serial version UID to be generated in all files.
|
||||
*
|
||||
*/
|
||||
public void setGeneratedSerialVersionUID(GeneratedSerialVersionUID value) {
|
||||
this.generatedSerialVersionUID = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* A regular expression matching all the types in generated code that should be fully qualified.
|
||||
* <p>
|
||||
@ -2545,6 +2564,15 @@ public class Generate implements Serializable, XMLAppendable
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* The serial version UID to be generated in all files.
|
||||
*
|
||||
*/
|
||||
public Generate withGeneratedSerialVersionUID(GeneratedSerialVersionUID value) {
|
||||
setGeneratedSerialVersionUID(value);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* A regular expression matching all the types in generated code that should be fully qualified.
|
||||
* <p>
|
||||
@ -2669,6 +2697,7 @@ public class Generate implements Serializable, XMLAppendable
|
||||
builder.append("fluentSetters", fluentSetters);
|
||||
builder.append("javaBeansGettersAndSetters", javaBeansGettersAndSetters);
|
||||
builder.append("varargSetters", varargSetters);
|
||||
builder.append("generatedSerialVersionUID", generatedSerialVersionUID);
|
||||
builder.append("fullyQualifiedTypes", fullyQualifiedTypes);
|
||||
builder.append("emptyCatalogs", emptyCatalogs);
|
||||
builder.append("emptySchemas", emptySchemas);
|
||||
@ -3380,6 +3409,15 @@ public class Generate implements Serializable, XMLAppendable
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (generatedSerialVersionUID == null) {
|
||||
if (other.generatedSerialVersionUID!= null) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (!generatedSerialVersionUID.equals(other.generatedSerialVersionUID)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (fullyQualifiedTypes == null) {
|
||||
if (other.fullyQualifiedTypes!= null) {
|
||||
return false;
|
||||
@ -3517,6 +3555,7 @@ public class Generate implements Serializable, XMLAppendable
|
||||
result = ((prime*result)+((fluentSetters == null)? 0 :fluentSetters.hashCode()));
|
||||
result = ((prime*result)+((javaBeansGettersAndSetters == null)? 0 :javaBeansGettersAndSetters.hashCode()));
|
||||
result = ((prime*result)+((varargSetters == null)? 0 :varargSetters.hashCode()));
|
||||
result = ((prime*result)+((generatedSerialVersionUID == null)? 0 :generatedSerialVersionUID.hashCode()));
|
||||
result = ((prime*result)+((fullyQualifiedTypes == null)? 0 :fullyQualifiedTypes.hashCode()));
|
||||
result = ((prime*result)+((emptyCatalogs == null)? 0 :emptyCatalogs.hashCode()));
|
||||
result = ((prime*result)+((emptySchemas == null)? 0 :emptySchemas.hashCode()));
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
|
||||
package org.jooq.meta.jaxb;
|
||||
|
||||
import javax.xml.bind.annotation.XmlEnum;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
|
||||
/**
|
||||
* <p>Java class for GeneratedSerialVersionUID.
|
||||
*
|
||||
* <p>The following schema fragment specifies the expected content contained within this class.
|
||||
* <p>
|
||||
* <pre>
|
||||
* <simpleType name="GeneratedSerialVersionUID">
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}string">
|
||||
* <enumeration value="HASH"/>
|
||||
* <enumeration value="CONSTANT"/>
|
||||
* <enumeration value="OFF"/>
|
||||
* </restriction>
|
||||
* </simpleType>
|
||||
* </pre>
|
||||
*
|
||||
*/
|
||||
@XmlType(name = "GeneratedSerialVersionUID")
|
||||
@XmlEnum
|
||||
public enum GeneratedSerialVersionUID {
|
||||
|
||||
HASH,
|
||||
CONSTANT,
|
||||
OFF;
|
||||
|
||||
public String value() {
|
||||
return name();
|
||||
}
|
||||
|
||||
public static GeneratedSerialVersionUID fromValue(String v) {
|
||||
return valueOf(v);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1739,6 +1739,10 @@ Custom GeneratorStrategy implementations are unaffected]]></jxb:javadoc></jxb:pr
|
||||
<p>
|
||||
This may lead to compilation warnings in current Java versions.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="generatedSerialVersionUID" type="tns:GeneratedSerialVersionUID" default="CONSTANT" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The serial version UID to be generated in all files.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="fullyQualifiedTypes" type="string" default="" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A regular expression matching all the types in generated code that should be fully qualified.
|
||||
@ -1843,4 +1847,12 @@ e.g. org.jooq.generated.schema1, org.jooq.generated.schema2]]></jxb:javadoc></jx
|
||||
<enumeration value="JAVAX_ANNOTATION_PROCESSING_GENERATED"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<simpleType name="GeneratedSerialVersionUID">
|
||||
<restriction base="string">
|
||||
<enumeration value="HASH"/>
|
||||
<enumeration value="CONSTANT"/>
|
||||
<enumeration value="OFF"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
</schema>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user