diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java
index 6d125d560c..e2a0ba2ad8 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java
@@ -64,100 +64,101 @@ abstract class AbstractGenerator implements Generator {
private static final JooqLogger log = JooqLogger.getLogger(AbstractGenerator.class);
- boolean generateDeprecated = true;
- boolean generateDeprecationOnUnknownTypes = true;
- boolean generateIndexes = true;
- boolean generateRelations = true;
- boolean generateImplicitJoinPathsToOne = true;
- boolean generateInstanceFields = true;
- VisibilityModifier generateVisibilityModifier = VisibilityModifier.DEFAULT;
- boolean generateGeneratedAnnotation = false;
- GeneratedAnnotationType generatedGeneratedAnnotationType = GeneratedAnnotationType.DETECT_FROM_JDK;
- boolean generateGeneratedAnnotationDate = true;
- boolean generateNonnullAnnotation = false;
- String generatedNonnullAnnotationType = "javax.annotation.Nonnull";
- boolean generateNullableAnnotation = false;
- String generatedNullableAnnotationType = "javax.annotation.Nullable";
- boolean generateConstructorPropertiesAnnotation = false;
+ boolean generateDeprecated = true;
+ boolean generateDeprecationOnUnknownTypes = true;
+ boolean generateIndexes = true;
+ boolean generateRelations = true;
+ boolean generateImplicitJoinPathsToOne = true;
+ boolean generateInstanceFields = true;
+ VisibilityModifier generateVisibilityModifier = VisibilityModifier.DEFAULT;
+ boolean generateGeneratedAnnotation = false;
+ GeneratedAnnotationType generatedGeneratedAnnotationType = GeneratedAnnotationType.DETECT_FROM_JDK;
+ boolean generateGeneratedAnnotationDate = true;
+ boolean generateNonnullAnnotation = false;
+ String generatedNonnullAnnotationType = "javax.annotation.Nonnull";
+ boolean generateNullableAnnotation = false;
+ String generatedNullableAnnotationType = "javax.annotation.Nullable";
+ boolean generateConstructorPropertiesAnnotation = false;
Boolean generateConstructorPropertiesAnnotationOnPojos;
Boolean generateConstructorPropertiesAnnotationOnRecords;
- boolean useSchemaVersionProvider = false;
- boolean useCatalogVersionProvider = false;
- boolean generateRoutines = true;
- boolean generateSequences = true;
- boolean generateSequenceFlags = true;
- boolean generateUDTs = true;
- boolean generateTables = true;
- boolean generateEmbeddables = true;
- boolean generateRecords = true;
- boolean generateRecordsImplementingRecordN = true;
- boolean generateEnumsAsScalaSealedTraits = false;
- boolean generatePojos = false;
- boolean generatePojosAsJavaRecordClasses = false;
- boolean generatePojosAsScalaCaseClasses = true;
- boolean generatePojosAsKotlinDataClasses = true;
- 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 = "";
- boolean generateValidationAnnotations = false;
- boolean generateSpringAnnotations = false;
- GeneratedSerialVersionUID generatedSerialVersionUID = GeneratedSerialVersionUID.CONSTANT;
- int maxMembersPerInitialiser = 500;
- boolean generateQueues = true;
- boolean generateLinks = true;
- boolean generateKeys = true;
- boolean generateGlobalObjectReferences = true;
- boolean generateGlobalCatalogReferences = true;
- boolean generateGlobalSchemaReferences = true;
- boolean generateGlobalRoutineReferences = true;
- boolean generateGlobalSequenceReferences = true;
- boolean generateGlobalTableReferences = true;
- boolean generateGlobalDomainReferences = true;
- boolean generateGlobalUDTReferences = true;
- boolean generateGlobalQueueReferences = true;
- boolean generateGlobalLinkReferences = true;
- boolean generateGlobalKeyReferences = true;
- boolean generateGlobalIndexReferences = true;
- boolean generateJavadoc = true;
- boolean generateComments = true;
- boolean generateCommentsOnAttributes = true;
- boolean generateCommentsOnCatalogs = true;
- boolean generateCommentsOnColumns = true;
- boolean generateCommentsOnKeys = true;
- boolean generateCommentsOnLinks = true;
- boolean generateCommentsOnPackages = true;
- boolean generateCommentsOnParameters = true;
- boolean generateCommentsOnQueues = true;
- boolean generateCommentsOnRoutines = true;
- boolean generateCommentsOnSchemas = true;
- boolean generateCommentsOnSequences = true;
- boolean generateCommentsOnTables = true;
- boolean generateCommentsOnUDTs = true;
- boolean generateCommentsOnEmbeddables = true;
- boolean generateSources = true;
- boolean generateSourcesOnViews = true;
- boolean generateFluentSetters = false;
- boolean generateJavaBeansGettersAndSetters = false;
- boolean generateVarargsSetters = true;
- String generateFullyQualifiedTypes = "";
- boolean generateJavaTimeTypes = true;
- boolean generateTableValuedFunctions = false;
- boolean generateEmptyCatalogs = false;
- boolean generateEmptySchemas = false;
- String generateNewline = "\n";
+ boolean useSchemaVersionProvider = false;
+ boolean useCatalogVersionProvider = false;
+ boolean generateRoutines = true;
+ boolean generateSequences = true;
+ boolean generateSequenceFlags = true;
+ boolean generateUDTs = true;
+ boolean generateTables = true;
+ boolean generateEmbeddables = true;
+ boolean generateRecords = true;
+ boolean generateRecordsImplementingRecordN = true;
+ boolean generateEnumsAsScalaSealedTraits = false;
+ boolean generatePojos = false;
+ boolean generatePojosAsJavaRecordClasses = false;
+ boolean generatePojosAsScalaCaseClasses = true;
+ boolean generatePojosAsKotlinDataClasses = true;
+ 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 = "";
+ boolean generateValidationAnnotations = false;
+ boolean generateSpringAnnotations = false;
+ boolean generateKotlinSetterJvmNameAnnotationsOnIsPrefix = true;
+ GeneratedSerialVersionUID generatedSerialVersionUID = GeneratedSerialVersionUID.CONSTANT;
+ int maxMembersPerInitialiser = 500;
+ boolean generateQueues = true;
+ boolean generateLinks = true;
+ boolean generateKeys = true;
+ boolean generateGlobalObjectReferences = true;
+ boolean generateGlobalCatalogReferences = true;
+ boolean generateGlobalSchemaReferences = true;
+ boolean generateGlobalRoutineReferences = true;
+ boolean generateGlobalSequenceReferences = true;
+ boolean generateGlobalTableReferences = true;
+ boolean generateGlobalDomainReferences = true;
+ boolean generateGlobalUDTReferences = true;
+ boolean generateGlobalQueueReferences = true;
+ boolean generateGlobalLinkReferences = true;
+ boolean generateGlobalKeyReferences = true;
+ boolean generateGlobalIndexReferences = true;
+ boolean generateJavadoc = true;
+ boolean generateComments = true;
+ boolean generateCommentsOnAttributes = true;
+ boolean generateCommentsOnCatalogs = true;
+ boolean generateCommentsOnColumns = true;
+ boolean generateCommentsOnKeys = true;
+ boolean generateCommentsOnLinks = true;
+ boolean generateCommentsOnPackages = true;
+ boolean generateCommentsOnParameters = true;
+ boolean generateCommentsOnQueues = true;
+ boolean generateCommentsOnRoutines = true;
+ boolean generateCommentsOnSchemas = true;
+ boolean generateCommentsOnSequences = true;
+ boolean generateCommentsOnTables = true;
+ boolean generateCommentsOnUDTs = true;
+ boolean generateCommentsOnEmbeddables = true;
+ boolean generateSources = true;
+ boolean generateSourcesOnViews = true;
+ boolean generateFluentSetters = false;
+ boolean generateJavaBeansGettersAndSetters = false;
+ boolean generateVarargsSetters = true;
+ String generateFullyQualifiedTypes = "";
+ boolean generateJavaTimeTypes = true;
+ boolean generateTableValuedFunctions = false;
+ boolean generateEmptyCatalogs = false;
+ boolean generateEmptySchemas = false;
+ String generateNewline = "\n";
String generateIndentation;
- int generatePrintMarginForBlockComment = 80;
+ int generatePrintMarginForBlockComment = 80;
protected GeneratorStrategyWrapper strategy;
- protected String targetEncoding = "UTF-8";
- protected boolean targetClean = true;
+ protected String targetEncoding = "UTF-8";
+ protected boolean targetClean = true;
final Language languageConfigured;
Language language;
@@ -666,6 +667,16 @@ abstract class AbstractGenerator implements Generator {
this.generateSpringAnnotations = generateSpringAnnotations;
}
+ @Override
+ public boolean generateKotlinSetterJvmNameAnnotationsOnIsPrefix() {
+ return generateKotlinSetterJvmNameAnnotationsOnIsPrefix;
+ }
+
+ @Override
+ public void setGenerateKotlinSetterJvmNameAnnotationsOnIsPrefix(boolean generateKotlinSetterJvmNameAnnotationsOnIsPrefix) {
+ this.generateKotlinSetterJvmNameAnnotationsOnIsPrefix = generateKotlinSetterJvmNameAnnotationsOnIsPrefix;
+ }
+
@Override
public GeneratedSerialVersionUID generatedSerialVersionUID() {
return generatedSerialVersionUID;
diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java
index 353c403074..aef3185a82 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java
@@ -750,6 +750,8 @@ public class GenerationTool {
generator.setGenerateValidationAnnotations(g.getGenerate().isValidationAnnotations());
if (g.getGenerate().isSpringAnnotations() != null)
generator.setGenerateSpringAnnotations(g.getGenerate().isSpringAnnotations());
+ if (g.getGenerate().isKotlinSetterJvmNameAnnotationsOnIsPrefix() != null)
+ generator.setGenerateKotlinSetterJvmNameAnnotationsOnIsPrefix(g.getGenerate().isKotlinSetterJvmNameAnnotationsOnIsPrefix());
if (g.getGenerate().getGeneratedSerialVersionUID() != null)
generator.setGenerateGeneratedSerialVersionUID(g.getGenerate().getGeneratedSerialVersionUID());
if (g.getGenerate().getMaxMembersPerInitialiser() != null)
diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java
index 65f5e55b14..1d27f06787 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java
@@ -537,6 +537,22 @@ public interface Generator {
*/
void setGenerateSpringAnnotations(boolean generateSpringAnnotations);
+ /**
+ * Whether kotlin mutable properties should be annotated with
+ * set:JvmName as a workaround for problems occurring when
+ * kotlin produces setX() instead of setIsX()
+ * setters for an isX property.
+ */
+ boolean generateKotlinSetterJvmNameAnnotationsOnIsPrefix();
+
+ /**
+ * Whether kotlin mutable properties should be annotated with
+ * set:JvmName as a workaround for problems occurring when
+ * kotlin produces setX() instead of setIsX()
+ * setters for an isX property.
+ */
+ void setGenerateKotlinSetterJvmNameAnnotationsOnIsPrefix(boolean generateKotlinSetterJvmNameAnnotationsOnIsPrefix);
+
/**
* The type of serialVersionUID that should be generated.
*/
diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
index 50c647bb8d..a2082c3809 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
@@ -7255,21 +7255,17 @@ public class JavaGenerator extends AbstractGenerator {
}
}
+ private static final Pattern P_IS = Pattern.compile("^is[A-Z].*$");
+
protected void printKotlinSetterAnnotation(JavaWriter out, TypedElementDefinition> column, Mode mode) {
// [#11912] When X and IS_X create conflicts, we need to resolve
// them by specifying an explicit setter name
- if (column instanceof ColumnDefinition) {
- String member = getStrategy().getJavaMemberName(column, mode);
-
- if (member.startsWith("is") && ((ColumnDefinition) column)
- .getContainer()
- .getColumns()
- .stream()
- .anyMatch(c -> member.equals("is" + StringUtils.toUC(getStrategy().getJavaMemberName(c, mode))))) {
- out.println("@set:JvmName(\"%s\")", getStrategy().getJavaSetterName(column, mode));
- }
- }
+ if (kotlin
+ && generateKotlinSetterJvmNameAnnotationsOnIsPrefix()
+ && column instanceof ColumnDefinition
+ && P_IS.matcher(getStrategy().getJavaMemberName(column, mode)).matches())
+ out.println("@set:JvmName(\"%s\")", getStrategy().getJavaSetterName(column, mode));
}
private String nullableAnnotation(JavaWriter out) {
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java
index bdaaa3a86f..b111b9bcdc 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java
@@ -123,6 +123,8 @@ public class Generate implements Serializable, XMLAppendable
@XmlElement(defaultValue = "false")
protected Boolean springAnnotations = false;
@XmlElement(defaultValue = "true")
+ protected Boolean kotlinSetterJvmNameAnnotationsOnIsPrefix = true;
+ @XmlElement(defaultValue = "true")
protected Boolean globalObjectReferences = true;
@XmlElement(defaultValue = "true")
protected Boolean globalCatalogReferences = true;
@@ -1260,6 +1262,30 @@ public class Generate implements Serializable, XMLAppendable
this.springAnnotations = value;
}
+ /**
+ * Workaround for Kotlin generating setX() setters instead of setIsX() in byte code for mutable properties called isX.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isKotlinSetterJvmNameAnnotationsOnIsPrefix() {
+ return kotlinSetterJvmNameAnnotationsOnIsPrefix;
+ }
+
+ /**
+ * Sets the value of the kotlinSetterJvmNameAnnotationsOnIsPrefix property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setKotlinSetterJvmNameAnnotationsOnIsPrefix(Boolean value) {
+ this.kotlinSetterJvmNameAnnotationsOnIsPrefix = value;
+ }
+
/**
* Turn off generation of all global object references.
*
@@ -2496,6 +2522,11 @@ public class Generate implements Serializable, XMLAppendable
return this;
}
+ public Generate withKotlinSetterJvmNameAnnotationsOnIsPrefix(Boolean value) {
+ setKotlinSetterJvmNameAnnotationsOnIsPrefix(value);
+ return this;
+ }
+
public Generate withGlobalObjectReferences(Boolean value) {
setGlobalObjectReferences(value);
return this;
@@ -2781,6 +2812,7 @@ public class Generate implements Serializable, XMLAppendable
builder.append("jpaVersion", jpaVersion);
builder.append("validationAnnotations", validationAnnotations);
builder.append("springAnnotations", springAnnotations);
+ builder.append("kotlinSetterJvmNameAnnotationsOnIsPrefix", kotlinSetterJvmNameAnnotationsOnIsPrefix);
builder.append("globalObjectReferences", globalObjectReferences);
builder.append("globalCatalogReferences", globalCatalogReferences);
builder.append("globalSchemaReferences", globalSchemaReferences);
@@ -3249,6 +3281,15 @@ public class Generate implements Serializable, XMLAppendable
return false;
}
}
+ if (kotlinSetterJvmNameAnnotationsOnIsPrefix == null) {
+ if (other.kotlinSetterJvmNameAnnotationsOnIsPrefix!= null) {
+ return false;
+ }
+ } else {
+ if (!kotlinSetterJvmNameAnnotationsOnIsPrefix.equals(other.kotlinSetterJvmNameAnnotationsOnIsPrefix)) {
+ return false;
+ }
+ }
if (globalObjectReferences == null) {
if (other.globalObjectReferences!= null) {
return false;
@@ -3679,6 +3720,7 @@ public class Generate implements Serializable, XMLAppendable
result = ((prime*result)+((jpaVersion == null)? 0 :jpaVersion.hashCode()));
result = ((prime*result)+((validationAnnotations == null)? 0 :validationAnnotations.hashCode()));
result = ((prime*result)+((springAnnotations == null)? 0 :springAnnotations.hashCode()));
+ result = ((prime*result)+((kotlinSetterJvmNameAnnotationsOnIsPrefix == null)? 0 :kotlinSetterJvmNameAnnotationsOnIsPrefix.hashCode()));
result = ((prime*result)+((globalObjectReferences == null)? 0 :globalObjectReferences.hashCode()));
result = ((prime*result)+((globalCatalogReferences == null)? 0 :globalCatalogReferences.hashCode()));
result = ((prime*result)+((globalSchemaReferences == null)? 0 :globalSchemaReferences.hashCode()));
diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.15.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.15.0.xsd
index 0e8c75e94d..6c455786ce 100644
--- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.15.0.xsd
+++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.15.0.xsd
@@ -1683,6 +1683,10 @@ jOOQ version used for source code.]]>
+
+
+ setX() setters instead of setIsX() in byte code for mutable properties called isX.]]>
+