diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java index 3fc33df5f2..ee948fc790 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java @@ -75,8 +75,10 @@ abstract class AbstractGenerator implements Generator { boolean generatePojosEqualsAndHashCode = false; boolean generatePojosToString = true; boolean generateImmutablePojos = false; + boolean generateSerializablePojos = true; boolean generateInterfaces = false; boolean generateImmutableInterfaces = false; + boolean generateSerializableInterfaces = true; boolean generateDaos = false; boolean generateJPAAnnotations = false; String generateJPAVersion = ""; @@ -383,6 +385,16 @@ abstract class AbstractGenerator implements Generator { this.generateImmutablePojos = generateImmutablePojos; } + @Override + public boolean generateSerializablePojos() { + return generateSerializablePojos && generatePojos(); + } + + @Override + public void setGenerateSerializablePojos(boolean generateSerializablePojos) { + this.generateSerializablePojos = generateSerializablePojos; + } + @Override public boolean generateInterfaces() { return generateInterfaces || generateImmutableInterfaces; @@ -403,6 +415,16 @@ abstract class AbstractGenerator implements Generator { this.generateImmutableInterfaces = generateImmutableInterfaces; } + @Override + public boolean generateSerializableInterfaces() { + return generateSerializableInterfaces && generateInterfaces(); + } + + @Override + public void setGenerateSerializableInterfaces(boolean generateSerializableInterfaces) { + this.generateSerializableInterfaces = generateSerializableInterfaces; + } + @Override public boolean generateDaos() { return generateDaos; diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java index bc9a6d2bf0..a2680b7a4e 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java @@ -607,10 +607,14 @@ public class GenerationTool { generator.setGeneratePojos(g.getGenerate().isPojos()); if (g.getGenerate().isImmutablePojos() != null) generator.setGenerateImmutablePojos(g.getGenerate().isImmutablePojos()); + if (g.getGenerate().isSerializablePojos() != null) + generator.setGenerateSerializablePojos(g.getGenerate().isSerializablePojos()); if (g.getGenerate().isInterfaces() != null) generator.setGenerateInterfaces(g.getGenerate().isInterfaces()); if (g.getGenerate().isImmutableInterfaces() != null) generator.setGenerateImmutableInterfaces(g.getGenerate().isImmutableInterfaces()); + if (g.getGenerate().isSerializableInterfaces() != null) + generator.setGenerateSerializableInterfaces(g.getGenerate().isSerializableInterfaces()); if (g.getGenerate().isDaos() != null) generator.setGenerateDaos(g.getGenerate().isDaos()); if (g.getGenerate().isJpaAnnotations() != null) diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java index c2b36af9fa..3f118e14b9 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java @@ -38,6 +38,8 @@ package org.jooq.util; +import java.io.Serializable; + import javax.annotation.Generated; /** @@ -229,6 +231,16 @@ public interface Generator { */ void setGenerateImmutablePojos(boolean generateImmutablePojos); + /** + * Whether generated POJO's should be {@link Serializable}. + */ + boolean generateSerializablePojos(); + + /** + * Whether generated POJO's should be {@link Serializable}. + */ + void setGenerateSerializablePojos(boolean generateSerializablePojos); + /** * Whether interfaces should be generated to be implemented by records and * POJO's @@ -251,6 +263,16 @@ public interface Generator { */ void setGenerateImmutableInterfaces(boolean generateImmutableInterfaces); + /** + * Whether generated interfaces should extend {@link Serializable}. + */ + boolean generateSerializableInterfaces(); + + /** + * Whether generated interfaces should extend {@link Serializable}. + */ + void setGenerateSerializableInterfaces(boolean generateSerializableInterfaces); + /** * Whether DAO's should be generated in addition to pojos */ diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java b/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java index 5e122b9405..636ec7e287 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GeneratorStrategyWrapper.java @@ -289,17 +289,18 @@ class GeneratorStrategyWrapper extends AbstractGeneratorStrategy { // [#1243] All generation modes can accept interfaces Set result = new LinkedHashSet(delegate.getJavaClassImplements(definition, mode)); - // [#1528] Generated interfaces (implemented by RECORD and POJO) are - // always Serializable - if (mode == Mode.INTERFACE) { + // [#1528] [#7210] Generated interfaces (implemented by RECORD and POJO) are + // Serializable by default + if (mode == Mode.INTERFACE + && generator.generateSerializableInterfaces()) result.add(Serializable.class.getName()); - } - // [#1528] POJOs only implement Serializable if they don't inherit - // Serializable from INTERFACE already - else if (mode == Mode.POJO && !generator.generateInterfaces()) { + // [#1528] [#4888] POJOs only implement Serializable by default if they don't inherit + // Serializable from INTERFACE already + else if (mode == Mode.POJO + && generator.generateSerializablePojos() + && (!generator.generateInterfaces() || !generator.generateSerializableInterfaces())) result.add(Serializable.class.getName()); - } return new ArrayList(result); } diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java index 73d06d46e7..55511afe3a 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -1727,9 +1727,9 @@ public class JavaGenerator extends AbstractGenerator { printTableJPAAnnotation(out, (TableDefinition) tableOrUDT); if (scala) - out.println("trait %s [[before=extends ][%s]] {", className, interfaces); + out.println("trait %s[[before= extends ][%s]] {", className, interfaces); else - out.println("public interface %s [[before=extends ][%s]] {", className, interfaces); + out.println("public interface %s[[before= extends ][%s]] {", className, interfaces); List> typedElements = getTypedElements(tableOrUDT); for (int i = 0; i < typedElements.size(); i++) { @@ -3070,9 +3070,8 @@ public class JavaGenerator extends AbstractGenerator { printTableJPAAnnotation(out, (TableDefinition) tableOrUDT); int maxLength = 0; - for (TypedElementDefinition column : getTypedElements(tableOrUDT)) { + for (TypedElementDefinition column : getTypedElements(tableOrUDT)) maxLength = Math.max(maxLength, out.ref(getJavaType(column.getType(resolver(Mode.POJO)), Mode.POJO)).length()); - } if (scala) { out.println("%sclass %s(", (generateImmutablePojos() ? "case " : ""), className); @@ -3092,7 +3091,10 @@ public class JavaGenerator extends AbstractGenerator { } else { out.println("public class %s[[before= extends ][%s]][[before= implements ][%s]] {", className, list(superName), interfaces); - out.printSerial(); + + if (generateSerializablePojos() || generateSerializableInterfaces()) + out.printSerial(); + out.println(); for (TypedElementDefinition column : getTypedElements(tableOrUDT)) { diff --git a/jOOQ-meta/src/main/java/org/jooq/util/jaxb/Generate.java b/jOOQ-meta/src/main/java/org/jooq/util/jaxb/Generate.java index ce9b53b1be..53fb451f81 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/jaxb/Generate.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/jaxb/Generate.java @@ -74,10 +74,14 @@ public class Generate implements Serializable protected Boolean pojosToString = true; @XmlElement(defaultValue = "false") protected Boolean immutablePojos = false; + @XmlElement(defaultValue = "true") + protected Boolean serializablePojos = true; @XmlElement(defaultValue = "false") protected Boolean interfaces = false; @XmlElement(defaultValue = "false") protected Boolean immutableInterfaces = false; + @XmlElement(defaultValue = "true") + protected Boolean serializableInterfaces = true; @XmlElement(defaultValue = "false") protected Boolean daos = false; @XmlElement(defaultValue = "false") @@ -640,6 +644,30 @@ public class Generate implements Serializable this.immutablePojos = value; } + /** + * Generate serializable POJOs. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isSerializablePojos() { + return serializablePojos; + } + + /** + * Sets the value of the serializablePojos property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSerializablePojos(Boolean value) { + this.serializablePojos = value; + } + /** * Generated interfaces to be implemented by records and/or POJOs. * @@ -688,6 +716,30 @@ public class Generate implements Serializable this.immutableInterfaces = value; } + /** + * Generate serializable interfaces. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isSerializableInterfaces() { + return serializableInterfaces; + } + + /** + * Sets the value of the serializableInterfaces property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setSerializableInterfaces(Boolean value) { + this.serializableInterfaces = value; + } + /** * Generate DAOs. * @@ -1726,6 +1778,11 @@ public class Generate implements Serializable return this; } + public Generate withSerializablePojos(Boolean value) { + setSerializablePojos(value); + return this; + } + public Generate withInterfaces(Boolean value) { setInterfaces(value); return this; @@ -1736,6 +1793,11 @@ public class Generate implements Serializable return this; } + public Generate withSerializableInterfaces(Boolean value) { + setSerializableInterfaces(value); + return this; + } + public Generate withDaos(Boolean value) { setDaos(value); return this; @@ -1989,12 +2051,18 @@ public class Generate implements Serializable sb.append(""); sb.append(immutablePojos); sb.append(""); + sb.append(""); + sb.append(serializablePojos); + sb.append(""); sb.append(""); sb.append(interfaces); sb.append(""); sb.append(""); sb.append(immutableInterfaces); sb.append(""); + sb.append(""); + sb.append(serializableInterfaces); + sb.append(""); sb.append(""); sb.append(daos); sb.append(""); @@ -2304,6 +2372,15 @@ public class Generate implements Serializable return false; } } + if (serializablePojos == null) { + if (other.serializablePojos!= null) { + return false; + } + } else { + if (!serializablePojos.equals(other.serializablePojos)) { + return false; + } + } if (interfaces == null) { if (other.interfaces!= null) { return false; @@ -2322,6 +2399,15 @@ public class Generate implements Serializable return false; } } + if (serializableInterfaces == null) { + if (other.serializableInterfaces!= null) { + return false; + } + } else { + if (!serializableInterfaces.equals(other.serializableInterfaces)) { + return false; + } + } if (daos == null) { if (other.daos!= null) { return false; @@ -2691,8 +2777,10 @@ public class Generate implements Serializable result = ((prime*result)+((pojosEqualsAndHashCode == null)? 0 :pojosEqualsAndHashCode.hashCode())); result = ((prime*result)+((pojosToString == null)? 0 :pojosToString.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())); result = ((prime*result)+((immutableInterfaces == null)? 0 :immutableInterfaces.hashCode())); + result = ((prime*result)+((serializableInterfaces == null)? 0 :serializableInterfaces.hashCode())); result = ((prime*result)+((daos == null)? 0 :daos.hashCode())); result = ((prime*result)+((jpaAnnotations == null)? 0 :jpaAnnotations.hashCode())); result = ((prime*result)+((jpaVersion == null)? 0 :jpaVersion.hashCode())); diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.11.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.11.0.xsd index 11705657e3..d062614052 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.11.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.11.0.xsd @@ -908,6 +908,10 @@ jOOQ version used for source code]]> + + + + @@ -916,6 +920,10 @@ jOOQ version used for source code]]> + + + +