[jOOQ/jOOQ#12637] Compilation error in generated code when UDT attribute

name conflicts with getter procedure
This commit is contained in:
Lukas Eder 2022-11-29 15:05:43 +01:00
parent 966a1fc8c8
commit 8124b68b50
2 changed files with 21 additions and 13 deletions

View File

@ -161,7 +161,7 @@ class GeneratorStrategyWrapper extends AbstractDelegatingGeneratorStrategy {
methodName = overload(definition, mode, methodName);
methodName = convertToIdentifier(methodName, getTargetLanguage());
return disambiguateMethod(definition, methodName);
return disambiguateMethod(definition, mode, methodName);
}
/**
@ -178,14 +178,23 @@ class GeneratorStrategyWrapper extends AbstractDelegatingGeneratorStrategy {
* [#182] Method name disambiguation is important to avoid name clashes due
* to pre-existing getters / setters in super classes
*/
private String disambiguateMethod(Definition definition, String method) {
private String disambiguateMethod(Definition definition, Mode mode, String method) {
Set<String> reserved = null;
if (definition instanceof AttributeDefinition) {
reserved = reservedColumns(UDTRecordImpl.class, 0);
if (definition instanceof AttributeDefinition a) {
reserved = new HashSet<>(reservedColumns(UDTRecordImpl.class, 0));
}
else if (definition instanceof ColumnDefinition) {
if (((ColumnDefinition) definition).getContainer().getPrimaryKey() != null)
else if (definition instanceof ColumnDefinition c) {
if (c.getContainer().getPrimaryKey() != null)
reserved = reservedColumns(UpdatableRecordImpl.class, 0);
else
reserved = reservedColumns(TableRecordImpl.class, 0);
@ -197,13 +206,11 @@ class GeneratorStrategyWrapper extends AbstractDelegatingGeneratorStrategy {
}
// [#9150] Member procedures and functions can collide with UDTRecord methods
else if (definition instanceof RoutineDefinition) {
RoutineDefinition routine = (RoutineDefinition) definition;
if (routine.getPackage() instanceof UDTDefinition
&& routine.getInParameters().size() > 0
&& "SELF".equalsIgnoreCase(routine.getInParameters().get(0).getName()))
reserved = reservedColumns(UDTRecordImpl.class, routine.getInParameters().size() - 1);
else if (definition instanceof RoutineDefinition r) {
if (r.getPackage() instanceof UDTDefinition
&& r.getInParameters().size() > 0
&& "SELF".equalsIgnoreCase(r.getInParameters().get(0).getName()))
reserved = reservedColumns(UDTRecordImpl.class, r.getInParameters().size() - 1);
}
// [#11032] Foreign keys produce implicit join methods that can collide with TableImpl methods

View File

@ -74,5 +74,6 @@ public interface UDTDefinition extends PackageDefinition {
/**
* Whether this UDT is a synthetic type.
*/
@Override
boolean isSynthetic();
}