Skip to content

Commit 48a6046

Browse files
Update Nullable constraints.
See: #1549
1 parent 3e190c8 commit 48a6046

13 files changed

+42
-8
lines changed

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/ExecutableSelectOperationSupport.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ public long count() {
117117
}
118118
}
119119

120+
@SuppressWarnings("unchecked")
120121
class TypedSelectSupport<T> extends TerminatingSelectResultSupport<T, T> implements TerminatingResults<T> {
121122

122123
private final Class<T> domainType;
@@ -142,12 +143,12 @@ class TerminatingSelectResultSupport<S, T> implements TerminatingResults<T> {
142143

143144
final Statement<?> statement;
144145

145-
final @Nullable RowMapper<T> rowMapper;
146+
final RowMapper<T> rowMapper;
146147

147148
TerminatingSelectResultSupport(Statement<?> statement,
148149
@Nullable RowMapper<T> rowMapper) {
149150
this.statement = statement;
150-
this.rowMapper = rowMapper;
151+
this.rowMapper = rowMapper != null ? rowMapper : NoOpRowMapper.INSTANCE;
151152
}
152153

153154
TerminatingSelectResultSupport(Statement<?> statement, Class<S> domainType,
@@ -177,7 +178,7 @@ public <R> TerminatingResults<R> map(QueryResultConverter<? super T, ? extends R
177178
@Override
178179
public @Nullable T oneValue() {
179180

180-
if (this.rowMapper == null) {
181+
if (ObjectUtils.nullSafeEquals(NoOpRowMapper.INSTANCE, this.rowMapper)) {
181182
return (T) template.queryForResultSet(this.statement);
182183
}
183184

@@ -210,6 +211,18 @@ public Stream<T> stream() {
210211
return template.getCqlOperations().queryForStream(this.statement, this.rowMapper);
211212
}
212213

214+
@SuppressWarnings("rawtypes")
215+
enum NoOpRowMapper implements RowMapper {
216+
217+
INSTANCE;
218+
219+
220+
@Override
221+
public Object mapRow(Row row, int rowNum) {
222+
return row;
223+
}
224+
}
225+
213226
}
214227

215228
class ExecutableSelectSupport<S, T> implements ExecutableSelect<T> {

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/QueryResultConverter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.springframework.data.cassandra.core;
1717

1818
import com.datastax.oss.driver.api.core.cql.Row;
19+
import org.jspecify.annotations.Nullable;
1920

2021
/**
2122
* Converter for Cassandra query results.
@@ -31,7 +32,7 @@
3132
* @since 5.0
3233
*/
3334
@FunctionalInterface
34-
public interface QueryResultConverter<T, R> {
35+
public interface QueryResultConverter<T, R extends @Nullable Object> {
3536

3637
/**
3738
* Returns a function that returns the materialized entity.

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/ReactiveCassandraBatchOperations.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ default ReactiveCassandraBatchOperations update(Object entity, WriteOptions opti
279279
* @throws IllegalStateException if the batch was already executed.
280280
* @see UpdateOptions
281281
*/
282-
@Contract("_ -> this")
282+
@Contract("_, _ -> this")
283283
ReactiveCassandraBatchOperations update(Mono<? extends Iterable<?>> entities, WriteOptions options);
284284

285285
/**
@@ -291,7 +291,7 @@ default ReactiveCassandraBatchOperations update(Object entity, WriteOptions opti
291291
* @throws IllegalStateException if the batch was already executed.
292292
* @since 3.2.2
293293
*/
294-
@Contract("_ -> this")
294+
@Contract("_, _ -> this")
295295
default ReactiveCassandraBatchOperations delete(Object entity, WriteOptions options) {
296296

297297
Assert.notNull(entity, "Entity must not be null");

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/StatementFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1624,7 +1624,7 @@ public Columns computeProjection(EntityProjection<?, ?> projection,
16241624
Predicates.negate(CassandraPersistentProperty::hasExplicitColumnName));
16251625

16261626
for (CassandraPersistentProperty property : mapped) {
1627-
columns = columns.include(translator.translate(property).getColumnName());
1627+
columns = columns.include(translator.translate(property).getRequiredColumnName());
16281628
}
16291629
}
16301630

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/convert/CassandraConverters.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ public enum RowToDateConverter implements Converter<Row, Date> {
105105
INSTANCE;
106106

107107
@Override
108+
@SuppressWarnings("NullAway")
108109
public @Nullable Date convert(Row row) {
109110

110111
Instant instant = row.getInstant(0);
@@ -124,6 +125,7 @@ public enum RowToInstantConverter implements Converter<Row, Instant> {
124125
INSTANCE;
125126

126127
@Override
128+
@SuppressWarnings("NullAway")
127129
public @Nullable Instant convert(Row row) {
128130
return row.getInstant(0);
129131
}
@@ -140,6 +142,7 @@ public enum RowToInetAddressConverter implements Converter<Row, InetAddress> {
140142
INSTANCE;
141143

142144
@Override
145+
@SuppressWarnings("NullAway")
143146
public @Nullable InetAddress convert(Row row) {
144147
return row.getInetAddress(0);
145148
}
@@ -180,6 +183,7 @@ private static final class RowToNumber<T extends Number> implements Converter<Ro
180183
}
181184

182185
@Override
186+
@SuppressWarnings("NullAway")
183187
public @Nullable T convert(Row source) {
184188

185189
Object object = source.getObject(0);
@@ -200,6 +204,7 @@ public enum RowToStringConverter implements Converter<Row, String> {
200204
INSTANCE;
201205

202206
@Override
207+
@SuppressWarnings("NullAway")
203208
public @Nullable String convert(Row row) {
204209
return row.getString(0);
205210
}
@@ -216,6 +221,7 @@ public enum RowToUuidConverter implements Converter<Row, UUID> {
216221
INSTANCE;
217222

218223
@Override
224+
@SuppressWarnings("NullAway")
219225
public @Nullable UUID convert(Row row) {
220226
return row.getUuid(0);
221227
}
@@ -232,6 +238,7 @@ public enum RowToCassandraLocalDateConverter implements Converter<Row, LocalDate
232238
INSTANCE;
233239

234240
@Override
241+
@SuppressWarnings("NullAway")
235242
public @Nullable LocalDate convert(Row row) {
236243
return row.getLocalDate(0);
237244
}

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/query/SerializationUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,13 @@ private static String toString(Map<?, ?> source) {
113113
s -> String.format("%s : %s", serialize(s.getKey()), serialize(s.getValue())));
114114
}
115115

116+
@SuppressWarnings("NullAway")
116117
private static String toString(Set<?> source) {
117118
return iterableToDelimitedString(source, "{", "}",
118119
(Converter<Object, Object>) SerializationUtils::serializeToCqlSafely);
119120
}
120121

122+
@SuppressWarnings("NullAway")
121123
private static String toString(Collection<?> source) {
122124
return iterableToDelimitedString(source, "[", "]",
123125
(Converter<Object, Object>) SerializationUtils::serializeToCqlSafely);

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/aot/AotQueryCreator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ public AotPlaceholderParameterAccessor(CassandraParameters parameters, List<Para
7474
}
7575

7676
@Override
77+
@SuppressWarnings("NullAway")
7778
public CassandraScrollPosition getScrollPosition() {
7879
return null;
7980
}

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/AbstractCassandraQuery.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ private CassandraQueryExecution getExecution(CassandraParameterAccessor paramete
115115
return new ResultProcessingExecution(getExecutionToWrap(parameterAccessor, resultProcessing), resultProcessing);
116116
}
117117

118+
@SuppressWarnings("NullAway")
118119
private CassandraQueryExecution getExecutionToWrap(CassandraParameterAccessor parameterAccessor,
119120
Converter<Object, Object> resultProcessing) {
120121

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/AbstractReactiveCassandraQuery.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ private ReactiveCassandraQueryExecution getExecution(ReactiveCassandraParameterA
121121
return new ResultProcessingExecution(getExecutionToWrap(parameterAccessor), resultProcessing);
122122
}
123123

124+
@SuppressWarnings("NullAway")
124125
private ReactiveCassandraQueryExecution getExecutionToWrap(CassandraParameterAccessor parameterAccessor) {
125126

126127
if (getQueryMethod().isSliceQuery()) {

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraQueryCreator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ protected QueryBuilder getQueryBuilder() {
106106
}
107107

108108
@Override
109+
@SuppressWarnings("NullAway")
109110
protected Filter create(Part part, Iterator<Object> iterator) {
110111

111112
PersistentPropertyPath<CassandraPersistentProperty> path = getMappingContext()
@@ -122,6 +123,7 @@ protected Filter create(Part part, Iterator<Object> iterator) {
122123
}
123124

124125
@Override
126+
@SuppressWarnings("NullAway")
125127
protected Filter and(Part part, @Nullable Filter base, Iterator<Object> iterator) {
126128

127129
if (base != null) {
@@ -158,6 +160,7 @@ protected Query complete(@Nullable Filter criteria, Sort sort) {
158160
return query;
159161
}
160162

163+
@SuppressWarnings("NullAway")
161164
private Sort getVectorSort() {
162165
return VectorSort.ann(getVectorProperty().toDotPath(), parameterAccessor.getVector());
163166
}

0 commit comments

Comments
 (0)