From 68d0a9de01b4cdafcf11e3977bb957191b3d2473 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 15 Oct 2021 15:32:49 +0200 Subject: [PATCH] [jOOQ/jOOQ#12507] More nullability annotation fixes --- jOOQ/src/main/java/org/jooq/DSLContext.java | 4 -- jOOQ/src/main/java/org/jooq/Fields.java | 22 ++++----- jOOQ/src/main/java/org/jooq/ForeignKey.java | 2 +- jOOQ/src/main/java/org/jooq/Formattable.java | 2 - jOOQ/src/main/java/org/jooq/Key.java | 2 +- .../src/main/java/org/jooq/LoaderContext.java | 5 +- jOOQ/src/main/java/org/jooq/ResultQuery.java | 27 ++++------ .../org/jooq/impl/AbstractBindContext.java | 8 +-- .../java/org/jooq/impl/ArrayRecordImpl.java | 16 ++++++ .../jooq/impl/AssociativeArrayRecordImpl.java | 16 ++++++ .../org/jooq/impl/DMLQueryAsResultQuery.java | 4 +- .../java/org/jooq/impl/DefaultDSLContext.java | 6 +-- .../org/jooq/impl/DefaultRecordContext.java | 24 ++++----- .../org/jooq/impl/DefaultRecordUnmapper.java | 21 +++----- .../src/main/java/org/jooq/impl/Internal.java | 2 +- .../java/org/jooq/impl/ResultQueryTrait.java | 11 +++-- .../org/jooq/impl/SimpleExecuteContext.java | 49 ++++++++++++------- 17 files changed, 120 insertions(+), 101 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java index 903004edc2..3383b1fcd0 100644 --- a/jOOQ/src/main/java/org/jooq/DSLContext.java +++ b/jOOQ/src/main/java/org/jooq/DSLContext.java @@ -12502,7 +12502,6 @@ public interface DSLContext extends Scope { * @throws DataAccessException if something went wrong executing the query * @throws TooManyRowsException if the query returned more than one record */ - @Nullable @Support T fetchValue(Table> table) throws DataAccessException, TooManyRowsException; @@ -12515,7 +12514,6 @@ public interface DSLContext extends Scope { * @throws DataAccessException if something went wrong executing the query * @throws TooManyRowsException if the query returned more than one record */ - @Nullable @Support > T fetchValue(ResultQuery query) throws DataAccessException, TooManyRowsException; @@ -12528,7 +12526,6 @@ public interface DSLContext extends Scope { * @throws DataAccessException if something went wrong executing the query * @throws TooManyRowsException if the query returned more than one record */ - @Nullable @Support T fetchValue(TableField field) throws DataAccessException, TooManyRowsException; @@ -12540,7 +12537,6 @@ public interface DSLContext extends Scope { * @return The value or null, if no record was found. * @throws DataAccessException if something went wrong executing the query */ - @Nullable @Support T fetchValue(SelectField field) throws DataAccessException; diff --git a/jOOQ/src/main/java/org/jooq/Fields.java b/jOOQ/src/main/java/org/jooq/Fields.java index b8e4a8a0f0..19174aacff 100644 --- a/jOOQ/src/main/java/org/jooq/Fields.java +++ b/jOOQ/src/main/java/org/jooq/Fields.java @@ -61,7 +61,7 @@ public interface Fields { * Get all fields known to this type. */ @NotNull - Field[] fields(); + Field @NotNull [] fields(); /** * Get all fields known to this type as a {@link Row}. @@ -193,8 +193,8 @@ public interface Fields { * {@link #field(Field)}. * @see #field(Field) */ - @NotNull - Field[] fields(Field... fields); + @Nullable + Field @NotNull [] fields(Field... fields); /** * Get all fields known to this type, filtering by some unqualified field @@ -204,8 +204,8 @@ public interface Fields { * via {@link #field(String)}. * @see #field(String) */ - @NotNull - Field[] fields(String... names); + @Nullable + Field @NotNull [] fields(String... names); /** * Get all fields known to this type, filtering by some qualified field @@ -215,8 +215,8 @@ public interface Fields { * via {@link #field(Name)}. * @see #field(Name) */ - @NotNull - Field[] fields(Name... names); + @Nullable + Field @NotNull [] fields(Name... names); /** * Get all fields known to this type, filtering by some field indexes. @@ -225,8 +225,8 @@ public interface Fields { * via {@link #field(int)}. * @see #field(int) */ - @NotNull - Field[] fields(int... indexes); + @Nullable + Field @NotNull [] fields(int... indexes); /** * Get a field's index from this type. @@ -262,7 +262,7 @@ public interface Fields { * the corresponding Field in {@link #fields()} */ @NotNull - Class[] types(); + Class @NotNull [] types(); /** * Get the field type for a given field index, or null if no @@ -298,7 +298,7 @@ public interface Fields { * for the corresponding Field in {@link #fields()} */ @NotNull - DataType[] dataTypes(); + DataType @NotNull [] dataTypes(); /** * Get the field data type for a given field index, or null if diff --git a/jOOQ/src/main/java/org/jooq/ForeignKey.java b/jOOQ/src/main/java/org/jooq/ForeignKey.java index 61fcb3ff2e..15b5870b2c 100644 --- a/jOOQ/src/main/java/org/jooq/ForeignKey.java +++ b/jOOQ/src/main/java/org/jooq/ForeignKey.java @@ -85,7 +85,7 @@ public interface ForeignKey extends Key { * @see #getKeyFields() */ @NotNull - TableField[] getKeyFieldsArray(); + TableField @NotNull [] getKeyFieldsArray(); /** * Fetch a parent record of a given record through this foreign key diff --git a/jOOQ/src/main/java/org/jooq/Formattable.java b/jOOQ/src/main/java/org/jooq/Formattable.java index 98ff2dc1e7..b413d960a6 100644 --- a/jOOQ/src/main/java/org/jooq/Formattable.java +++ b/jOOQ/src/main/java/org/jooq/Formattable.java @@ -653,7 +653,6 @@ public interface Formattable { * @see http://www.jooq.org/xsd/jooq-export-3.10.0.xsd */ - @NotNull H intoXML(H handler) throws SAXException; /** @@ -665,7 +664,6 @@ public interface Formattable { * @see http://www.jooq.org/xsd/jooq-export-3.10.0.xsd */ - @NotNull H intoXML(H handler, XMLFormat format) throws SAXException; } diff --git a/jOOQ/src/main/java/org/jooq/Key.java b/jOOQ/src/main/java/org/jooq/Key.java index 47f33f765d..3aefe594d3 100644 --- a/jOOQ/src/main/java/org/jooq/Key.java +++ b/jOOQ/src/main/java/org/jooq/Key.java @@ -72,7 +72,7 @@ public interface Key extends Named { * @see #getFields() */ @NotNull - TableField[] getFieldsArray(); + TableField @NotNull [] getFieldsArray(); /** * Get this KEY as a formal {@link Constraint} specification. diff --git a/jOOQ/src/main/java/org/jooq/LoaderContext.java b/jOOQ/src/main/java/org/jooq/LoaderContext.java index 8a739eddfd..61dd6b8575 100644 --- a/jOOQ/src/main/java/org/jooq/LoaderContext.java +++ b/jOOQ/src/main/java/org/jooq/LoaderContext.java @@ -40,6 +40,7 @@ package org.jooq; import java.util.List; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * A context object that provides information about a loader's current state to @@ -59,8 +60,8 @@ public interface LoaderContext { /** * The row that will be or has been processed. */ - @NotNull @CheckReturnValue - Object[] row(); + @Nullable @CheckReturnValue + Object @NotNull [] row(); /** * A list of errors that might have happened during the load. diff --git a/jOOQ/src/main/java/org/jooq/ResultQuery.java b/jOOQ/src/main/java/org/jooq/ResultQuery.java index c2b08bc6af..aa876ed6df 100644 --- a/jOOQ/src/main/java/org/jooq/ResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/ResultQuery.java @@ -4415,8 +4415,7 @@ public interface ResultQuery extends Fields, Query, Iterable U[] fetchArray(int fieldIndex, Class type) throws DataAccessException; + U @NotNull [] fetchArray(int fieldIndex, Class type) throws DataAccessException; /** * Execute the query and return all values for a field index from the @@ -4429,8 +4428,7 @@ public interface ResultQuery extends Fields, Query, Iterable U[] fetchArray(int fieldIndex, Converter converter) throws DataAccessException; + U @NotNull [] fetchArray(int fieldIndex, Converter converter) throws DataAccessException; /** * Execute the query and return all values for a field name from the @@ -4464,8 +4462,7 @@ public interface ResultQuery extends Fields, Query, Iterable U[] fetchArray(String fieldName, Class type) throws DataAccessException; + U @NotNull [] fetchArray(String fieldName, Class type) throws DataAccessException; /** * Execute the query and return all values for a field name from the @@ -4478,8 +4475,7 @@ public interface ResultQuery extends Fields, Query, Iterable U[] fetchArray(String fieldName, Converter converter) throws DataAccessException; + U @NotNull [] fetchArray(String fieldName, Converter converter) throws DataAccessException; /** * Execute the query and return all values for a field name from the @@ -4513,8 +4509,7 @@ public interface ResultQuery extends Fields, Query, Iterable U[] fetchArray(Name fieldName, Class type) throws DataAccessException; + U @NotNull [] fetchArray(Name fieldName, Class type) throws DataAccessException; /** * Execute the query and return all values for a field name from the @@ -4527,8 +4522,7 @@ public interface ResultQuery extends Fields, Query, Iterable U[] fetchArray(Name fieldName, Converter converter) throws DataAccessException; + U @NotNull [] fetchArray(Name fieldName, Converter converter) throws DataAccessException; /** * Execute the query and return all values for a field from the generated @@ -4541,8 +4535,7 @@ public interface ResultQuery extends Fields, Query, Iterable T[] fetchArray(Field field) throws DataAccessException; + T @NotNull [] fetchArray(Field field) throws DataAccessException; /** * Execute the query and return all values for a field from the generated @@ -4559,8 +4552,7 @@ public interface ResultQuery extends Fields, Query, Iterable U[] fetchArray(Field field, Class type) throws DataAccessException; + U @NotNull [] fetchArray(Field field, Class type) throws DataAccessException; /** * Execute the query and return all values for a field from the generated @@ -4573,8 +4565,7 @@ public interface ResultQuery extends Fields, Query, Iterable U[] fetchArray(Field field, Converter converter) throws DataAccessException; + U @NotNull [] fetchArray(Field field, Converter converter) throws DataAccessException; /** * Fetch results into a custom mapper callback. diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractBindContext.java b/jOOQ/src/main/java/org/jooq/impl/AbstractBindContext.java index 2bb1db5ee6..5b2ab15c4f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractBindContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractBindContext.java @@ -83,22 +83,22 @@ abstract class AbstractBindContext extends AbstractContext implemen @Override public final String peekAlias() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final String nextAlias() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final String render() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final String render(QueryPart part) { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java index e5aae71174..9b917b3b56 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ArrayRecordImpl.java @@ -396,6 +396,22 @@ package org.jooq.impl; + + + + + + + + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/AssociativeArrayRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/AssociativeArrayRecordImpl.java index 04c7929177..d73b7fd876 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AssociativeArrayRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/AssociativeArrayRecordImpl.java @@ -371,6 +371,22 @@ package org.jooq.impl; + + + + + + + + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java index 7ed6bee4ab..46af3a8e04 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/DMLQueryAsResultQuery.java @@ -68,6 +68,8 @@ import org.jooq.exception.DataAccessException; import org.jooq.exception.DataTypeException; import org.jooq.impl.QOM.UNotYetImplemented; +import org.jetbrains.annotations.NotNull; + /** * A wrapped DML query ({@link Insert}, {@link Update}, {@link Delete}) that * works like a {@link ResultQuery}. @@ -139,7 +141,7 @@ implements @Override public final Result fetch() { delegate.execute(); - return getResult(); + return (@NotNull Result) getResult(); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index eda4a64404..d7a0cd1dc1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -4257,8 +4257,7 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri @Override public T nextval(Sequence sequence) { - Field nextval = sequence.nextval(); - return select(nextval).fetchOne(nextval); + return fetchValue(sequence.nextval()); } @Override @@ -4278,8 +4277,7 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri @Override public T currval(Sequence sequence) { - Field currval = sequence.currval(); - return select(currval).fetchOne(currval); + return fetchValue(sequence.currval()); } // ------------------------------------------------------------------------- diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordContext.java index 0ba640fc29..44e1f3c620 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordContext.java @@ -54,14 +54,14 @@ import org.jooq.Result; class DefaultRecordContext extends AbstractScope implements RecordContext { private final ExecuteType type; - private final Record[] records; + private final Record record; Exception exception; - DefaultRecordContext(Configuration configuration, ExecuteType type, Record... records) { + DefaultRecordContext(Configuration configuration, ExecuteType type, Record record) { super(configuration); this.type = type; - this.records = records; + this.record = record; } @Override @@ -71,18 +71,17 @@ class DefaultRecordContext extends AbstractScope implements RecordContext { @Override public final Record record() { - return records != null && records.length > 0 ? records[0] : null; + return record; } @Override public final Record[] batchRecords() { - return records; + return new Record[] { record }; } @Override public final RecordType recordType() { - Record record = record(); - return record != null ? new FieldsImpl<>(record.fields()) : null; + return new FieldsImpl<>(record.fields()); } @Override @@ -92,13 +91,8 @@ class DefaultRecordContext extends AbstractScope implements RecordContext { @Override public String toString() { - if (records != null && records.length > 0) { - Result result = DSL.using(configuration).newResult(records[0].fields()); - result.addAll(Arrays.asList(records)); - return result.toString(); - } - else { - return "No Records"; - } + Result result = DSL.using(configuration).newResult(record.fields()); + result.add(record); + return result.toString(); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordUnmapper.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordUnmapper.java index 4f2e15153f..ce4a3ab851 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordUnmapper.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordUnmapper.java @@ -147,9 +147,6 @@ public class DefaultRecordUnmapper implements RecordUnmappe @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public final R unmap(E source) { - if (source == null) - return null; - if (source instanceof Object[]) { Object[] array = (Object[]) source; int size = rowType.size(); Record record = newRecord(); @@ -164,7 +161,7 @@ public class DefaultRecordUnmapper implements RecordUnmappe return (R) record; } - throw new MappingException("Object[] expected. Got: " + source.getClass()); + throw new MappingException("Object[] expected. Got: " + klass(source)); } } @@ -173,9 +170,6 @@ public class DefaultRecordUnmapper implements RecordUnmappe @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public final R unmap(E source) { - if (source == null) - return null; - if (source instanceof Iterable) { Iterable iterable = (Iterable) source; Iterator it = iterable.iterator(); int size = rowType.size(); @@ -191,7 +185,7 @@ public class DefaultRecordUnmapper implements RecordUnmappe return (R) record; } - throw new MappingException("Iterable expected. Got: " + source.getClass()); + throw new MappingException("Iterable expected. Got: " + klass(source)); } } @@ -200,8 +194,6 @@ public class DefaultRecordUnmapper implements RecordUnmappe @SuppressWarnings("unchecked") @Override public R unmap(E source) { - if (source == null) - return null; // [#1987] Distinguish between various types to load data from // Maps are loaded using a {field-name -> value} convention @@ -219,7 +211,7 @@ public class DefaultRecordUnmapper implements RecordUnmappe return (R) record; } - throw new MappingException("Map expected. Got: " + source.getClass()); + throw new MappingException("Map expected. Got: " + klass(source)); } } @@ -228,9 +220,6 @@ public class DefaultRecordUnmapper implements RecordUnmappe @SuppressWarnings("unchecked") @Override public R unmap(E source) { - if (source == null) - return null; - Record record = newRecord(); try { @@ -268,4 +257,8 @@ public class DefaultRecordUnmapper implements RecordUnmappe } } } + + private static final String klass(Object o) { + return o == null ? "null" : o.getClass().toString(); + } } diff --git a/jOOQ/src/main/java/org/jooq/impl/Internal.java b/jOOQ/src/main/java/org/jooq/impl/Internal.java index dc1a5aae92..2758b13e2f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Internal.java +++ b/jOOQ/src/main/java/org/jooq/impl/Internal.java @@ -386,7 +386,7 @@ public final class Internal { @NotNull @Deprecated(since = "3.16", forRemoval = true) public static final > Row fieldsRow(TableField embeddableField) { - return embeddableField.getDataType().getRow(); + return (@NotNull Row) embeddableField.getDataType().getRow(); } @Support diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java b/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java index 4bf5f8663b..b96686b469 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultQueryTrait.java @@ -292,7 +292,7 @@ interface ResultQueryTrait extends QueryPartInternal, ResultQu if (fetchIntermediateResult(Tools.configuration(this))) return fetch().intoResultSet(); else - return fetchLazy().resultSet(); + return (@NotNull ResultSet) fetchLazy().resultSet(); } @Override @@ -519,7 +519,8 @@ interface ResultQueryTrait extends QueryPartInternal, ResultQu } @Override - default Object[] fetchOneArray() { + @Nullable + default Object @Nullable [] fetchOneArray() { R record = fetchOne(); return record == null ? null : record.intoArray(); } @@ -612,7 +613,8 @@ interface ResultQueryTrait extends QueryPartInternal, ResultQu } @Override - default Object[] fetchSingleArray() { + @Nullable + default Object @NotNull [] fetchSingleArray() { return fetchSingle().intoArray(); } @@ -808,7 +810,8 @@ interface ResultQueryTrait extends QueryPartInternal, ResultQu } @Override - default Object[] fetchAnyArray() { + @Nullable + default Object @Nullable [] fetchAnyArray() { R record = fetchAny(); return record == null ? null : record.intoArray(); } diff --git a/jOOQ/src/main/java/org/jooq/impl/SimpleExecuteContext.java b/jOOQ/src/main/java/org/jooq/impl/SimpleExecuteContext.java index 4976844a59..02aea3df34 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SimpleExecuteContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/SimpleExecuteContext.java @@ -74,135 +74,146 @@ final class SimpleExecuteContext extends AbstractScope implements ExecuteContext @Override public final Connection connection() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final ExecuteType type() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final Query query() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final Query[] batchQueries() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final Routine routine() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final String sql() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void sql(String sql) { + throw new UnsupportedOperationException("Not implemented"); } @Override public final String[] batchSQL() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void connectionProvider(ConnectionProvider connectionProvider) { + throw new UnsupportedOperationException("Not implemented"); } @Override public final PreparedStatement statement() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void statement(PreparedStatement statement) { + throw new UnsupportedOperationException("Not implemented"); } @Override public final int statementExecutionCount() { - return 0; + throw new UnsupportedOperationException("Not implemented"); } @Override public final ResultSet resultSet() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void resultSet(ResultSet resultSet) { + throw new UnsupportedOperationException("Not implemented"); } @Override public final Record record() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void record(Record record) { + throw new UnsupportedOperationException("Not implemented"); } @Override public final int rows() { - return 0; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void rows(int rows) { + throw new UnsupportedOperationException("Not implemented"); } @Override - public final int [] batchRows() { - return null; + public final int[] batchRows() { + throw new UnsupportedOperationException("Not implemented"); } @Override public final Result result() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void result(Result result) { + throw new UnsupportedOperationException("Not implemented"); } @Override public final RuntimeException exception() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void exception(RuntimeException e) { + throw new UnsupportedOperationException("Not implemented"); } @Override public final SQLException sqlException() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void sqlException(SQLException e) { + throw new UnsupportedOperationException("Not implemented"); } @Override public final SQLWarning sqlWarning() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void sqlWarning(SQLWarning e) { + throw new UnsupportedOperationException("Not implemented"); } @Override public final String[] serverOutput() { - return null; + throw new UnsupportedOperationException("Not implemented"); } @Override public final void serverOutput(String[] output) { + throw new UnsupportedOperationException("Not implemented"); } }