diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java index 4985b1bd1d..e0098c8f3c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java @@ -1335,8 +1335,10 @@ implements // XXX: JOIN API // ------------------------------------------------------------------------ + // [#14906] Declare public API return type, allowing for JoinTable to override + // this only internally, to prevent leaking JoinTable into client code @Override - public final JoinTable join(TableLike table, JoinType type) { + public /* non-final */ TableOptionalOnStep join(TableLike table, JoinType type) { switch (type) { case CROSS_APPLY: return new CrossApply(this, table); diff --git a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java index 4d7d2948c7..d6be917b04 100755 --- a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java @@ -950,6 +950,14 @@ implements return or(notExists(select)); } + // [#14906] Re-declare internal-type-returning method here, to prevent J + // from leaking into client code. + @SuppressWarnings("unchecked") + @Override + public final J join(TableLike table, JoinType type) { + return (J) super.join(table, type); + } + // ------------------------------------------------------------------------- // XXX: Query Object Model // ------------------------------------------------------------------------- diff --git a/jOOQ/src/main/java/org/jooq/impl/TableImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableImpl.java index 5e4bad3b1c..075395e3d2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableImpl.java @@ -70,6 +70,7 @@ import org.jooq.Context; import org.jooq.DataType; import org.jooq.Field; import org.jooq.ForeignKey; +import org.jooq.JoinType; import org.jooq.Name; // ... import org.jooq.QueryPart; @@ -80,6 +81,8 @@ import org.jooq.SQLDialect; import org.jooq.Schema; import org.jooq.Select; import org.jooq.Table; +import org.jooq.TableLike; +import org.jooq.TableOptionalOnStep; import org.jooq.TableOptions; // ... import org.jooq.impl.QOM.UNotYetImplemented; @@ -457,6 +460,11 @@ implements return true; } + @Override + public final TableOptionalOnStep join(TableLike table, JoinType type) { + return super.join(table, type); + } + // ------------------------------------------------------------------------- // XXX: FieldsTrait "undeprecations" for generated code // -------------------------------------------------------------------------