[jOOQ/jOOQ#13336] Generate covariant overrides for Table.rename(Table) and Table.as(Table) methods

This commit is contained in:
Lukas Eder 2022-03-24 15:59:26 +01:00
parent d2e6fda89c
commit 10b8a6176d
3 changed files with 60 additions and 2 deletions

View File

@ -6664,6 +6664,13 @@ public class JavaGenerator extends AbstractGenerator {
out.println("new %s(alias, null, null, this, parameters)", className);
else
out.println("new %s(alias, this)", className);
out.print("%soverride def as(alias: %s[_]): %s = ", visibilityPublic(), Table.class, className);
if (table.isTableValuedFunction())
out.println("new %s(alias.getQualifiedName(), null, null, this, parameters)", className);
else
out.println("new %s(alias.getQualifiedName(), this)", className);
}
else if (kotlin) {
out.print("%soverride fun `as`(alias: %s): %s = ", visibilityPublic(), String.class, className);
@ -6679,6 +6686,13 @@ public class JavaGenerator extends AbstractGenerator {
out.println("%s(alias, this, parameters)", className);
else
out.println("%s(alias, this)", className);
out.print("%soverride fun `as`(alias: %s<*>): %s = ", visibilityPublic(), Table.class, className);
if (table.isTableValuedFunction())
out.println("%s(alias.getQualifiedName(), this, parameters)", className);
else
out.println("%s(alias.getQualifiedName(), this)", className);
}
// [#117] With instance fields, it makes sense to create a
@ -6706,6 +6720,18 @@ public class JavaGenerator extends AbstractGenerator {
out.println("return new %s(alias, this);", className);
out.println("}");
out.overrideInherit();
printNonnullAnnotation(out);
out.println("%s%s as(%s<?> alias) {", visibilityPublic(), className, Table.class);
if (table.isTableValuedFunction())
out.println("return new %s(alias.getQualifiedName(), this, parameters);", className);
else
out.println("return new %s(alias.getQualifiedName(), this);", className);
out.println("}");
}
if (scala) {
@ -6724,6 +6750,14 @@ public class JavaGenerator extends AbstractGenerator {
out.println("new %s(name, null, null, null, parameters)", className);
else
out.println("new %s(name, null)", className);
out.javadoc("Rename this table");
out.print("%soverride def rename(name: %s[_]): %s = ", visibilityPublic(), Table.class, className);
if (table.isTableValuedFunction())
out.println("new %s(name.getQualifiedName(), null, null, null, parameters)", className);
else
out.println("new %s(name.getQualifiedName(), null)", className);
}
else if (kotlin) {
@ -6742,6 +6776,14 @@ public class JavaGenerator extends AbstractGenerator {
out.println("%s(name, null, parameters)", className);
else
out.println("%s(name, null)", className);
out.javadoc("Rename this table");
out.print("%soverride fun rename(name: %s<*>): %s = ", visibilityPublic(), Table.class, className);
if (table.isTableValuedFunction())
out.println("%s(name.getQualifiedName(), null, parameters)", className);
else
out.println("%s(name.getQualifiedName(), null)", className);
}
// [#2921] With instance fields, tables can be renamed.
@ -6769,6 +6811,18 @@ public class JavaGenerator extends AbstractGenerator {
out.println("return new %s(name, null);", className);
out.println("}");
out.javadoc("Rename this table");
out.override();
printNonnullAnnotation(out);
out.println("%s%s rename(%s<?> name) {", visibilityPublic(), className, Table.class);
if (table.isTableValuedFunction())
out.println("return new %s(name.getQualifiedName(), null, parameters);", className);
else
out.println("return new %s(name.getQualifiedName(), null);", className);
out.println("}");
}

View File

@ -977,7 +977,7 @@ abstract class AbstractTable<R extends Record> extends AbstractNamed implements
// ------------------------------------------------------------------------
@Override
public final Table<R> as(Table<?> otherTable) {
public /* non-final for covariant overriding */ Table<R> as(Table<?> otherTable) {
return as(otherTable.getUnqualifiedName());
}

View File

@ -656,13 +656,17 @@ implements
}
public Table<R> rename(String rename) {
return new TableImpl<>(rename, getSchema());
return rename(DSL.name(rename));
}
public Table<R> rename(Name rename) {
return new TableImpl<>(rename, getSchema());
}
public Table<R> rename(Table<?> rename) {
return rename(rename.getQualifiedName());
}
/**
* Subclasses must override this method if they use the generic type
* parameter <R> for other types than {@link Record}