[jOOQ/jOOQ#644] Add matcher strategies for the record types

This commit is contained in:
Lukas Eder 2024-09-05 16:14:36 +02:00
parent a245b9efb3
commit a2490eb03c
4 changed files with 263 additions and 10 deletions

View File

@ -416,6 +416,12 @@ public class MatcherStrategy extends DefaultGeneratorStrategy {
MatchersAttributeType::isRecordSetterOverride,
() -> super.getJavaMemberOverride(definition, mode)
);
case RECORD_TYPE:
return getJavaOverride0(definition,
field -> false,
MatchersAttributeType::isRecordTypeSetterOverride,
() -> super.getJavaMemberOverride(definition, mode)
);
case INTERFACE:
return getJavaOverride0(definition,
MatchersFieldType::isInterfaceSetterOverride,
@ -460,6 +466,12 @@ public class MatcherStrategy extends DefaultGeneratorStrategy {
MatchersAttributeType::isRecordGetterOverride,
() -> super.getJavaMemberOverride(definition, mode)
);
case RECORD_TYPE:
return getJavaOverride0(definition,
field -> false,
MatchersAttributeType::isRecordTypeGetterOverride,
() -> super.getJavaMemberOverride(definition, mode)
);
case INTERFACE:
return getJavaOverride0(definition,
MatchersFieldType::isInterfaceGetterOverride,
@ -629,11 +641,12 @@ public class MatcherStrategy extends DefaultGeneratorStrategy {
String result = null;
switch (mode) {
case DEFAULT: result = match(definition, udt.getExpression(), udt.getUdtImplements()); break;
case INTERFACE: result = match(definition, udt.getExpression(), udt.getInterfaceImplements()); break;
case POJO: result = match(definition, udt.getExpression(), udt.getPojoImplements()); break;
case RECORD: result = match(definition, udt.getExpression(), udt.getRecordImplements()); break;
case PATH: result = match(definition, udt.getExpression(), udt.getPathImplements()); break;
case DEFAULT: result = match(definition, udt.getExpression(), udt.getUdtImplements()); break;
case INTERFACE: result = match(definition, udt.getExpression(), udt.getInterfaceImplements()); break;
case POJO: result = match(definition, udt.getExpression(), udt.getPojoImplements()); break;
case RECORD: result = match(definition, udt.getExpression(), udt.getRecordImplements()); break;
case RECORD_TYPE: result = match(definition, udt.getExpression(), udt.getRecordTypeImplements()); break;
case PATH: result = match(definition, udt.getExpression(), udt.getPathImplements()); break;
}
if (result != null)
@ -708,11 +721,12 @@ public class MatcherStrategy extends DefaultGeneratorStrategy {
String result = null;
switch (mode) {
case DEFAULT: result = match(definition, udt.getExpression(), udt.getUdtClass()); break;
case INTERFACE: result = match(definition, udt.getExpression(), udt.getInterfaceClass()); break;
case POJO: result = match(definition, udt.getExpression(), udt.getPojoClass()); break;
case RECORD: result = match(definition, udt.getExpression(), udt.getRecordClass()); break;
case PATH: result = match(definition, udt.getExpression(), udt.getPathClass()); break;
case DEFAULT: result = match(definition, udt.getExpression(), udt.getUdtClass()); break;
case INTERFACE: result = match(definition, udt.getExpression(), udt.getInterfaceClass()); break;
case POJO: result = match(definition, udt.getExpression(), udt.getPojoClass()); break;
case RECORD: result = match(definition, udt.getExpression(), udt.getRecordClass()); break;
case RECORD_TYPE: result = match(definition, udt.getExpression(), udt.getRecordTypeClass()); break;
case PATH: result = match(definition, udt.getExpression(), udt.getPathClass()); break;
}
if (result != null)
@ -826,6 +840,12 @@ public class MatcherStrategy extends DefaultGeneratorStrategy {
MatchersAttributeType::isRecordMemberOverride,
() -> super.getJavaMemberOverride(definition, mode)
);
case RECORD_TYPE:
return getJavaOverride0(definition,
field -> false,
MatchersAttributeType::isRecordTypeMemberOverride,
() -> super.getJavaMemberOverride(definition, mode)
);
case INTERFACE:
return getJavaOverride0(definition,
MatchersFieldType::isInterfaceMemberOverride,

View File

@ -42,6 +42,12 @@ public class MatchersAttributeType implements Serializable, XMLAppendable
@XmlElement(defaultValue = "false")
protected Boolean recordMemberOverride = false;
@XmlElement(defaultValue = "false")
protected Boolean recordTypeSetterOverride = false;
@XmlElement(defaultValue = "false")
protected Boolean recordTypeGetterOverride = false;
@XmlElement(defaultValue = "false")
protected Boolean recordTypeMemberOverride = false;
@XmlElement(defaultValue = "false")
protected Boolean interfaceSetterOverride = false;
@XmlElement(defaultValue = "false")
protected Boolean interfaceGetterOverride = false;
@ -206,6 +212,78 @@ public class MatchersAttributeType implements Serializable, XMLAppendable
this.recordMemberOverride = value;
}
/**
* Whether an "override" modifier in generated record type setters should be generated.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isRecordTypeSetterOverride() {
return recordTypeSetterOverride;
}
/**
* Whether an "override" modifier in generated record type setters should be generated.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setRecordTypeSetterOverride(Boolean value) {
this.recordTypeSetterOverride = value;
}
/**
* Whether an "override" modifier in generated record type getters should be generated.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isRecordTypeGetterOverride() {
return recordTypeGetterOverride;
}
/**
* Whether an "override" modifier in generated record type getters should be generated.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setRecordTypeGetterOverride(Boolean value) {
this.recordTypeGetterOverride = value;
}
/**
* Whether an "override" modifier in generated record type members (properties) should be generated.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isRecordTypeMemberOverride() {
return recordTypeMemberOverride;
}
/**
* Whether an "override" modifier in generated record type members (properties) should be generated.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setRecordTypeMemberOverride(Boolean value) {
this.recordTypeMemberOverride = value;
}
/**
* Whether an "override" modifier in generated interface setters should be generated.
*
@ -422,6 +500,33 @@ public class MatchersAttributeType implements Serializable, XMLAppendable
return this;
}
/**
* Whether an "override" modifier in generated record type setters should be generated.
*
*/
public MatchersAttributeType withRecordTypeSetterOverride(Boolean value) {
setRecordTypeSetterOverride(value);
return this;
}
/**
* Whether an "override" modifier in generated record type getters should be generated.
*
*/
public MatchersAttributeType withRecordTypeGetterOverride(Boolean value) {
setRecordTypeGetterOverride(value);
return this;
}
/**
* Whether an "override" modifier in generated record type members (properties) should be generated.
*
*/
public MatchersAttributeType withRecordTypeMemberOverride(Boolean value) {
setRecordTypeMemberOverride(value);
return this;
}
/**
* Whether an "override" modifier in generated interface setters should be generated.
*
@ -486,6 +591,9 @@ public class MatchersAttributeType implements Serializable, XMLAppendable
builder.append("recordSetterOverride", recordSetterOverride);
builder.append("recordGetterOverride", recordGetterOverride);
builder.append("recordMemberOverride", recordMemberOverride);
builder.append("recordTypeSetterOverride", recordTypeSetterOverride);
builder.append("recordTypeGetterOverride", recordTypeGetterOverride);
builder.append("recordTypeMemberOverride", recordTypeMemberOverride);
builder.append("interfaceSetterOverride", interfaceSetterOverride);
builder.append("interfaceGetterOverride", interfaceGetterOverride);
builder.append("interfaceMemberOverride", interfaceMemberOverride);
@ -585,6 +693,33 @@ public class MatchersAttributeType implements Serializable, XMLAppendable
return false;
}
}
if (recordTypeSetterOverride == null) {
if (other.recordTypeSetterOverride!= null) {
return false;
}
} else {
if (!recordTypeSetterOverride.equals(other.recordTypeSetterOverride)) {
return false;
}
}
if (recordTypeGetterOverride == null) {
if (other.recordTypeGetterOverride!= null) {
return false;
}
} else {
if (!recordTypeGetterOverride.equals(other.recordTypeGetterOverride)) {
return false;
}
}
if (recordTypeMemberOverride == null) {
if (other.recordTypeMemberOverride!= null) {
return false;
}
} else {
if (!recordTypeMemberOverride.equals(other.recordTypeMemberOverride)) {
return false;
}
}
if (interfaceSetterOverride == null) {
if (other.interfaceSetterOverride!= null) {
return false;
@ -654,6 +789,9 @@ public class MatchersAttributeType implements Serializable, XMLAppendable
result = ((prime*result)+((recordSetterOverride == null)? 0 :recordSetterOverride.hashCode()));
result = ((prime*result)+((recordGetterOverride == null)? 0 :recordGetterOverride.hashCode()));
result = ((prime*result)+((recordMemberOverride == null)? 0 :recordMemberOverride.hashCode()));
result = ((prime*result)+((recordTypeSetterOverride == null)? 0 :recordTypeSetterOverride.hashCode()));
result = ((prime*result)+((recordTypeGetterOverride == null)? 0 :recordTypeGetterOverride.hashCode()));
result = ((prime*result)+((recordTypeMemberOverride == null)? 0 :recordTypeMemberOverride.hashCode()));
result = ((prime*result)+((interfaceSetterOverride == null)? 0 :interfaceSetterOverride.hashCode()));
result = ((prime*result)+((interfaceGetterOverride == null)? 0 :interfaceGetterOverride.hashCode()));
result = ((prime*result)+((interfaceMemberOverride == null)? 0 :interfaceMemberOverride.hashCode()));

View File

@ -46,6 +46,9 @@ public class MatchersUDTType implements Serializable, XMLAppendable
protected String recordExtends;
@XmlJavaTypeAdapter(StringAdapter.class)
protected String recordImplements;
protected MatcherRule recordTypeClass;
@XmlJavaTypeAdapter(StringAdapter.class)
protected String recordTypeImplements;
protected MatcherRule interfaceClass;
@XmlJavaTypeAdapter(StringAdapter.class)
protected String interfaceImplements;
@ -255,6 +258,38 @@ public class MatchersUDTType implements Serializable, XMLAppendable
this.recordImplements = value;
}
/**
* This rule influences the naming of the generated record type that is implemented by hierarchical {@link org.jooq.UDTRecord} objects.
*
*/
public MatcherRule getRecordTypeClass() {
return recordTypeClass;
}
/**
* This rule influences the naming of the generated record type that is implemented by hierarchical {@link org.jooq.UDTRecord} objects.
*
*/
public void setRecordTypeClass(MatcherRule value) {
this.recordTypeClass = value;
}
/**
* This string provides additional interfaces that a generated record type that is implemented by hierarchical {@link org.jooq.UDTRecord} should implement.
*
*/
public String getRecordTypeImplements() {
return recordTypeImplements;
}
/**
* This string provides additional interfaces that a generated record type that is implemented by hierarchical {@link org.jooq.UDTRecord} should implement.
*
*/
public void setRecordTypeImplements(String value) {
this.recordTypeImplements = value;
}
/**
* This rule influences the naming of the generated interface implemented by the {@link org.jooq.UDTRecord} and/or the POJO.
*
@ -446,6 +481,24 @@ public class MatchersUDTType implements Serializable, XMLAppendable
return this;
}
/**
* This rule influences the naming of the generated record type that is implemented by hierarchical {@link org.jooq.UDTRecord} objects.
*
*/
public MatchersUDTType withRecordTypeClass(MatcherRule value) {
setRecordTypeClass(value);
return this;
}
/**
* This string provides additional interfaces that a generated record type that is implemented by hierarchical {@link org.jooq.UDTRecord} should implement.
*
*/
public MatchersUDTType withRecordTypeImplements(String value) {
setRecordTypeImplements(value);
return this;
}
/**
* This rule influences the naming of the generated interface implemented by the {@link org.jooq.UDTRecord} and/or the POJO.
*
@ -504,6 +557,8 @@ public class MatchersUDTType implements Serializable, XMLAppendable
builder.append("recordClass", recordClass);
builder.append("recordExtends", recordExtends);
builder.append("recordImplements", recordImplements);
builder.append("recordTypeClass", recordTypeClass);
builder.append("recordTypeImplements", recordTypeImplements);
builder.append("interfaceClass", interfaceClass);
builder.append("interfaceImplements", interfaceImplements);
builder.append("pojoClass", pojoClass);
@ -629,6 +684,24 @@ public class MatchersUDTType implements Serializable, XMLAppendable
return false;
}
}
if (recordTypeClass == null) {
if (other.recordTypeClass!= null) {
return false;
}
} else {
if (!recordTypeClass.equals(other.recordTypeClass)) {
return false;
}
}
if (recordTypeImplements == null) {
if (other.recordTypeImplements!= null) {
return false;
}
} else {
if (!recordTypeImplements.equals(other.recordTypeImplements)) {
return false;
}
}
if (interfaceClass == null) {
if (other.interfaceClass!= null) {
return false;
@ -692,6 +765,8 @@ public class MatchersUDTType implements Serializable, XMLAppendable
result = ((prime*result)+((recordClass == null)? 0 :recordClass.hashCode()));
result = ((prime*result)+((recordExtends == null)? 0 :recordExtends.hashCode()));
result = ((prime*result)+((recordImplements == null)? 0 :recordImplements.hashCode()));
result = ((prime*result)+((recordTypeClass == null)? 0 :recordTypeClass.hashCode()));
result = ((prime*result)+((recordTypeImplements == null)? 0 :recordTypeImplements.hashCode()));
result = ((prime*result)+((interfaceClass == null)? 0 :interfaceClass.hashCode()));
result = ((prime*result)+((interfaceImplements == null)? 0 :interfaceImplements.hashCode()));
result = ((prime*result)+((pojoClass == null)? 0 :pojoClass.hashCode()));

View File

@ -758,6 +758,14 @@ and follow its (undocumented!) assumptions (e.g. constructors, etc.). Use this a
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[This string provides additional interfaces that a generated {@link org.jooq.UDTRecord} should implement.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="recordTypeClass" type="tns:MatcherRule" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[This rule influences the naming of the generated record type that is implemented by hierarchical {@link org.jooq.UDTRecord} objects.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="recordTypeImplements" type="string" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[This string provides additional interfaces that a generated record type that is implemented by hierarchical {@link org.jooq.UDTRecord} should implement.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="interfaceClass" type="tns:MatcherRule" minOccurs="0" maxOccurs="1">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[This rule influences the naming of the generated interface implemented by the {@link org.jooq.UDTRecord} and/or the POJO.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
@ -821,6 +829,18 @@ and follow its (undocumented!) assumptions (e.g. constructors, etc.). Use this a
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether an "override" modifier in generated record members (properties) should be generated.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="recordTypeSetterOverride" type="boolean" minOccurs="0" maxOccurs="1" default="false">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether an "override" modifier in generated record type setters should be generated.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="recordTypeGetterOverride" type="boolean" minOccurs="0" maxOccurs="1" default="false">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether an "override" modifier in generated record type getters should be generated.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="recordTypeMemberOverride" type="boolean" minOccurs="0" maxOccurs="1" default="false">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether an "override" modifier in generated record type members (properties) should be generated.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>
<element name="interfaceSetterOverride" type="boolean" minOccurs="0" maxOccurs="1" default="false">
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Whether an "override" modifier in generated interface setters should be generated.]]></jxb:javadoc></jxb:property></appinfo></annotation>
</element>