[jOOQ/jOOQ#11912] More general and configurable fix
This commit is contained in:
parent
fd361a9787
commit
91e5d938ff
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -537,6 +537,22 @@ public interface Generator {
|
||||
*/
|
||||
void setGenerateSpringAnnotations(boolean generateSpringAnnotations);
|
||||
|
||||
/**
|
||||
* Whether kotlin mutable properties should be annotated with
|
||||
* <code>set:JvmName</code> as a workaround for problems occurring when
|
||||
* kotlin produces <code>setX()</code> instead of <code>setIsX()</code>
|
||||
* setters for an <code>isX</code> property.
|
||||
*/
|
||||
boolean generateKotlinSetterJvmNameAnnotationsOnIsPrefix();
|
||||
|
||||
/**
|
||||
* Whether kotlin mutable properties should be annotated with
|
||||
* <code>set:JvmName</code> as a workaround for problems occurring when
|
||||
* kotlin produces <code>setX()</code> instead of <code>setIsX()</code>
|
||||
* setters for an <code>isX</code> property.
|
||||
*/
|
||||
void setGenerateKotlinSetterJvmNameAnnotationsOnIsPrefix(boolean generateKotlinSetterJvmNameAnnotationsOnIsPrefix);
|
||||
|
||||
/**
|
||||
* The type of <code>serialVersionUID</code> that should be generated.
|
||||
*/
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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 <code>setX()</code> setters instead of <code>setIsX()</code> in byte code for mutable properties called <code>isX</code>.
|
||||
*
|
||||
* @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()));
|
||||
|
||||
@ -1683,6 +1683,10 @@ jOOQ version used for source code.]]></jxb:javadoc></jxb:property></appinfo></an
|
||||
<element name="springAnnotations" type="boolean" default="false" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Annotate DAOs with useful spring annotations such as @Repository or @Autowired.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="kotlinSetterJvmNameAnnotationsOnIsPrefix" type="boolean" default="true" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Workaround for Kotlin generating <code>setX()</code> setters instead of <code>setIsX()</code> in byte code for mutable properties called <code>isX</code>.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="globalObjectReferences" type="boolean" default="true" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Turn off generation of all global object references.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user