Skip to content

Commit 0c7d568

Browse files
committed
Add JSpecify nullability annotations to Java APIs.
[resolves #689]
1 parent 92cdd01 commit 0c7d568

File tree

93 files changed

+215
-256
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+215
-256
lines changed

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
<awaitility.version>4.3.0</awaitility.version>
3737
<hikari-cp.version>4.0.3</hikari-cp.version>
3838
<java.version>1.8</java.version>
39-
<jsr305.version>3.0.2</jsr305.version>
39+
<jspecify.version>1.0.0</jspecify.version>
4040
<junit.version>6.0.0</junit.version>
4141
<jmh.version>1.37</jmh.version>
4242
<mbr.version>1.0.0</mbr.version>
@@ -156,9 +156,9 @@
156156
<optional>true</optional>
157157
</dependency>
158158
<dependency>
159-
<groupId>com.google.code.findbugs</groupId>
160-
<artifactId>jsr305</artifactId>
161-
<version>${jsr305.version}</version>
159+
<groupId>org.jspecify</groupId>
160+
<artifactId>jspecify</artifactId>
161+
<version>${jspecify.version}</version>
162162
<scope>provided</scope>
163163
</dependency>
164164
<dependency>

src/main/java/io/r2dbc/postgresql/BoundedStatementCache.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
import io.r2dbc.postgresql.client.Client;
2121
import io.r2dbc.postgresql.client.ExtendedQueryMessageFlow;
2222
import io.r2dbc.postgresql.util.Assert;
23+
import org.jspecify.annotations.Nullable;
2324
import reactor.util.Logger;
2425
import reactor.util.Loggers;
25-
import reactor.util.annotation.Nullable;
2626

2727
import java.util.ArrayList;
2828
import java.util.Arrays;
@@ -141,8 +141,7 @@ Collection<String> getCachedStatementNames() {
141141
* @see CacheKey
142142
* @return statement name by key
143143
*/
144-
@Nullable
145-
private String get(CacheKey key) {
144+
private @Nullable String get(CacheKey key) {
146145
synchronized (this.cache) {
147146
return this.cache.get(key);
148147
}

src/main/java/io/r2dbc/postgresql/EscapeAwareColumnMatcher.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package io.r2dbc.postgresql;
1818

19-
import reactor.util.annotation.Nullable;
19+
import org.jspecify.annotations.Nullable;
2020

2121
import java.util.Collection;
2222

@@ -26,8 +26,7 @@
2626
*/
2727
final class EscapeAwareColumnMatcher {
2828

29-
@Nullable
30-
public static String findColumn(String name, Collection<String> names) {
29+
public static @Nullable String findColumn(String name, Collection<String> names) {
3130

3231
for (String s : names) {
3332
if (matches(name, s)) {

src/main/java/io/r2dbc/postgresql/ExceptionFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
import io.r2dbc.spi.R2dbcPermissionDeniedException;
2828
import io.r2dbc.spi.R2dbcRollbackException;
2929
import io.r2dbc.spi.R2dbcTransientException;
30+
import org.jspecify.annotations.Nullable;
3031
import reactor.core.publisher.SynchronousSink;
31-
import reactor.util.annotation.Nullable;
3232

3333
/**
3434
* Factory for Postgres-specific {@link R2dbcException}s.

src/main/java/io/r2dbc/postgresql/ExtendedFlowDelegate.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@
4444
import io.r2dbc.postgresql.message.frontend.Parse;
4545
import io.r2dbc.postgresql.message.frontend.Sync;
4646
import io.r2dbc.postgresql.util.Operators;
47+
import org.jspecify.annotations.Nullable;
4748
import reactor.core.publisher.Flux;
4849
import reactor.core.publisher.Sinks;
4950
import reactor.core.publisher.SynchronousSink;
50-
import reactor.util.annotation.Nullable;
5151
import reactor.util.concurrent.Queues;
5252

5353
import java.util.ArrayList;
@@ -313,8 +313,7 @@ static class ExtendedFlowOperator extends AtomicInteger implements Predicate<Bac
313313

314314
private final Binding binding;
315315

316-
@Nullable
317-
private volatile String name;
316+
private volatile @Nullable String name;
318317

319318
private final StatementCache cache;
320319

src/main/java/io/r2dbc/postgresql/MultiHostConnectionStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
import io.r2dbc.postgresql.codec.DefaultCodecs;
2323
import io.r2dbc.postgresql.util.Assert;
2424
import io.r2dbc.spi.IsolationLevel;
25+
import org.jspecify.annotations.Nullable;
2526
import reactor.core.publisher.Flux;
2627
import reactor.core.publisher.Mono;
2728

28-
import javax.annotation.Nullable;
2929
import java.net.SocketAddress;
3030
import java.time.Clock;
3131
import java.time.Instant;

src/main/java/io/r2dbc/postgresql/PostgresqlConnection.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import io.r2dbc.spi.TransactionDefinition;
4242
import io.r2dbc.spi.ValidationDepth;
4343
import io.r2dbc.spi.Wrapped;
44+
import org.jspecify.annotations.Nullable;
4445
import org.reactivestreams.Publisher;
4546
import org.reactivestreams.Subscription;
4647
import reactor.core.CoreSubscriber;
@@ -52,7 +53,6 @@
5253
import reactor.core.scheduler.Scheduler;
5354
import reactor.util.Logger;
5455
import reactor.util.Loggers;
55-
import reactor.util.annotation.Nullable;
5656

5757
import java.time.Duration;
5858
import java.util.concurrent.atomic.AtomicReference;
@@ -509,8 +509,7 @@ static class NotificationAdapter {
509509

510510
private final Sinks.Many<Notification> sink = Sinks.many().multicast().directBestEffort();
511511

512-
@Nullable
513-
private volatile Disposable subscription = null;
512+
private volatile @Nullable Disposable subscription = null;
514513

515514
void dispose() {
516515
Disposable subscription = this.subscription;

src/main/java/io/r2dbc/postgresql/PostgresqlConnectionConfiguration.java

Lines changed: 24 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@
3737
import io.r2dbc.postgresql.message.backend.NoticeResponse;
3838
import io.r2dbc.postgresql.util.Assert;
3939
import io.r2dbc.postgresql.util.LogLevel;
40+
import org.jspecify.annotations.Nullable;
4041
import org.reactivestreams.Publisher;
4142
import reactor.core.publisher.Mono;
4243
import reactor.netty.resources.LoopResources;
43-
import reactor.util.annotation.Nullable;
4444

4545
import javax.net.ssl.HostnameVerifier;
4646
import javax.net.ssl.SNIHostName;
@@ -86,8 +86,7 @@ public final class PostgresqlConnectionConfiguration {
8686

8787
private final boolean compatibilityMode;
8888

89-
@Nullable
90-
private final Duration connectTimeout;
89+
private final @Nullable Duration connectTimeout;
9190

9291
private final String database;
9392

@@ -99,31 +98,25 @@ public final class PostgresqlConnectionConfiguration {
9998

10099
private final boolean forceBinary;
101100

102-
@Nullable
103-
private final Duration lockWaitTimeout;
101+
private final @Nullable Duration lockWaitTimeout;
104102

105-
@Nullable
106-
private final LoopResources loopResources;
103+
private final @Nullable LoopResources loopResources;
107104

108-
@Nullable
109-
private final MultiHostConfiguration multiHostConfiguration;
105+
private final @Nullable MultiHostConfiguration multiHostConfiguration;
110106

111107
private final LogLevel noticeLogLevel;
112108

113109
private final Map<String, String> options;
114110

115-
@Nullable
116-
private final Publisher<CharSequence> password;
111+
private final @Nullable Publisher<CharSequence> password;
117112

118113
private final boolean preferAttachedBuffers;
119114

120115
private final int preparedStatementCacheQueries;
121116

122-
@Nullable
123-
private final SingleHostConfiguration singleHostConfiguration;
117+
private final @Nullable SingleHostConfiguration singleHostConfiguration;
124118

125-
@Nullable
126-
private final Duration statementTimeout;
119+
private final @Nullable Duration statementTimeout;
127120

128121
private final SSLConfig sslConfig;
129122

@@ -135,7 +128,7 @@ public final class PostgresqlConnectionConfiguration {
135128

136129
private final Publisher<String> username;
137130

138-
private PostgresqlConnectionConfiguration(String applicationName, boolean autodetectExtensions, @Nullable boolean compatibilityMode, @Nullable Duration connectTimeout, @Nullable String database
131+
private PostgresqlConnectionConfiguration(String applicationName, boolean autodetectExtensions, boolean compatibilityMode, @Nullable Duration connectTimeout, @Nullable String database
139132
, LogLevel errorResponseLogLevel, List<Extension> extensions, ToIntFunction<String> fetchSize, boolean forceBinary, @Nullable Duration lockWaitTimeout,
140133
@Nullable LoopResources loopResources, @Nullable MultiHostConfiguration multiHostConfiguration, LogLevel noticeLogLevel,
141134
@Nullable Map<String, String> options, @Nullable Publisher<CharSequence> password, boolean preferAttachedBuffers, int preparedStatementCacheQueries,
@@ -230,7 +223,6 @@ Duration getConnectTimeout() {
230223
return this.connectTimeout;
231224
}
232225

233-
@Nullable
234226
String getDatabase() {
235227
return this.database;
236228
}
@@ -360,11 +352,9 @@ public static final class Builder {
360352

361353
private boolean compatibilityMode = false;
362354

363-
@Nullable
364-
private Duration connectTimeout;
355+
private @Nullable Duration connectTimeout;
365356

366-
@Nullable
367-
private String database;
357+
private @Nullable String database;
368358

369359
private LogLevel errorResponseLogLevel = LogLevel.DEBUG;
370360

@@ -374,49 +364,39 @@ public static final class Builder {
374364

375365
private boolean forceBinary = false;
376366

377-
@Nullable
378-
private Duration lockWaitTimeout;
367+
private @Nullable Duration lockWaitTimeout;
379368

380-
@Nullable
381-
private MultiHostConfiguration.Builder multiHostConfiguration;
369+
private MultiHostConfiguration.@Nullable Builder multiHostConfiguration;
382370

383371
private LogLevel noticeLogLevel = LogLevel.DEBUG;
384372

385-
private Map<String, String> options;
373+
private @Nullable Map<String, String> options;
386374

387-
@Nullable
388-
private Publisher<CharSequence> password;
375+
private @Nullable Publisher<CharSequence> password;
389376

390377
private boolean preferAttachedBuffers = false;
391378

392379
private int preparedStatementCacheQueries = -1;
393380

394-
@Nullable
395-
private String schema;
381+
private @Nullable String schema;
396382

397-
@Nullable
398-
private SingleHostConfiguration.Builder singleHostConfiguration;
383+
private SingleHostConfiguration.@Nullable Builder singleHostConfiguration;
399384

400-
@Nullable
401-
private URL sslCert = null;
385+
private @Nullable URL sslCert = null;
402386

403387
private HostnameVerifier sslHostnameVerifier = DefaultHostnameVerifier.INSTANCE;
404388

405-
@Nullable
406-
private URL sslKey = null;
389+
private @Nullable URL sslKey = null;
407390

408391
private SSLMode sslMode = SSLMode.DISABLE;
409392

410393
private SSLNegotiation sslNegotiation = SSLNegotiation.POSTGRES;
411394

412-
@Nullable
413-
private CharSequence sslPassword = null;
395+
private @Nullable CharSequence sslPassword = null;
414396

415-
@Nullable
416-
private URL sslRootCert = null;
397+
private @Nullable URL sslRootCert = null;
417398

418-
@Nullable
419-
private Duration statementTimeout = null;
399+
private @Nullable Duration statementTimeout = null;
420400

421401
private Function<SslContextBuilder, SslContextBuilder> sslContextBuilderCustomizer = Function.identity();
422402

@@ -432,11 +412,9 @@ public static final class Builder {
432412

433413
private TimeZone timeZone = TimeZone.getDefault();
434414

435-
@Nullable
436-
private LoopResources loopResources = null;
415+
private @Nullable LoopResources loopResources = null;
437416

438-
@Nullable
439-
private Publisher<String> username;
417+
private @Nullable Publisher<String> username;
440418

441419
private Builder() {
442420
}

src/main/java/io/r2dbc/postgresql/PostgresqlConnectionFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@
3131
import io.r2dbc.spi.IsolationLevel;
3232
import io.r2dbc.spi.R2dbcException;
3333
import io.r2dbc.spi.R2dbcNonTransientResourceException;
34+
import org.jspecify.annotations.Nullable;
3435
import org.reactivestreams.Publisher;
3536
import reactor.core.publisher.Flux;
3637
import reactor.core.publisher.Mono;
37-
import reactor.util.annotation.Nullable;
3838

3939
import java.time.ZoneId;
4040
import java.util.ArrayList;

src/main/java/io/r2dbc/postgresql/PostgresqlCopyIn.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@
3131
import io.r2dbc.postgresql.message.frontend.Query;
3232
import io.r2dbc.postgresql.util.Assert;
3333
import io.r2dbc.postgresql.util.Operators;
34+
import org.jspecify.annotations.Nullable;
3435
import org.reactivestreams.Publisher;
3536
import reactor.core.publisher.Flux;
3637
import reactor.core.publisher.Mono;
3738
import reactor.core.publisher.Sinks;
38-
import reactor.util.annotation.Nullable;
3939

4040
import java.util.concurrent.atomic.AtomicBoolean;
4141
import java.util.concurrent.atomic.AtomicReference;
@@ -140,8 +140,7 @@ static final class Builder implements CopyInBuilder {
140140

141141
private final String sql;
142142

143-
@Nullable
144-
private Publisher<? extends Publisher<ByteBuf>> stdin;
143+
private @Nullable Publisher<? extends Publisher<ByteBuf>> stdin;
145144

146145
Builder(ConnectionResources resources, String sql) {
147146
this.resources = resources;

0 commit comments

Comments
 (0)