Skip to content

Commit 5ac6dfc

Browse files
committed
Add nullability annotations to module/spring-boot-elasticsearch
See gh-46587
1 parent b8f74b1 commit 5ac6dfc

File tree

11 files changed

+58
-47
lines changed

11 files changed

+58
-47
lines changed

module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchConnectionDetails.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import java.net.URISyntaxException;
2121
import java.util.List;
2222

23+
import org.jspecify.annotations.Nullable;
24+
2325
import org.springframework.boot.autoconfigure.service.connection.ConnectionDetails;
2426
import org.springframework.boot.ssl.SslBundle;
2527

@@ -43,15 +45,15 @@ public interface ElasticsearchConnectionDetails extends ConnectionDetails {
4345
* Username for authentication with Elasticsearch.
4446
* @return username for authentication with Elasticsearch or {@code null}
4547
*/
46-
default String getUsername() {
48+
default @Nullable String getUsername() {
4749
return null;
4850
}
4951

5052
/**
5153
* Password for authentication with Elasticsearch.
5254
* @return password for authentication with Elasticsearch or {@code null}
5355
*/
54-
default String getPassword() {
56+
default @Nullable String getPassword() {
5557
return null;
5658
}
5759

@@ -60,15 +62,15 @@ default String getPassword() {
6062
* @return prefix added to the path of every request sent to Elasticsearch or
6163
* {@code null}
6264
*/
63-
default String getPathPrefix() {
65+
default @Nullable String getPathPrefix() {
6466
return null;
6567
}
6668

6769
/**
6870
* SSL bundle to use.
6971
* @return the SSL bundle to use
7072
*/
71-
default SslBundle getSslBundle() {
73+
default @Nullable SslBundle getSslBundle() {
7274
return null;
7375
}
7476

@@ -81,7 +83,8 @@ default SslBundle getSslBundle() {
8183
* @param username the username or {@code null}
8284
* @param password the password or {@code null}
8385
*/
84-
record Node(String hostname, int port, Node.Protocol protocol, String username, String password) {
86+
record Node(String hostname, int port, Node.Protocol protocol, @Nullable String username,
87+
@Nullable String password) {
8588

8689
public Node(String host, int port, Node.Protocol protocol) {
8790
this(host, port, protocol, null, null);
@@ -96,7 +99,7 @@ URI toUri() {
9699
}
97100
}
98101

99-
private String userInfo() {
102+
private @Nullable String userInfo() {
100103
if (this.username == null) {
101104
return null;
102105
}

module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchProperties.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import java.util.Collections;
2222
import java.util.List;
2323

24+
import org.jspecify.annotations.Nullable;
25+
2426
import org.springframework.boot.context.properties.ConfigurationProperties;
2527

2628
/**
@@ -40,12 +42,12 @@ public class ElasticsearchProperties {
4042
/**
4143
* Username for authentication with Elasticsearch.
4244
*/
43-
private String username;
45+
private @Nullable String username;
4446

4547
/**
4648
* Password for authentication with Elasticsearch.
4749
*/
48-
private String password;
50+
private @Nullable String password;
4951

5052
/**
5153
* Connection timeout used when communicating with Elasticsearch.
@@ -65,7 +67,7 @@ public class ElasticsearchProperties {
6567
/**
6668
* Prefix added to the path of every request sent to Elasticsearch.
6769
*/
68-
private String pathPrefix;
70+
private @Nullable String pathPrefix;
6971

7072
private final Restclient restclient = new Restclient();
7173

@@ -77,19 +79,19 @@ public void setUris(List<String> uris) {
7779
this.uris = uris;
7880
}
7981

80-
public String getUsername() {
82+
public @Nullable String getUsername() {
8183
return this.username;
8284
}
8385

84-
public void setUsername(String username) {
86+
public void setUsername(@Nullable String username) {
8587
this.username = username;
8688
}
8789

88-
public String getPassword() {
90+
public @Nullable String getPassword() {
8991
return this.password;
9092
}
9193

92-
public void setPassword(String password) {
94+
public void setPassword(@Nullable String password) {
9395
this.password = password;
9496
}
9597

@@ -117,11 +119,11 @@ public void setSocketKeepAlive(boolean socketKeepAlive) {
117119
this.socketKeepAlive = socketKeepAlive;
118120
}
119121

120-
public String getPathPrefix() {
122+
public @Nullable String getPathPrefix() {
121123
return this.pathPrefix;
122124
}
123125

124-
public void setPathPrefix(String pathPrefix) {
126+
public void setPathPrefix(@Nullable String pathPrefix) {
125127
this.pathPrefix = pathPrefix;
126128
}
127129

@@ -178,13 +180,13 @@ public static class Ssl {
178180
/**
179181
* SSL bundle name.
180182
*/
181-
private String bundle;
183+
private @Nullable String bundle;
182184

183-
public String getBundle() {
185+
public @Nullable String getBundle() {
184186
return this.bundle;
185187
}
186188

187-
public void setBundle(String bundle) {
189+
public void setBundle(@Nullable String bundle) {
188190
this.bundle = bundle;
189191
}
190192

module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientConfigurations.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.elasticsearch.client.RestClientBuilder;
3838
import org.elasticsearch.client.sniff.Sniffer;
3939
import org.elasticsearch.client.sniff.SnifferBuilder;
40+
import org.jspecify.annotations.Nullable;
4041

4142
import org.springframework.beans.factory.ObjectProvider;
4243
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -209,7 +210,7 @@ private Stream<URI> getUris(ElasticsearchConnectionDetails connectionDetails) {
209210
return connectionDetails.getNodes().stream().map(Node::toUri);
210211
}
211212

212-
private boolean hasUserInfo(URI uri) {
213+
private boolean hasUserInfo(@Nullable URI uri) {
213214
return uri != null && StringUtils.hasLength(uri.getUserInfo());
214215
}
215216

@@ -238,9 +239,9 @@ static class PropertiesElasticsearchConnectionDetails implements ElasticsearchCo
238239

239240
private final ElasticsearchProperties properties;
240241

241-
private final SslBundles sslBundles;
242+
private final @Nullable SslBundles sslBundles;
242243

243-
PropertiesElasticsearchConnectionDetails(ElasticsearchProperties properties, SslBundles sslBundles) {
244+
PropertiesElasticsearchConnectionDetails(ElasticsearchProperties properties, @Nullable SslBundles sslBundles) {
244245
this.properties = properties;
245246
this.sslBundles = sslBundles;
246247
}
@@ -251,22 +252,22 @@ public List<Node> getNodes() {
251252
}
252253

253254
@Override
254-
public String getUsername() {
255+
public @Nullable String getUsername() {
255256
return this.properties.getUsername();
256257
}
257258

258259
@Override
259-
public String getPassword() {
260+
public @Nullable String getPassword() {
260261
return this.properties.getPassword();
261262
}
262263

263264
@Override
264-
public String getPathPrefix() {
265+
public @Nullable String getPathPrefix() {
265266
return this.properties.getPathPrefix();
266267
}
267268

268269
@Override
269-
public SslBundle getSslBundle() {
270+
public @Nullable SslBundle getSslBundle() {
270271
Ssl ssl = this.properties.getRestclient().getSsl();
271272
if (StringUtils.hasLength(ssl.getBundle())) {
272273
Assert.notNull(this.sslBundles, "SSL bundle name has been set but no SSL bundles found in context");

module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/health/package-info.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@
1717
/**
1818
* Auto-configuration for Elasticsearch health.
1919
*/
20+
@NullMarked
2021
package org.springframework.boot.elasticsearch.autoconfigure.health;
22+
23+
import org.jspecify.annotations.NullMarked;

module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/package-info.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@
1717
/**
1818
* Auto-configuration for Elasticsearch client.
1919
*/
20+
@NullMarked
2021
package org.springframework.boot.elasticsearch.autoconfigure;
22+
23+
import org.jspecify.annotations.NullMarked;

module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchDockerComposeConnectionDetailsFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.util.List;
2020

21+
import org.jspecify.annotations.Nullable;
22+
2123
import org.springframework.boot.docker.compose.core.RunningService;
2224
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory;
2325
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource;
@@ -73,7 +75,7 @@ public String getUsername() {
7375
}
7476

7577
@Override
76-
public String getPassword() {
78+
public @Nullable String getPassword() {
7779
return this.environment.getPassword();
7880
}
7981

module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchEnvironment.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.util.Map;
2020

21+
import org.jspecify.annotations.Nullable;
22+
2123
import org.springframework.util.Assert;
2224

2325
/**
@@ -29,14 +31,14 @@
2931
*/
3032
class ElasticsearchEnvironment {
3133

32-
private final String password;
34+
private final @Nullable String password;
3335

3436
ElasticsearchEnvironment(Map<String, String> env) {
3537
Assert.state(!env.containsKey("ELASTIC_PASSWORD_FILE"), "ELASTIC_PASSWORD_FILE is not supported");
3638
this.password = env.get("ELASTIC_PASSWORD");
3739
}
3840

39-
String getPassword() {
41+
@Nullable String getPassword() {
4042
return this.password;
4143
}
4244

module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/package-info.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@
1717
/**
1818
* Support for Docker Compose Elasticsearch service connections.
1919
*/
20+
@NullMarked
2021
package org.springframework.boot.elasticsearch.docker.compose;
22+
23+
import org.jspecify.annotations.NullMarked;

module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/health/package-info.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@
1717
/**
1818
* Health integration for Elasticsearch.
1919
*/
20+
@NullMarked
2021
package org.springframework.boot.elasticsearch.health;
22+
23+
import org.jspecify.annotations.NullMarked;

module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/testcontainers/ElasticsearchContainerConnectionDetailsFactory.java

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.security.cert.CertificateFactory;
2727
import java.util.List;
2828

29+
import org.jspecify.annotations.Nullable;
2930
import org.testcontainers.elasticsearch.ElasticsearchContainer;
3031

3132
import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchConnectionDetails;
@@ -64,7 +65,7 @@ protected ElasticsearchConnectionDetails getContainerConnectionDetails(
6465
private static final class ElasticsearchContainerConnectionDetails
6566
extends ContainerConnectionDetails<ElasticsearchContainer> implements ElasticsearchConnectionDetails {
6667

67-
private volatile SslBundle sslBundle;
68+
private volatile @Nullable SslBundle sslBundle;
6869

6970
private ElasticsearchContainerConnectionDetails(ContainerConnectionSource<ElasticsearchContainer> source) {
7071
super(source);
@@ -76,7 +77,7 @@ public String getUsername() {
7677
}
7778

7879
@Override
79-
public String getPassword() {
80+
public @Nullable String getPassword() {
8081
return getContainer().getEnvMap().get("ELASTIC_PASSWORD");
8182
}
8283

@@ -89,7 +90,7 @@ public List<Node> getNodes() {
8990
}
9091

9192
@Override
92-
public SslBundle getSslBundle() {
93+
public @Nullable SslBundle getSslBundle() {
9394
if (this.sslBundle != null) {
9495
return this.sslBundle;
9596
}
@@ -111,22 +112,7 @@ public SslBundle getSslBundle() {
111112
}
112113

113114
private SslBundle createSslBundleWithTrustStore(KeyStore trustStore) {
114-
return SslBundle.of(new SslStoreBundle() {
115-
@Override
116-
public KeyStore getKeyStore() {
117-
return null;
118-
}
119-
120-
@Override
121-
public String getKeyStorePassword() {
122-
return null;
123-
}
124-
125-
@Override
126-
public KeyStore getTrustStore() {
127-
return trustStore;
128-
}
129-
});
115+
return SslBundle.of(SslStoreBundle.of(null, null, trustStore));
130116
}
131117

132118
private KeyStore createTrustStore(byte[] caCertificate) {

0 commit comments

Comments
 (0)