diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ApiStreamObserverDelegate.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ApiStreamObserverDelegate.java
index c19818751b1d..fd8c6abb0813 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ApiStreamObserverDelegate.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ApiStreamObserverDelegate.java
@@ -31,12 +31,14 @@
import com.google.api.gax.rpc.ApiStreamObserver;
import io.grpc.stub.StreamObserver;
+import org.jspecify.annotations.NullMarked;
/**
* A delegate class that transfers calls to the ApiStreamObserver object.
*
*
Package-private for internal use.
*/
+@NullMarked
class ApiStreamObserverDelegate implements StreamObserver {
private final ApiStreamObserver delegate;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/CallOptionsUtil.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/CallOptionsUtil.java
index 9d6e85bdaac3..4904e34f0990 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/CallOptionsUtil.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/CallOptionsUtil.java
@@ -37,8 +37,10 @@
import io.grpc.Metadata.Key;
import java.util.Collections;
import java.util.Map;
+import org.jspecify.annotations.NullMarked;
/** A utility class that provides helper functions to work with custom call options. */
+@NullMarked
class CallOptionsUtil {
// this is a call option name, not a header name, it is not transferred over the wire
private static final CallOptions.Key, String>> DYNAMIC_HEADERS_CALL_OPTION_KEY =
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelFactory.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelFactory.java
index 416ce44699fe..3ecedd5201e8 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelFactory.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelFactory.java
@@ -32,12 +32,14 @@
import com.google.api.core.InternalApi;
import io.grpc.ManagedChannel;
import java.io.IOException;
+import org.jspecify.annotations.NullMarked;
/**
* This interface represents a factory for creating one ManagedChannel
*
* This is public only for technical reasons, for advanced usage.
*/
+@NullMarked
@InternalApi("For internal use by google-cloud-java clients only")
public interface ChannelFactory {
ManagedChannel createSingleChannel() throws IOException;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPool.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPool.java
index d611c96ff4c8..fab73a55dccf 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPool.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPool.java
@@ -56,7 +56,8 @@
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* A {@link ManagedChannel} that will send requests round-robin via a set of channels.
@@ -68,6 +69,7 @@
*
*
Package-private for internal use.
*/
+@NullMarked
class ChannelPool extends ManagedChannel {
static final String CHANNEL_POOL_CONSECUTIVE_RESIZING_WARNING =
"The gRPC ChannelPool used in the client has been flagged to be repeatedly resizing (5+ times). See https://github.com/googleapis/google-cloud-java/blob/main/docs/grpc_channel_pool_guide.md for more information about this behavior.";
@@ -78,8 +80,8 @@ class ChannelPool extends ManagedChannel {
private final ChannelFactory channelFactory;
private final FixedExecutorProvider backgroundExecutorProvider;
- private ScheduledFuture> refreshFuture = null;
- private ScheduledFuture> resizeFuture = null;
+ private @Nullable ScheduledFuture> refreshFuture = null;
+ private @Nullable ScheduledFuture> resizeFuture = null;
private final Object entryWriteLock = new Object();
@VisibleForTesting final AtomicReference> entries = new AtomicReference<>();
@@ -621,7 +623,7 @@ public ClientCall newCall(
/** ClientCall wrapper that makes sure to decrement the outstanding RPC count on completion. */
static class ReleasingClientCall extends SimpleForwardingClientCall {
- @Nullable private CancellationException cancellationException;
+ private @Nullable CancellationException cancellationException;
final Entry entry;
private final AtomicBoolean wasClosed = new AtomicBoolean();
private final AtomicBoolean wasReleased = new AtomicBoolean();
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPoolSettings.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPoolSettings.java
index 559e1197bc59..443caaa429af 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPoolSettings.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPoolSettings.java
@@ -34,6 +34,7 @@
import com.google.auto.value.AutoValue;
import com.google.common.base.Preconditions;
import java.time.Duration;
+import org.jspecify.annotations.NullMarked;
/**
* Settings to control {@link ChannelPool} behavior.
@@ -52,6 +53,7 @@
*
* The settings in this class will be applied every minute.
*/
+@NullMarked
@BetaApi("surface for channel pool sizing is not yet stable")
@AutoValue
public abstract class ChannelPoolSettings {
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPrimer.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPrimer.java
index 5964de957c71..12e05fdf72c5 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPrimer.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ChannelPrimer.java
@@ -31,12 +31,14 @@
import com.google.api.core.InternalApi;
import io.grpc.ManagedChannel;
+import org.jspecify.annotations.NullMarked;
/**
* An interface to prepare a ManagedChannel for normal requests by priming the channel
*
*
This is public only for technical reasons, for advanced usage.
*/
+@NullMarked
@InternalApi("For internal use by google-cloud-java clients only")
public interface ChannelPrimer {
void primeChannel(ManagedChannel managedChannel);
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ExceptionResponseObserver.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ExceptionResponseObserver.java
index f9357f9d5dec..bc329581864e 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ExceptionResponseObserver.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ExceptionResponseObserver.java
@@ -33,8 +33,10 @@
import com.google.api.gax.rpc.StateCheckingResponseObserver;
import com.google.api.gax.rpc.StreamController;
import java.util.concurrent.CancellationException;
+import org.jspecify.annotations.NullMarked;
/** Package-private for internal use. */
+@NullMarked
class ExceptionResponseObserver
extends StateCheckingResponseObserver {
private ResponseObserver innerObserver;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GaxGrpcProperties.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GaxGrpcProperties.java
index e36665501789..74aada53fb3d 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GaxGrpcProperties.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GaxGrpcProperties.java
@@ -33,8 +33,10 @@
import com.google.api.gax.core.GaxProperties;
import io.grpc.Channel;
import java.util.regex.Pattern;
+import org.jspecify.annotations.NullMarked;
/** Provides properties of the GAX-GRPC library. */
+@NullMarked
@InternalApi
public class GaxGrpcProperties {
private static final String GAX_GRPC_VERSION =
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcApiExceptionFactory.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcApiExceptionFactory.java
index 9c3dd0a8433e..6721fcb31cf4 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcApiExceptionFactory.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcApiExceptionFactory.java
@@ -41,6 +41,7 @@
import io.grpc.StatusException;
import io.grpc.StatusRuntimeException;
import java.util.Set;
+import org.jspecify.annotations.NullMarked;
/**
* Core logic for transforming GRPC exceptions into {@link ApiException}s. This logic is shared
@@ -48,6 +49,7 @@
*
* Package-private for internal use.
*/
+@NullMarked
class GrpcApiExceptionFactory {
@VisibleForTesting static final String ERROR_DETAIL_KEY = "grpc-status-details-bin";
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallContext.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallContext.java
index 7ff7c54de6f0..ed7eea3a54de 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallContext.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallContext.java
@@ -65,7 +65,8 @@
import java.util.Objects;
import java.util.Set;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* GrpcCallContext encapsulates context data used to make a grpc call.
@@ -75,6 +76,7 @@
* #withTransportChannel}, return copies of the object, but with one field changed. The immutability
* and thread safety of the arguments solely depends on the arguments themselves.
*/
+@NullMarked
@BetaApi("Reference ApiCallContext instead - this class is likely to experience breaking changes")
public final class GrpcCallContext implements ApiCallContext {
private static final GrpcStatusCode UNAUTHENTICATED_STATUS_CODE =
@@ -85,14 +87,14 @@ public final class GrpcCallContext implements ApiCallContext {
public static final CallOptions.Key TRACER_KEY = CallOptions.Key.create("gax.tracer");
private final Channel channel;
- @Nullable private final Credentials credentials;
+ private final @Nullable Credentials credentials;
private final CallOptions callOptions;
- @Nullable private final java.time.Duration timeout;
- @Nullable private final java.time.Duration streamWaitTimeout;
- @Nullable private final java.time.Duration streamIdleTimeout;
- @Nullable private final Integer channelAffinity;
- @Nullable private final RetrySettings retrySettings;
- @Nullable private final ImmutableSet retryableCodes;
+ private final java.time.@Nullable Duration timeout;
+ private final java.time.@Nullable Duration streamWaitTimeout;
+ private final java.time.@Nullable Duration streamIdleTimeout;
+ private final @Nullable Integer channelAffinity;
+ private final @Nullable RetrySettings retrySettings;
+ private final @Nullable ImmutableSet retryableCodes;
private final ImmutableMap> extraHeaders;
private final ApiCallContextOptions options;
private final EndpointContext endpointContext;
@@ -135,12 +137,12 @@ public static GrpcCallContext of(Channel channel, CallOptions callOptions) {
}
private GrpcCallContext(
- Channel channel,
+ @Nullable Channel channel,
@Nullable Credentials credentials,
CallOptions callOptions,
- @Nullable java.time.Duration timeout,
- @Nullable java.time.Duration streamWaitTimeout,
- @Nullable java.time.Duration streamIdleTimeout,
+ java.time.@Nullable Duration timeout,
+ java.time.@Nullable Duration streamWaitTimeout,
+ java.time.@Nullable Duration streamIdleTimeout,
@Nullable Integer channelAffinity,
ImmutableMap> extraHeaders,
ApiCallContextOptions options,
@@ -257,12 +259,12 @@ public GrpcCallContext withEndpointContext(EndpointContext endpointContext) {
/** This method is obsolete. Use {@link #withTimeoutDuration(java.time.Duration)} instead. */
@Override
@ObsoleteApi("Use withTimeoutDuration(java.time.Duration) instead")
- public GrpcCallContext withTimeout(@Nullable org.threeten.bp.Duration timeout) {
+ public GrpcCallContext withTimeout(org.threeten.bp.@Nullable Duration timeout) {
return withTimeoutDuration(toJavaTimeDuration(timeout));
}
@Override
- public GrpcCallContext withTimeoutDuration(@Nullable java.time.Duration timeout) {
+ public GrpcCallContext withTimeoutDuration(java.time.@Nullable Duration timeout) {
// Default RetrySettings use 0 for RPC timeout. Treat that as disabled timeouts.
if (timeout != null && (timeout.isZero() || timeout.isNegative())) {
timeout = null;
@@ -289,17 +291,14 @@ public GrpcCallContext withTimeoutDuration(@Nullable java.time.Duration timeout)
isDirectPath);
}
- /** This method is obsolete. Use {@link #getTimeoutDuration()} instead. */
- @Nullable
@Override
@ObsoleteApi("Use getTimeoutDuration() instead")
- public org.threeten.bp.Duration getTimeout() {
+ public org.threeten.bp.@Nullable Duration getTimeout() {
return toThreetenDuration(getTimeoutDuration());
}
- @Nullable
@Override
- public java.time.Duration getTimeoutDuration() {
+ public java.time.@Nullable Duration getTimeoutDuration() {
return timeout;
}
@@ -310,13 +309,13 @@ public java.time.Duration getTimeoutDuration() {
@Override
@ObsoleteApi("Use withStreamWaitTimeoutDuration(java.time.Duration) instead")
public GrpcCallContext withStreamWaitTimeout(
- @Nullable org.threeten.bp.Duration streamWaitTimeout) {
+ org.threeten.bp.@Nullable Duration streamWaitTimeout) {
return withStreamWaitTimeoutDuration(toJavaTimeDuration(streamWaitTimeout));
}
@Override
public GrpcCallContext withStreamWaitTimeoutDuration(
- @Nullable java.time.Duration streamWaitTimeout) {
+ java.time.@Nullable Duration streamWaitTimeout) {
if (streamWaitTimeout != null) {
Preconditions.checkArgument(
streamWaitTimeout.compareTo(java.time.Duration.ZERO) >= 0, "Invalid timeout: < 0 s");
@@ -345,13 +344,13 @@ public GrpcCallContext withStreamWaitTimeoutDuration(
@Override
@ObsoleteApi("Use withStreamIdleTimeoutDuration(java.time.Duration) instead")
public GrpcCallContext withStreamIdleTimeout(
- @Nullable org.threeten.bp.Duration streamIdleTimeout) {
+ org.threeten.bp.@Nullable Duration streamIdleTimeout) {
return withStreamIdleTimeoutDuration(toJavaTimeDuration(streamIdleTimeout));
}
@Override
public GrpcCallContext withStreamIdleTimeoutDuration(
- @Nullable java.time.Duration streamIdleTimeout) {
+ java.time.@Nullable Duration streamIdleTimeout) {
if (streamIdleTimeout != null) {
Preconditions.checkArgument(
streamIdleTimeout.compareTo(java.time.Duration.ZERO) >= 0, "Invalid timeout: < 0 s");
@@ -573,9 +572,8 @@ public CallOptions getCallOptions() {
/** This method is obsolete. Use {@link #getStreamWaitTimeoutDuration()} instead. */
@Override
- @Nullable
@ObsoleteApi("Use getStreamWaitTimeoutDuration() instead")
- public org.threeten.bp.Duration getStreamWaitTimeout() {
+ public org.threeten.bp.@Nullable Duration getStreamWaitTimeout() {
return toThreetenDuration(getStreamWaitTimeoutDuration());
}
@@ -585,16 +583,14 @@ public org.threeten.bp.Duration getStreamWaitTimeout() {
* @see ApiCallContext#withStreamWaitTimeoutDuration(java.time.Duration)
*/
@Override
- @Nullable
- public java.time.Duration getStreamWaitTimeoutDuration() {
+ public java.time.@Nullable Duration getStreamWaitTimeoutDuration() {
return streamWaitTimeout;
}
/** This method is obsolete. Use {@link #getStreamIdleTimeoutDuration()} instead. */
@Override
- @Nullable
@ObsoleteApi("Use getStreamIdleTimeoutDuration() instead")
- public org.threeten.bp.Duration getStreamIdleTimeout() {
+ public org.threeten.bp.@Nullable Duration getStreamIdleTimeout() {
return toThreetenDuration(getStreamIdleTimeoutDuration());
}
@@ -604,14 +600,12 @@ public org.threeten.bp.Duration getStreamIdleTimeout() {
* @see ApiCallContext#withStreamIdleTimeoutDuration(java.time.Duration)
*/
@Override
- @Nullable
- public java.time.Duration getStreamIdleTimeoutDuration() {
+ public java.time.@Nullable Duration getStreamIdleTimeoutDuration() {
return streamIdleTimeout;
}
/** The channel affinity for this context. */
- @Nullable
- public Integer getChannelAffinity() {
+ public @Nullable Integer getChannelAffinity() {
return channelAffinity;
}
@@ -769,7 +763,7 @@ public int hashCode() {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) {
return true;
}
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallSettings.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallSettings.java
index 7f2cc2826a44..9e2206df6d0b 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallSettings.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallSettings.java
@@ -34,8 +34,10 @@
import com.google.api.gax.rpc.RequestParamsExtractor;
import com.google.api.gax.rpc.ResourceNameExtractor;
import io.grpc.MethodDescriptor;
+import org.jspecify.annotations.NullMarked;
/** Grpc-specific settings for creating callables. */
+@NullMarked
public class GrpcCallSettings {
private final MethodDescriptor methodDescriptor;
private final RequestParamsExtractor paramsExtractor;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallableFactory.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallableFactory.java
index ef2efa9663b1..0a92a1796689 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallableFactory.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallableFactory.java
@@ -61,8 +61,10 @@
import com.google.longrunning.stub.OperationsStub;
import io.grpc.MethodDescriptor;
import javax.annotation.Nonnull;
+import org.jspecify.annotations.NullMarked;
/** Class with utility methods to create grpc-based direct callables. */
+@NullMarked
public class GrpcCallableFactory {
private GrpcCallableFactory() {}
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcChannelUUIDInterceptor.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcChannelUUIDInterceptor.java
index ac450689e07a..4a1e534c107b 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcChannelUUIDInterceptor.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcChannelUUIDInterceptor.java
@@ -36,7 +36,9 @@
import io.grpc.ClientInterceptor;
import io.grpc.MethodDescriptor;
import java.util.UUID;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
class GrpcChannelUUIDInterceptor implements ClientInterceptor {
private final String uuid = UUID.randomUUID().toString();
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcClientCalls.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcClientCalls.java
index 47e62ae9f658..87c6d2f7bdec 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcClientCalls.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcClientCalls.java
@@ -48,12 +48,14 @@
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.jspecify.annotations.NullMarked;
/**
* {@code GrpcClientCalls} creates a new {@code ClientCall} from the given call context.
*
* Package-private for internal use.
*/
+@NullMarked
class GrpcClientCalls {
private static final Logger LOGGER = Logger.getLogger(GrpcDirectCallable.class.getName());
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectBidiStreamingCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectBidiStreamingCallable.java
index 178044dc9229..d5000b391eec 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectBidiStreamingCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectBidiStreamingCallable.java
@@ -37,6 +37,7 @@
import com.google.common.base.Preconditions;
import io.grpc.ClientCall;
import io.grpc.MethodDescriptor;
+import org.jspecify.annotations.NullMarked;
/**
* {@code GrpcDirectBidiStreamingCallable} creates bidirectional streaming gRPC calls.
@@ -45,6 +46,7 @@
*
*
Package-private for internal use.
*/
+@NullMarked
class GrpcDirectBidiStreamingCallable
extends BidiStreamingCallable {
private final MethodDescriptor descriptor;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectCallable.java
index 33041145dd4e..dd29e663cb36 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectCallable.java
@@ -38,12 +38,14 @@
import io.grpc.ClientCall;
import io.grpc.MethodDescriptor;
import io.grpc.stub.ClientCalls;
+import org.jspecify.annotations.NullMarked;
/**
* {@code GrpcDirectCallable} creates gRPC calls.
*
* Package-private for internal use.
*/
+@NullMarked
@InternalApi
class GrpcDirectCallable extends UnaryCallable {
private final MethodDescriptor descriptor;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectClientStreamingCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectClientStreamingCallable.java
index 93c1a956276c..d3bc55f6c5ae 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectClientStreamingCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectClientStreamingCallable.java
@@ -36,6 +36,7 @@
import io.grpc.ClientCall;
import io.grpc.MethodDescriptor;
import io.grpc.stub.ClientCalls;
+import org.jspecify.annotations.NullMarked;
/**
* {@code GrpcDirectClientStreamingCallable} creates client-streaming gRPC calls.
@@ -44,6 +45,7 @@
*
* Package-private for internal use.
*/
+@NullMarked
class GrpcDirectClientStreamingCallable
extends ClientStreamingCallable {
private final MethodDescriptor descriptor;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectServerStreamingCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectServerStreamingCallable.java
index 2b562f07ac44..624d67bd38d0 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectServerStreamingCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectServerStreamingCallable.java
@@ -36,6 +36,7 @@
import com.google.common.base.Preconditions;
import io.grpc.ClientCall;
import io.grpc.MethodDescriptor;
+import org.jspecify.annotations.NullMarked;
/**
* {@code GrpcDirectServerStreamingCallable} creates server-streaming gRPC calls.
@@ -48,6 +49,7 @@
*
* Package-private for internal use.
*/
+@NullMarked
class GrpcDirectServerStreamingCallable
extends ServerStreamingCallable {
private final MethodDescriptor descriptor;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectStreamController.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectStreamController.java
index 83c09d48045e..61054d8ddb48 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectStreamController.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcDirectStreamController.java
@@ -36,6 +36,7 @@
import io.grpc.Metadata;
import io.grpc.Status;
import java.util.concurrent.CancellationException;
+import org.jspecify.annotations.NullMarked;
/**
* Wraps a GRPC ClientCall in a {@link StreamController}. It feeds events to a {@link
@@ -43,6 +44,7 @@
*
* Package-private for internal use.
*/
+@NullMarked
class GrpcDirectStreamController implements StreamController {
private static final Runnable NOOP_RUNNABLE =
new Runnable() {
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionBidiStreamingCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionBidiStreamingCallable.java
index b6a9ee024a02..55fc37d31839 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionBidiStreamingCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionBidiStreamingCallable.java
@@ -37,12 +37,14 @@
import com.google.api.gax.rpc.ResponseObserver;
import com.google.api.gax.rpc.StatusCode;
import java.util.Set;
+import org.jspecify.annotations.NullMarked;
/**
* Transforms all {@code Throwable}s thrown during a call into an instance of {@link ApiException}.
*
* Package-private for internal use.
*/
+@NullMarked
final class GrpcExceptionBidiStreamingCallable
extends BidiStreamingCallable {
private final BidiStreamingCallable innerCallable;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionCallable.java
index b069294d0001..7c084bbb1a07 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionCallable.java
@@ -42,12 +42,14 @@
import com.google.common.base.Preconditions;
import java.util.Set;
import java.util.concurrent.CancellationException;
+import org.jspecify.annotations.NullMarked;
/**
* Transforms all {@code Throwable}s thrown during a call into an instance of {@link ApiException}.
*
* Package-private for internal use.
*/
+@NullMarked
class GrpcExceptionCallable extends UnaryCallable {
private final UnaryCallable callable;
private final GrpcApiExceptionFactory exceptionFactory;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionClientStreamingCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionClientStreamingCallable.java
index d3a785638029..1bd8aad41e4e 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionClientStreamingCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionClientStreamingCallable.java
@@ -35,12 +35,14 @@
import com.google.api.gax.rpc.ClientStreamingCallable;
import com.google.api.gax.rpc.StatusCode;
import java.util.Set;
+import org.jspecify.annotations.NullMarked;
/**
* Transforms all {@code Throwable}s thrown during a call into an instance of {@link ApiException}.
*
* Package-private for internal use.
*/
+@NullMarked
final class GrpcExceptionClientStreamingCallable
extends ClientStreamingCallable {
private final ClientStreamingCallable innerCallable;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionServerStreamingCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionServerStreamingCallable.java
index 088817487aa1..2bf7d0cd05c2 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionServerStreamingCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionServerStreamingCallable.java
@@ -35,12 +35,14 @@
import com.google.api.gax.rpc.ServerStreamingCallable;
import com.google.api.gax.rpc.StatusCode.Code;
import java.util.Set;
+import org.jspecify.annotations.NullMarked;
/**
* Transforms all {@code Throwable}s thrown during a call into an instance of {@link ApiException}.
*
* Package-private for internal use.
*/
+@NullMarked
class GrpcExceptionServerStreamingCallable
extends ServerStreamingCallable {
private final ServerStreamingCallable inner;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionTranslatingStreamObserver.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionTranslatingStreamObserver.java
index 7725344eda04..eb230aaec592 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionTranslatingStreamObserver.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcExceptionTranslatingStreamObserver.java
@@ -30,6 +30,7 @@
package com.google.api.gax.grpc;
import com.google.api.gax.rpc.ApiStreamObserver;
+import org.jspecify.annotations.NullMarked;
/**
* An {@link ApiStreamObserver} that wraps grpc's errors into {@link
@@ -39,6 +40,7 @@
*
* @param
*/
+@NullMarked
final class GrpcExceptionTranslatingStreamObserver
implements ApiStreamObserver {
private final ApiStreamObserver innerObserver;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcHeaderInterceptor.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcHeaderInterceptor.java
index 9e74538daf79..b02fb6b745f0 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcHeaderInterceptor.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcHeaderInterceptor.java
@@ -41,12 +41,14 @@
import io.grpc.MethodDescriptor;
import java.util.Map;
import java.util.Map.Entry;
+import org.jspecify.annotations.NullMarked;
/**
* An interceptor to handle custom headers.
*
* Package-private for internal usage.
*/
+@NullMarked
@InternalApi
public class GrpcHeaderInterceptor implements ClientInterceptor {
private final Map, String> staticHeaders;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcInterceptorProvider.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcInterceptorProvider.java
index f3d4de8bacdc..f16cf35a83f5 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcInterceptorProvider.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcInterceptorProvider.java
@@ -31,8 +31,10 @@
import io.grpc.ClientInterceptor;
import java.util.List;
+import org.jspecify.annotations.NullMarked;
/** Provider of custom gRPC ClientInterceptors. */
+@NullMarked
public interface GrpcInterceptorProvider {
/**
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcLoggingInterceptor.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcLoggingInterceptor.java
index 9c305261cbc7..d0f545078d6e 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcLoggingInterceptor.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcLoggingInterceptor.java
@@ -51,7 +51,9 @@
import io.grpc.Status;
import java.util.HashMap;
import java.util.Map;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
@InternalApi
public class GrpcLoggingInterceptor implements ClientInterceptor {
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcLongRunningClient.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcLongRunningClient.java
index fca5e73b9448..f81b3c35e263 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcLongRunningClient.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcLongRunningClient.java
@@ -40,12 +40,14 @@
import com.google.longrunning.Operation;
import com.google.longrunning.stub.OperationsStub;
import com.google.protobuf.Empty;
+import org.jspecify.annotations.NullMarked;
/**
* Implementation of LongRunningClient based on gRPC.
*
* Package-private for internal usage.
*/
+@NullMarked
class GrpcLongRunningClient implements LongRunningClient {
private final OperationsStub operationsStub;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcMetadataHandlerInterceptor.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcMetadataHandlerInterceptor.java
index c3940f4db9e5..1e933eb2575e 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcMetadataHandlerInterceptor.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcMetadataHandlerInterceptor.java
@@ -39,12 +39,14 @@
import io.grpc.Metadata;
import io.grpc.MethodDescriptor;
import io.grpc.Status;
+import org.jspecify.annotations.NullMarked;
/**
* An interceptor to handle receiving the response headers.
*
*
Package-private for internal usage.
*/
+@NullMarked
@InternalApi
class GrpcMetadataHandlerInterceptor implements ClientInterceptor {
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcOperationSnapshot.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcOperationSnapshot.java
index 4483ef1cf83f..9f271e57f0b8 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcOperationSnapshot.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcOperationSnapshot.java
@@ -33,12 +33,14 @@
import com.google.api.gax.rpc.StatusCode;
import com.google.longrunning.Operation;
import io.grpc.Status;
+import org.jspecify.annotations.NullMarked;
/**
* Implementation of OperationSnapshot based on gRPC.
*
*
Package-private for internal usage.
*/
+@NullMarked
class GrpcOperationSnapshot implements OperationSnapshot {
private final Operation operation;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcOperationSnapshotCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcOperationSnapshotCallable.java
index a7f467a9903f..fb0e72c9e947 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcOperationSnapshotCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcOperationSnapshotCallable.java
@@ -38,6 +38,7 @@
import com.google.api.gax.rpc.ApiCallContext;
import com.google.api.gax.rpc.UnaryCallable;
import com.google.longrunning.Operation;
+import org.jspecify.annotations.NullMarked;
/**
* A {@code UnaryCallable} that wraps a UnaryCallable returning an Operation and returns an
@@ -45,6 +46,7 @@
*
*
Package-private for internal usage.
*/
+@NullMarked
class GrpcOperationSnapshotCallable extends UnaryCallable {
private final UnaryCallable innerCallable;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcRawCallableFactory.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcRawCallableFactory.java
index 318f096291a2..444485d96065 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcRawCallableFactory.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcRawCallableFactory.java
@@ -36,8 +36,10 @@
import com.google.api.gax.rpc.StatusCode;
import com.google.api.gax.rpc.UnaryCallable;
import java.util.Set;
+import org.jspecify.annotations.NullMarked;
/** Class with utility methods to create low level grpc-based direct callables. */
+@NullMarked
@InternalApi("For internal use by google-cloud-java clients only")
public class GrpcRawCallableFactory {
private GrpcRawCallableFactory() {}
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcResponseMetadata.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcResponseMetadata.java
index 9e018eefb648..95c976581147 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcResponseMetadata.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcResponseMetadata.java
@@ -32,6 +32,7 @@
import com.google.api.gax.rpc.ApiCallContext;
import com.google.common.base.Preconditions;
import io.grpc.Metadata;
+import org.jspecify.annotations.NullMarked;
/**
* GrpcResponseMetadata provides a mechanism to access the headers and trailers returned by a gRPC
@@ -52,6 +53,7 @@
*
*
*/
+@NullMarked
public class GrpcResponseMetadata implements ResponseMetadataHandler {
private volatile Metadata responseMetadata;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcServerStreamingRequestParamCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcServerStreamingRequestParamCallable.java
index 27b4c564543f..9d709cb9a4bb 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcServerStreamingRequestParamCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcServerStreamingRequestParamCallable.java
@@ -35,6 +35,7 @@
import com.google.api.gax.rpc.ResponseObserver;
import com.google.api.gax.rpc.ServerStreamingCallable;
import com.google.common.base.Preconditions;
+import org.jspecify.annotations.NullMarked;
/**
* A {@code ServerStreamingCallable} that extracts values from the fields of the request and inserts
@@ -42,6 +43,7 @@
*
* Package-private for internal usage.
*/
+@NullMarked
class GrpcServerStreamingRequestParamCallable
extends ServerStreamingCallable {
private final ServerStreamingCallable callable;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcStatusCode.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcStatusCode.java
index b3db79edabc0..782c409b3d84 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcStatusCode.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcStatusCode.java
@@ -33,8 +33,10 @@
import com.google.api.gax.rpc.StatusCode;
import com.google.auto.value.AutoValue;
import io.grpc.Status;
+import org.jspecify.annotations.NullMarked;
/** A failure code specific to a gRPC call. */
+@NullMarked
@InternalExtensionOnly
@AutoValue
public abstract class GrpcStatusCode implements StatusCode {
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcStubCallableFactory.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcStubCallableFactory.java
index 131dafc1f861..5925022746a7 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcStubCallableFactory.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcStubCallableFactory.java
@@ -43,7 +43,9 @@
import com.google.api.gax.rpc.UnaryCallable;
import com.google.longrunning.Operation;
import com.google.longrunning.stub.OperationsStub;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public interface GrpcStubCallableFactory {
/**
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcTransportChannel.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcTransportChannel.java
index 2fa0908f17bc..e0a520facb17 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcTransportChannel.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcTransportChannel.java
@@ -36,8 +36,10 @@
import io.grpc.Channel;
import io.grpc.ManagedChannel;
import java.util.concurrent.TimeUnit;
+import org.jspecify.annotations.NullMarked;
/** Implementation of TransportChannel based on gRPC. */
+@NullMarked
@AutoValue
@InternalExtensionOnly
public abstract class GrpcTransportChannel implements TransportChannel {
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcUnaryRequestParamCallable.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcUnaryRequestParamCallable.java
index 22bbd8409bc8..ff69e5716ef5 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcUnaryRequestParamCallable.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcUnaryRequestParamCallable.java
@@ -35,6 +35,7 @@
import com.google.api.gax.rpc.RequestUrlParamsEncoder;
import com.google.api.gax.rpc.UnaryCallable;
import com.google.common.base.Preconditions;
+import org.jspecify.annotations.NullMarked;
/**
* A {@code UnaryCallable} that extracts values from the fields of the request and inserts them into
@@ -42,6 +43,7 @@
*
* Package-private for internal usage.
*/
+@NullMarked
class GrpcUnaryRequestParamCallable
extends UnaryCallable {
private final UnaryCallable callable;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java
index 56f44fa7ae0a..5f7e6297c1f6 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/InstantiatingGrpcChannelProvider.java
@@ -82,8 +82,9 @@
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.annotation.Nullable;
import javax.net.ssl.KeyManagerFactory;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* InstantiatingGrpcChannelProvider is a TransportChannelProvider which constructs a gRPC
@@ -97,6 +98,7 @@
* The client lib header and generator header values are used to form a value that goes into the
* http header of requests to the service.
*/
+@NullMarked
public final class InstantiatingGrpcChannelProvider implements TransportChannelProvider {
private static String systemProductName;
@@ -129,7 +131,7 @@ public final class InstantiatingGrpcChannelProvider implements TransportChannelP
private final int processorCount;
private final Executor executor;
- @Nullable private final ScheduledExecutorService backgroundExecutor;
+ private final @Nullable ScheduledExecutorService backgroundExecutor;
private final HeaderProvider headerProvider;
private final boolean useS2A;
private final String endpoint;
@@ -138,33 +140,33 @@ public final class InstantiatingGrpcChannelProvider implements TransportChannelP
// during initial rollout for DirectPath. This provider will be removed once the DirectPath
// environment is not used.
private final EnvironmentProvider envProvider;
- @Nullable private final GrpcInterceptorProvider interceptorProvider;
- @Nullable private final Integer maxInboundMessageSize;
- @Nullable private final Integer maxInboundMetadataSize;
- @Nullable private final java.time.Duration keepAliveTime;
- @Nullable private final java.time.Duration keepAliveTimeout;
- @Nullable private final Boolean keepAliveWithoutCalls;
+ private final @Nullable GrpcInterceptorProvider interceptorProvider;
+ private final @Nullable Integer maxInboundMessageSize;
+ private final @Nullable Integer maxInboundMetadataSize;
+ private final java.time.@Nullable Duration keepAliveTime;
+ private final java.time.@Nullable Duration keepAliveTimeout;
+ private final @Nullable Boolean keepAliveWithoutCalls;
private final ChannelPoolSettings channelPoolSettings;
- @Nullable private final Credentials credentials;
- @Nullable private final CallCredentials altsCallCredentials;
- @Nullable private final CallCredentials mtlsS2ACallCredentials;
- @Nullable private final ChannelPrimer channelPrimer;
- @Nullable private final Boolean attemptDirectPath;
- @Nullable private final Boolean attemptDirectPathXds;
- @Nullable private final Boolean allowNonDefaultServiceAccount;
+ private final @Nullable Credentials credentials;
+ private final @Nullable CallCredentials altsCallCredentials;
+ private final @Nullable CallCredentials mtlsS2ACallCredentials;
+ private final @Nullable ChannelPrimer channelPrimer;
+ private final @Nullable Boolean attemptDirectPath;
+ private final @Nullable Boolean attemptDirectPathXds;
+ private final @Nullable Boolean allowNonDefaultServiceAccount;
@VisibleForTesting final ImmutableMap directPathServiceConfig;
- @Nullable private final MtlsProvider mtlsProvider;
+ private final @Nullable MtlsProvider mtlsProvider;
private final CertificateBasedAccess certificateBasedAccess;
- @Nullable private final SecureSessionAgent s2aConfigProvider;
+ private final @Nullable SecureSessionAgent s2aConfigProvider;
private final List allowedHardBoundTokenTypes;
@VisibleForTesting final Map headersWithDuplicatesRemoved = new HashMap<>();
- @Nullable
- private final ApiFunction channelConfigurator;
+ private final @Nullable ApiFunction
+ channelConfigurator;
// This is initialized once for the lifetime of the application. This enables re-using
// channels to S2A.
- private static volatile ChannelCredentials s2aChannelCredentials;
+ private static @Nullable volatile ChannelCredentials s2aChannelCredentials;
/**
* Resets the s2aChannelCredentials of the {@link InstantiatingGrpcChannelProvider} class for
@@ -539,6 +541,7 @@ boolean canUseDirectPathWithUniverseDomain() {
return endpoint.contains(Credentials.GOOGLE_DEFAULT_UNIVERSE);
}
+ @Nullable
@VisibleForTesting
ChannelCredentials createMtlsChannelCredentials() throws IOException, GeneralSecurityException {
if (mtlsProvider == null) {
@@ -565,7 +568,7 @@ ChannelCredentials createMtlsChannelCredentials() throws IOException, GeneralSec
* @param s2aChannelCredentials the credentials to be used when connecting to the S2A.
* @return {@code ChannelCredentials} instance.
*/
- ChannelCredentials buildS2AChannelCredentials(
+ @Nullable ChannelCredentials buildS2AChannelCredentials(
String s2aAddress, ChannelCredentials s2aChannelCredentials) {
try {
// Load the S2A API.
@@ -606,6 +609,7 @@ ChannelCredentials buildS2AChannelCredentials(
* @return {@link ChannelCredentials} to use to create an mtls connection between client and S2A
* @throws IOException on error
*/
+ @Nullable
@VisibleForTesting
ChannelCredentials createMtlsToS2AChannelCredentials(
File trustBundle, File privateKey, File certChain) throws IOException {
@@ -626,7 +630,7 @@ ChannelCredentials createMtlsToS2AChannelCredentials(
* @return {@link ChannelCredentials} to use to create a plaintext connection between client and
* S2A
*/
- ChannelCredentials createPlaintextToS2AChannelCredentials(String plaintextAddress) {
+ @Nullable ChannelCredentials createPlaintextToS2AChannelCredentials(String plaintextAddress) {
if (Strings.isNullOrEmpty(plaintextAddress)) {
return null;
}
@@ -948,24 +952,24 @@ public static final class Builder {
private boolean useS2A;
private EnvironmentProvider envProvider;
private SecureSessionAgent s2aConfigProvider = SecureSessionAgent.create();
- @Nullable private MtlsProvider mtlsProvider;
+ private @Nullable MtlsProvider mtlsProvider;
private CertificateBasedAccess certificateBasedAccess;
- @Nullable private GrpcInterceptorProvider interceptorProvider;
- @Nullable private Integer maxInboundMessageSize;
- @Nullable private Integer maxInboundMetadataSize;
- @Nullable private java.time.Duration keepAliveTime;
- @Nullable private java.time.Duration keepAliveTimeout;
- @Nullable private Boolean keepAliveWithoutCalls;
- @Nullable private ApiFunction channelConfigurator;
- @Nullable private Credentials credentials;
- @Nullable private CallCredentials altsCallCredentials;
- @Nullable private CallCredentials mtlsS2ACallCredentials;
- @Nullable private ChannelPrimer channelPrimer;
+ private @Nullable GrpcInterceptorProvider interceptorProvider;
+ private @Nullable Integer maxInboundMessageSize;
+ private @Nullable Integer maxInboundMetadataSize;
+ private java.time.@Nullable Duration keepAliveTime;
+ private java.time.@Nullable Duration keepAliveTimeout;
+ private @Nullable Boolean keepAliveWithoutCalls;
+ private @Nullable ApiFunction channelConfigurator;
+ private @Nullable Credentials credentials;
+ private @Nullable CallCredentials altsCallCredentials;
+ private @Nullable CallCredentials mtlsS2ACallCredentials;
+ private @Nullable ChannelPrimer channelPrimer;
private ChannelPoolSettings channelPoolSettings;
- @Nullable private Boolean attemptDirectPath;
- @Nullable private Boolean attemptDirectPathXds;
- @Nullable private Boolean allowNonDefaultServiceAccount;
- @Nullable private ImmutableMap directPathServiceConfig;
+ private @Nullable Boolean attemptDirectPath;
+ private @Nullable Boolean attemptDirectPathXds;
+ private @Nullable Boolean allowNonDefaultServiceAccount;
+ private @Nullable ImmutableMap directPathServiceConfig;
private List allowedHardBoundTokenTypes;
private Builder() {
@@ -1361,7 +1365,7 @@ boolean isDirectPathBoundTokenEnabled() {
CallCredentials createHardBoundTokensCallCredentials(
ComputeEngineCredentials.GoogleAuthTransport googleAuthTransport,
- ComputeEngineCredentials.BindingEnforcement bindingEnforcement) {
+ ComputeEngineCredentials.@Nullable BindingEnforcement bindingEnforcement) {
ComputeEngineCredentials.Builder credsBuilder =
((ComputeEngineCredentials) credentials).toBuilder();
// We only set scopes and HTTP transport factory from the original credentials because
@@ -1437,8 +1441,8 @@ public Builder setChannelConfigurator(
return this;
}
- @Nullable
- public ApiFunction getChannelConfigurator() {
+ public @Nullable ApiFunction
+ getChannelConfigurator() {
return channelConfigurator;
}
}
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ProtoOperationTransformers.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ProtoOperationTransformers.java
index e3d990d9e99e..425842b17499 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ProtoOperationTransformers.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ProtoOperationTransformers.java
@@ -36,8 +36,10 @@
import com.google.protobuf.Any;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.Message;
+import org.jspecify.annotations.NullMarked;
/** Public for technical reasons; intended for use by generated code. */
+@NullMarked
public class ProtoOperationTransformers {
private ProtoOperationTransformers() {}
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ResponseMetadataHandler.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ResponseMetadataHandler.java
index 4ce195602989..4b867c5f2bd2 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ResponseMetadataHandler.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/ResponseMetadataHandler.java
@@ -30,12 +30,14 @@
package com.google.api.gax.grpc;
import io.grpc.Metadata;
+import org.jspecify.annotations.NullMarked;
/**
* An interface to handle metadata returned from an RPC. A ResponseMetadataHandler is used by the
* GrpcMetadataHandlerInterceptor class to provide custom handling of the returned headers and
* trailers.
*/
+@NullMarked
public interface ResponseMetadataHandler {
/** Handle the headers returned by an RPC. */
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/StreamObserverDelegate.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/StreamObserverDelegate.java
index 3b66ba1ca63d..8c3ac600b519 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/StreamObserverDelegate.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/StreamObserverDelegate.java
@@ -31,12 +31,14 @@
import com.google.api.gax.rpc.ApiStreamObserver;
import io.grpc.stub.StreamObserver;
+import org.jspecify.annotations.NullMarked;
/**
* A delegate class that transfers calls to the StreamObserver object.
*
* Package-private for internal use.
*/
+@NullMarked
class StreamObserverDelegate implements ApiStreamObserver {
private final StreamObserver delegate;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/nativeimage/GrpcNettyFeature.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/nativeimage/GrpcNettyFeature.java
index 88266332dc57..1a9aa49029b7 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/nativeimage/GrpcNettyFeature.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/nativeimage/GrpcNettyFeature.java
@@ -36,8 +36,10 @@
import static com.google.api.gax.nativeimage.NativeImageUtils.registerForUnsafeFieldAccess;
import org.graalvm.nativeimage.hosted.Feature;
+import org.jspecify.annotations.NullMarked;
/** Configures Native Image settings for the grpc-netty-shaded dependency. */
+@NullMarked
final class GrpcNettyFeature implements Feature {
private static final String GRPC_NETTY_SHADED_CLASS =
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/OperationsClient.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/OperationsClient.java
index 024950cda3ba..c06736f5ae07 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/OperationsClient.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/OperationsClient.java
@@ -46,6 +46,8 @@
import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* Service Description: Manages long-running operations with an API service.
@@ -108,8 +110,9 @@
*
*
*/
+@NullMarked
public class OperationsClient implements BackgroundResource {
- private final OperationsSettings settings;
+ private final @Nullable OperationsSettings settings;
private final OperationsStub stub;
/**
@@ -617,8 +620,8 @@ public static class ListOperationsPage
ListOperationsRequest, ListOperationsResponse, Operation, ListOperationsPage> {
private ListOperationsPage(
- PageContext context,
- ListOperationsResponse response) {
+ @Nullable PageContext context,
+ @Nullable ListOperationsResponse response) {
super(context, response);
}
@@ -649,7 +652,8 @@ public static class ListOperationsFixedSizeCollection
ListOperationsPage,
ListOperationsFixedSizeCollection> {
- private ListOperationsFixedSizeCollection(List pages, int collectionSize) {
+ private ListOperationsFixedSizeCollection(
+ @Nullable List pages, int collectionSize) {
super(pages, collectionSize);
}
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/OperationsSettings.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/OperationsSettings.java
index 22ea7e5a1d48..1d4683679309 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/OperationsSettings.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/OperationsSettings.java
@@ -41,8 +41,11 @@
import com.google.longrunning.stub.OperationsStubSettings;
import com.google.protobuf.Empty;
import java.io.IOException;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/** Settings class to configure an instance of {@link OperationsClient}. */
+@NullMarked
public class OperationsSettings extends ClientSettings {
/** Returns the object with the settings used for calls to getOperation. */
public UnaryCallSettings getOperationSettings() {
@@ -115,7 +118,7 @@ protected Builder() throws IOException {
this((ClientContext) null);
}
- protected Builder(ClientContext clientContext) {
+ protected Builder(@Nullable ClientContext clientContext) {
super(OperationsStubSettings.newBuilder(clientContext));
}
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/package-info.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/package-info.java
index 7e509fca0bc9..6d7998bd6751 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/package-info.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/package-info.java
@@ -44,4 +44,7 @@
* service that returns long-running operations should implement the `Operations` interface so
* developers can have a consistent client experience.
*/
+@NullMarked
package com.google.longrunning;
+
+import org.jspecify.annotations.NullMarked;
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/GrpcOperationsCallableFactory.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/GrpcOperationsCallableFactory.java
index 8a18008c0a30..d4072d7fcb58 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/GrpcOperationsCallableFactory.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/GrpcOperationsCallableFactory.java
@@ -45,12 +45,14 @@
import com.google.api.gax.rpc.UnaryCallSettings;
import com.google.api.gax.rpc.UnaryCallable;
import com.google.longrunning.Operation;
+import org.jspecify.annotations.NullMarked;
/**
* gRPC callable factory implementation for Google Long Running Operations API.
*
* This class is for advanced usage.
*/
+@NullMarked
public class GrpcOperationsCallableFactory implements GrpcStubCallableFactory {
@Override
public UnaryCallable createUnaryCallable(
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/GrpcOperationsStub.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/GrpcOperationsStub.java
index c00574e88951..63abcaf8563d 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/GrpcOperationsStub.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/GrpcOperationsStub.java
@@ -52,12 +52,14 @@
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+import org.jspecify.annotations.NullMarked;
/**
* gRPC stub implementation for Google Long Running Operations API.
*
* This class is for advanced usage and reflects the underlying API directly.
*/
+@NullMarked
public class GrpcOperationsStub extends OperationsStub {
private static final MethodDescriptor
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/OperationsStub.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/OperationsStub.java
index 467572b001a1..ca6a9181b9b7 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/OperationsStub.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/OperationsStub.java
@@ -41,12 +41,14 @@
import com.google.longrunning.Operation;
import com.google.longrunning.WaitOperationRequest;
import com.google.protobuf.Empty;
+import org.jspecify.annotations.NullMarked;
/**
* Base stub class for Google Long Running Operations API.
*
* This class is for advanced usage and reflects the underlying API directly.
*/
+@NullMarked
public abstract class OperationsStub implements BackgroundResource {
public UnaryCallable getOperationCallable() {
diff --git a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/OperationsStubSettings.java b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/OperationsStubSettings.java
index 47c3a981b8d9..59eebe3fac9b 100644
--- a/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/OperationsStubSettings.java
+++ b/sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/longrunning/stub/OperationsStubSettings.java
@@ -63,8 +63,11 @@
import com.google.longrunning.WaitOperationRequest;
import com.google.protobuf.Empty;
import java.io.IOException;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/** Settings class to configure an instance of {@link OperationsStub}. */
+@NullMarked
public class OperationsStubSettings extends StubSettings {
private final UnaryCallSettings getOperationSettings;
@@ -258,7 +261,7 @@ protected Builder() {
this((ClientContext) null);
}
- protected Builder(ClientContext clientContext) {
+ protected Builder(@Nullable ClientContext clientContext) {
super(clientContext);
getOperationSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ApiMethodDescriptor.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ApiMethodDescriptor.java
index 69e2e0fff7e1..0878c3e5b848 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ApiMethodDescriptor.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ApiMethodDescriptor.java
@@ -30,10 +30,12 @@
package com.google.api.gax.httpjson;
import com.google.auto.value.AutoValue;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
@AutoValue
/* Method descriptor for messages to be transmitted over HTTP. */
+@NullMarked
public abstract class ApiMethodDescriptor {
public enum MethodType {
UNARY,
@@ -50,14 +52,12 @@ public enum MethodType {
public abstract HttpResponseParser getResponseParser();
/** Return the HTTP method for this request message type. */
- @Nullable
- public abstract String getHttpMethod();
+ public abstract @Nullable String getHttpMethod();
- @Nullable
- public abstract OperationSnapshotFactory getOperationSnapshotFactory();
+ public abstract @Nullable OperationSnapshotFactory
+ getOperationSnapshotFactory();
- @Nullable
- public abstract PollingRequestFactory getPollingRequestFactory();
+ public abstract @Nullable PollingRequestFactory getPollingRequestFactory();
public abstract MethodType getType();
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/FieldsExtractor.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/FieldsExtractor.java
index aa42604596fc..463acb9aebed 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/FieldsExtractor.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/FieldsExtractor.java
@@ -29,10 +29,13 @@
*/
package com.google.api.gax.httpjson;
+import org.jspecify.annotations.NullMarked;
+
/**
* A functional interface to be implemented for each request message to extract specific fields from
* it. For advanced usage only.
*/
+@NullMarked
@FunctionalInterface
public interface FieldsExtractor {
ParamsT extract(RequestT request);
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ForwardingHttpJsonClientCall.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ForwardingHttpJsonClientCall.java
index 09e97a61c86c..f1bea5a1688a 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ForwardingHttpJsonClientCall.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ForwardingHttpJsonClientCall.java
@@ -29,12 +29,14 @@
*/
package com.google.api.gax.httpjson;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* A {@link HttpJsonClientCall} which forwards all of its methods to another {@link
* HttpJsonClientCall}.
*/
+@NullMarked
public abstract class ForwardingHttpJsonClientCall
extends HttpJsonClientCall {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ForwardingHttpJsonClientCallListener.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ForwardingHttpJsonClientCallListener.java
index 1d6eb2599a6a..26ecc1895f9f 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ForwardingHttpJsonClientCallListener.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ForwardingHttpJsonClientCallListener.java
@@ -30,10 +30,13 @@
package com.google.api.gax.httpjson;
+import org.jspecify.annotations.NullMarked;
+
/**
* A {@link HttpJsonClientCall.Listener} which forwards all of its methods to another {@link
* HttpJsonClientCall.Listener}.
*/
+@NullMarked
public abstract class ForwardingHttpJsonClientCallListener
extends HttpJsonClientCall.Listener {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/GaxHttpJsonProperties.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/GaxHttpJsonProperties.java
index a12f771fdc3f..af4503fe9257 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/GaxHttpJsonProperties.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/GaxHttpJsonProperties.java
@@ -31,8 +31,10 @@
import com.google.api.core.InternalApi;
import java.util.regex.Pattern;
+import org.jspecify.annotations.NullMarked;
/** Provides properties of the GAX-HTTPJSON library. */
+@NullMarked
@InternalApi
public class GaxHttpJsonProperties {
private static final Pattern DEFAULT_API_CLIENT_HEADER_PATTERN =
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpHeadersUtils.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpHeadersUtils.java
index 8f1ce432ef66..66f89451225f 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpHeadersUtils.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpHeadersUtils.java
@@ -36,11 +36,14 @@
import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.Map;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/** This class is for internal use only and is public for technical reasons. */
+@NullMarked
@InternalApi
public class HttpHeadersUtils {
- public static String getUserAgentValue(Map headersMap) {
+ public static @Nullable String getUserAgentValue(Map headersMap) {
for (Map.Entry entry : headersMap.entrySet()) {
if ("user-agent".equalsIgnoreCase(entry.getKey())) {
return entry.getValue();
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonApiExceptionFactory.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonApiExceptionFactory.java
index 55c9a68b52b9..bbd7e3ea58cd 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonApiExceptionFactory.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonApiExceptionFactory.java
@@ -39,7 +39,9 @@
import com.google.rpc.Status;
import java.util.Set;
import java.util.concurrent.CancellationException;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
class HttpJsonApiExceptionFactory {
private final Set retryableCodes;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallContext.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallContext.java
index c946e9aab03d..941dc646f14a 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallContext.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallContext.java
@@ -56,7 +56,8 @@
import java.util.Objects;
import java.util.Set;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* HttpJsonCallContext encapsulates context data used to make an http-json call.
@@ -66,19 +67,20 @@
* copies of the object, but with one field changed. The immutability and thread safety of the
* arguments solely depends on the arguments themselves.
*/
+@NullMarked
public final class HttpJsonCallContext implements ApiCallContext {
private static final HttpJsonStatusCode UNAUTHENTICATED_STATUS_CODE =
HttpJsonStatusCode.of(StatusCode.Code.UNAUTHENTICATED);
private final HttpJsonChannel channel;
private final HttpJsonCallOptions callOptions;
- @Nullable private final java.time.Duration timeout;
- @Nullable private final java.time.Duration streamWaitTimeout;
- @Nullable private final java.time.Duration streamIdleTimeout;
+ private final java.time.@Nullable Duration timeout;
+ private final java.time.@Nullable Duration streamWaitTimeout;
+ private final java.time.@Nullable Duration streamIdleTimeout;
private final ImmutableMap> extraHeaders;
private final ApiCallContextOptions options;
private final ApiTracer tracer;
- @Nullable private final RetrySettings retrySettings;
- @Nullable private final ImmutableSet retryableCodes;
+ private final @Nullable RetrySettings retrySettings;
+ private final @Nullable ImmutableSet retryableCodes;
private final EndpointContext endpointContext;
/** Returns an empty instance. */
@@ -113,16 +115,16 @@ public static HttpJsonCallContext of(HttpJsonChannel channel, HttpJsonCallOption
}
private HttpJsonCallContext(
- HttpJsonChannel channel,
+ @Nullable HttpJsonChannel channel,
HttpJsonCallOptions callOptions,
- java.time.Duration timeout,
- java.time.Duration streamWaitTimeout,
- java.time.Duration streamIdleTimeout,
+ java.time.@Nullable Duration timeout,
+ java.time.@Nullable Duration streamWaitTimeout,
+ java.time.@Nullable Duration streamIdleTimeout,
ImmutableMap> extraHeaders,
ApiCallContextOptions options,
- ApiTracer tracer,
- RetrySettings defaultRetrySettings,
- Set defaultRetryableCodes,
+ @Nullable ApiTracer tracer,
+ @Nullable RetrySettings defaultRetrySettings,
+ @Nullable Set defaultRetryableCodes,
@Nullable EndpointContext endpointContext) {
this.channel = channel;
this.callOptions = callOptions;
@@ -303,16 +305,14 @@ public HttpJsonCallContext withTimeoutDuration(java.time.Duration timeout) {
}
/** This method is obsolete. Use {@link #getTimeoutDuration()} instead. */
- @Nullable
@Override
@ObsoleteApi("Use getTimeoutDuration instead")
- public org.threeten.bp.Duration getTimeout() {
+ public org.threeten.bp.@Nullable Duration getTimeout() {
return toThreetenDuration(getTimeoutDuration());
}
- @Nullable
@Override
- public java.time.Duration getTimeoutDuration() {
+ public java.time.@Nullable Duration getTimeoutDuration() {
return timeout;
}
@@ -323,13 +323,13 @@ public java.time.Duration getTimeoutDuration() {
@Override
@ObsoleteApi("Use withStreamWaitTimeoutDuration(java.time.Duration) instead")
public HttpJsonCallContext withStreamWaitTimeout(
- @Nullable org.threeten.bp.Duration streamWaitTimeout) {
+ org.threeten.bp.@Nullable Duration streamWaitTimeout) {
return withStreamWaitTimeoutDuration(toJavaTimeDuration(streamWaitTimeout));
}
@Override
public HttpJsonCallContext withStreamWaitTimeoutDuration(
- @Nullable java.time.Duration streamWaitTimeout) {
+ java.time.@Nullable Duration streamWaitTimeout) {
if (streamWaitTimeout != null) {
Preconditions.checkArgument(
streamWaitTimeout.compareTo(java.time.Duration.ZERO) >= 0, "Invalid timeout: < 0 s");
@@ -351,9 +351,8 @@ public HttpJsonCallContext withStreamWaitTimeoutDuration(
/** This method is obsolete. Use {@link #getStreamWaitTimeoutDuration()} instead. */
@Override
- @Nullable
@ObsoleteApi("Use getStreamWaitTimeoutDuration() instead")
- public org.threeten.bp.Duration getStreamWaitTimeout() {
+ public org.threeten.bp.@Nullable Duration getStreamWaitTimeout() {
return toThreetenDuration(getStreamWaitTimeoutDuration());
}
@@ -363,8 +362,7 @@ public org.threeten.bp.Duration getStreamWaitTimeout() {
* @see ApiCallContext#withStreamWaitTimeoutDuration(java.time.Duration)
*/
@Override
- @Nullable
- public java.time.Duration getStreamWaitTimeoutDuration() {
+ public java.time.@Nullable Duration getStreamWaitTimeoutDuration() {
return streamWaitTimeout;
}
@@ -375,13 +373,13 @@ public java.time.Duration getStreamWaitTimeoutDuration() {
@Override
@ObsoleteApi("Use withStreamIdleTimeoutDuration(java.time.Duration) instead")
public HttpJsonCallContext withStreamIdleTimeout(
- @Nullable org.threeten.bp.Duration streamIdleTimeout) {
+ org.threeten.bp.@Nullable Duration streamIdleTimeout) {
return withStreamIdleTimeoutDuration(toJavaTimeDuration(streamIdleTimeout));
}
@Override
public HttpJsonCallContext withStreamIdleTimeoutDuration(
- @Nullable java.time.Duration streamIdleTimeout) {
+ java.time.@Nullable Duration streamIdleTimeout) {
if (streamIdleTimeout != null) {
Preconditions.checkArgument(
streamIdleTimeout.compareTo(java.time.Duration.ZERO) >= 0, "Invalid timeout: < 0 s");
@@ -403,9 +401,8 @@ public HttpJsonCallContext withStreamIdleTimeoutDuration(
/** This method is obsolete. Use {@link #getStreamIdleTimeoutDuration()} instead. */
@Override
- @Nullable
@ObsoleteApi("Use getStreamIdleTimeoutDuration() instead")
- public org.threeten.bp.Duration getStreamIdleTimeout() {
+ public org.threeten.bp.@Nullable Duration getStreamIdleTimeout() {
return toThreetenDuration(getStreamIdleTimeoutDuration());
}
@@ -415,8 +412,7 @@ public org.threeten.bp.Duration getStreamIdleTimeout() {
* @see ApiCallContext#withStreamIdleTimeoutDuration(java.time.Duration)
*/
@Override
- @Nullable
- public java.time.Duration getStreamIdleTimeoutDuration() {
+ public java.time.@Nullable Duration getStreamIdleTimeoutDuration() {
return streamIdleTimeout;
}
@@ -504,14 +500,12 @@ public HttpJsonCallOptions getCallOptions() {
}
@Deprecated
- @Nullable
- public org.threeten.bp.Instant getDeadline() {
+ public org.threeten.bp.@Nullable Instant getDeadline() {
return getCallOptions() != null ? getCallOptions().getDeadline() : null;
}
@Deprecated
- @Nullable
- public Credentials getCredentials() {
+ public @Nullable Credentials getCredentials() {
return getCallOptions() != null ? getCallOptions().getCredentials() : null;
}
@@ -624,7 +618,7 @@ public HttpJsonCallContext withTracer(@Nonnull ApiTracer newTracer) {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) {
return true;
}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallOptions.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallOptions.java
index 1f0022bb4390..aac7a69c590d 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallOptions.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallOptions.java
@@ -39,41 +39,36 @@
import com.google.auth.Credentials;
import com.google.auto.value.AutoValue;
import com.google.protobuf.TypeRegistry;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/** Options for an http-json call, including deadline and credentials. */
+@NullMarked
@AutoValue
public abstract class HttpJsonCallOptions {
public static final HttpJsonCallOptions DEFAULT = newBuilder().build();
/** This method is obsolete. Use {@link #getTimeoutDuration()} instead. */
- @Nullable
@ObsoleteApi("Use getTimeoutDuration() instead")
- public final org.threeten.bp.Duration getTimeout() {
+ public final org.threeten.bp.@Nullable Duration getTimeout() {
return toThreetenDuration(getTimeoutDuration());
}
- @Nullable
- public abstract java.time.Duration getTimeoutDuration();
+ public abstract java.time.@Nullable Duration getTimeoutDuration();
/** This method is obsolete. Use {@link #getDeadlineInstant()} instead. */
- @Nullable
@ObsoleteApi("Use getDeadlineInstant() instead")
- public final org.threeten.bp.Instant getDeadline() {
+ public final org.threeten.bp.@Nullable Instant getDeadline() {
return toThreetenInstant(getDeadlineInstant());
}
- @Nullable
- public abstract java.time.Instant getDeadlineInstant();
+ public abstract java.time.@Nullable Instant getDeadlineInstant();
- @Nullable
- public abstract Credentials getCredentials();
+ public abstract @Nullable Credentials getCredentials();
- @Nullable
- public abstract TypeRegistry getTypeRegistry();
+ public abstract @Nullable TypeRegistry getTypeRegistry();
- @Nullable
- public abstract ApiTracer getTracer();
+ public abstract @Nullable ApiTracer getTracer();
public abstract Builder toBuilder();
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallSettings.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallSettings.java
index 835fe5c92346..36ba46069e37 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallSettings.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallSettings.java
@@ -34,8 +34,10 @@
import com.google.api.gax.rpc.RequestParamsExtractor;
import com.google.api.gax.rpc.ResourceNameExtractor;
import com.google.protobuf.TypeRegistry;
+import org.jspecify.annotations.NullMarked;
/** HTTP-specific settings for creating callables. */
+@NullMarked
public class HttpJsonCallSettings {
private final ApiMethodDescriptor methodDescriptor;
private final RequestParamsExtractor paramsExtractor;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallableFactory.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallableFactory.java
index 447fc46dd9e0..3baeb3d284c2 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallableFactory.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonCallableFactory.java
@@ -46,8 +46,10 @@
import com.google.api.gax.tracing.ApiTracerContext;
import com.google.api.gax.tracing.TracedUnaryCallable;
import javax.annotation.Nonnull;
+import org.jspecify.annotations.NullMarked;
/** Class with utility methods to create http/json-based direct callables. */
+@NullMarked
public class HttpJsonCallableFactory {
private HttpJsonCallableFactory() {}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonChannel.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonChannel.java
index bea8c5ea8021..4d6249e2b7e2 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonChannel.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonChannel.java
@@ -29,7 +29,10 @@
*/
package com.google.api.gax.httpjson;
+import org.jspecify.annotations.NullMarked;
+
/** HttpJsonChannel contains the functionality to issue http-json calls. */
+@NullMarked
public interface HttpJsonChannel {
HttpJsonClientCall newCall(
ApiMethodDescriptor methodDescriptor, HttpJsonCallOptions callOptions);
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCall.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCall.java
index e70a6eb8576f..fef0f62fd445 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCall.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCall.java
@@ -29,7 +29,8 @@
*/
package com.google.api.gax.httpjson;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
// This class mimics the structure and behavior of the corresponding ClientCall from gRPC package as
// closely as possible.
@@ -57,6 +58,7 @@
* @param type of message sent to the server
* @param type of message received one or more times from the server
*/
+@NullMarked
public abstract class HttpJsonClientCall {
/**
* Callbacks for receiving metadata, response messages and completion status from the server.
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCallImpl.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCallImpl.java
index 53a4dd66d3ad..a89e2e02a0dc 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCallImpl.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCallImpl.java
@@ -47,7 +47,8 @@
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* This class serves as main implementation of {@link HttpJsonClientCall} for REST transport and is
@@ -60,6 +61,7 @@
* @param call request type
* @param call response type
*/
+@NullMarked
final class HttpJsonClientCallImpl
extends HttpJsonClientCall implements ResultListener {
//
@@ -109,6 +111,7 @@ final class HttpJsonClientCallImpl
//
// Response-specific data (received from server).
//
+ @Nullable
@GuardedBy("lock")
private HttpRequestRunnable requestRunnable;
@@ -125,6 +128,7 @@ final class HttpJsonClientCallImpl
// can be cancelled if a response (either an error or valid payload) has been
// received before the timeout. This value may be null if the RPC does not have a
// timeout.
+ @Nullable
@GuardedBy("lock")
private volatile ScheduledFuture> timeoutFuture;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCalls.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCalls.java
index 6a2f97401101..221e4fa2d8d0 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCalls.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientCalls.java
@@ -34,12 +34,14 @@
import com.google.api.gax.rpc.ApiCallContext;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.jspecify.annotations.NullMarked;
/**
* {@code HttpJsonClientCalls} creates a new {@code HttpJsonClientCall} from the given call context.
*
* Package-private for internal use.
*/
+@NullMarked
class HttpJsonClientCalls {
private static final Logger LOGGER = Logger.getLogger(HttpJsonClientCalls.class.getName());
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientInterceptor.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientInterceptor.java
index 08dbe2970beb..c621a0c9455e 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientInterceptor.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonClientInterceptor.java
@@ -29,6 +29,8 @@
*/
package com.google.api.gax.httpjson;
+import org.jspecify.annotations.NullMarked;
+
/**
* Interface for intercepting outgoing calls before they are dispatched by a {@link
* HttpJsonChannel}.
@@ -36,6 +38,7 @@
*
The interceptor may be called for multiple {@link HttpJsonClientCall calls} by one or more
* threads without completing the previous ones first. The implementations must be thread-safe.
*/
+@NullMarked
public interface HttpJsonClientInterceptor {
/**
* Intercept {@link HttpJsonClientCall} creation by the {@code next} {@link HttpJsonChannel}.
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectCallable.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectCallable.java
index abf3290067d8..5601fadec554 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectCallable.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectCallable.java
@@ -34,12 +34,15 @@
import com.google.api.gax.rpc.UnaryCallable;
import com.google.common.base.Preconditions;
import com.google.protobuf.TypeRegistry;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* {@code HttpJsonDirectCallable} creates HTTP calls.
*
*
Package-private for internal use.
*/
+@NullMarked
class HttpJsonDirectCallable extends UnaryCallable {
private final ApiMethodDescriptor descriptor;
private final TypeRegistry typeRegistry;
@@ -49,7 +52,7 @@ class HttpJsonDirectCallable extends UnaryCallable descriptor, TypeRegistry typeRegistry) {
+ ApiMethodDescriptor descriptor, @Nullable TypeRegistry typeRegistry) {
this.descriptor = descriptor;
this.typeRegistry = typeRegistry;
}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectServerStreamingCallable.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectServerStreamingCallable.java
index 2f98ac177eaf..04db4b091198 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectServerStreamingCallable.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectServerStreamingCallable.java
@@ -34,6 +34,7 @@
import com.google.api.gax.rpc.ServerStreamingCallable;
import com.google.api.gax.rpc.StreamController;
import com.google.common.base.Preconditions;
+import org.jspecify.annotations.NullMarked;
/**
* {@code HttpJsonDirectServerStreamingCallable} creates server-streaming REST calls.
@@ -45,6 +46,7 @@
*
* Package-private for internal use.
*/
+@NullMarked
class HttpJsonDirectServerStreamingCallable
extends ServerStreamingCallable {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectStreamController.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectStreamController.java
index 9e1b23b25741..6596888e7712 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectStreamController.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonDirectStreamController.java
@@ -34,6 +34,7 @@
import com.google.api.gax.rpc.StreamController;
import com.google.common.base.Preconditions;
import java.util.concurrent.CancellationException;
+import org.jspecify.annotations.NullMarked;
/**
* Wraps a HttpJsonClientCall in a {@link StreamController}. It feeds events to a {@link
@@ -41,6 +42,7 @@
*
* Package-private for internal use.
*/
+@NullMarked
class HttpJsonDirectStreamController implements StreamController {
private final HttpJsonClientCall clientCall;
private final ResponseObserver responseObserver;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonErrorParser.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonErrorParser.java
index 329a7542b96b..6ba0be8f8f1b 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonErrorParser.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonErrorParser.java
@@ -50,6 +50,7 @@
import com.google.rpc.ResourceInfo;
import com.google.rpc.RetryInfo;
import com.google.rpc.Status;
+import org.jspecify.annotations.NullMarked;
/**
* Utility for parsing Google Cloud error responses from JSON.
@@ -59,6 +60,7 @@
* href="https://google.aip.dev/193#http11-json-representation">AIP-193. The payload typically
* contains a top-level "error" object with a "details" list.
*/
+@NullMarked
@InternalApi
class HttpJsonErrorParser {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionCallable.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionCallable.java
index ede9ce3437fd..6360a9404b19 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionCallable.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionCallable.java
@@ -42,12 +42,14 @@
import com.google.common.base.Preconditions;
import java.util.Set;
import java.util.concurrent.CancellationException;
+import org.jspecify.annotations.NullMarked;
/**
* Transforms all {@code Throwable}s thrown during a call into an instance of {@link ApiException}.
*
* Package-private for internal use.
*/
+@NullMarked
class HttpJsonExceptionCallable extends UnaryCallable {
private final UnaryCallable callable;
private final HttpJsonApiExceptionFactory exceptionFactory;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionResponseObserver.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionResponseObserver.java
index 0264a33f080a..b8998b65500e 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionResponseObserver.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionResponseObserver.java
@@ -33,8 +33,10 @@
import com.google.api.gax.rpc.StateCheckingResponseObserver;
import com.google.api.gax.rpc.StreamController;
import java.util.concurrent.CancellationException;
+import org.jspecify.annotations.NullMarked;
/** Package-private for internal use. */
+@NullMarked
class HttpJsonExceptionResponseObserver
extends StateCheckingResponseObserver {
private final ResponseObserver innerObserver;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionServerStreamingCallable.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionServerStreamingCallable.java
index 7c82b2fb1353..7d56ec59d544 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionServerStreamingCallable.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonExceptionServerStreamingCallable.java
@@ -36,6 +36,7 @@
import com.google.api.gax.rpc.ServerStreamingCallable;
import com.google.api.gax.rpc.StatusCode.Code;
import java.util.Set;
+import org.jspecify.annotations.NullMarked;
/**
* Transforms all {@code Throwable}s thrown during a rest call into an instance of {@link
@@ -43,6 +44,7 @@
*
* Package-private for internal use.
*/
+@NullMarked
class HttpJsonExceptionServerStreamingCallable
extends ServerStreamingCallable {
private final ServerStreamingCallable inner;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderEnhancer.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderEnhancer.java
index 0efa599b8b01..2e9be2eb3788 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderEnhancer.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderEnhancer.java
@@ -30,8 +30,10 @@
package com.google.api.gax.httpjson;
import com.google.api.client.http.HttpHeaders;
+import org.jspecify.annotations.NullMarked;
/** Interface for functionality to enhance headers for an http-json call. */
+@NullMarked
public interface HttpJsonHeaderEnhancer {
void enhance(HttpHeaders headers);
}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderEnhancers.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderEnhancers.java
index 074cfc29b25a..bbd609293f78 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderEnhancers.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderEnhancers.java
@@ -30,8 +30,10 @@
package com.google.api.gax.httpjson;
import com.google.api.client.http.HttpHeaders;
+import org.jspecify.annotations.NullMarked;
/** Utility class that creates instances of {@link HttpJsonHeaderEnhancer}. */
+@NullMarked
public class HttpJsonHeaderEnhancers {
private HttpJsonHeaderEnhancers() {}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderInterceptor.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderInterceptor.java
index 0f58181cb61b..a07931572250 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderInterceptor.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonHeaderInterceptor.java
@@ -32,12 +32,14 @@
import com.google.api.gax.httpjson.ForwardingHttpJsonClientCall.SimpleForwardingHttpJsonClientCall;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
+import org.jspecify.annotations.NullMarked;
/**
* An interceptor to handle custom headers.
*
* Package-private for internal usage.
*/
+@NullMarked
class HttpJsonHeaderInterceptor implements HttpJsonClientInterceptor {
private final Map staticHeaders;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonInterceptorProvider.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonInterceptorProvider.java
index e8bb906d699e..fcbbdc15173a 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonInterceptorProvider.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonInterceptorProvider.java
@@ -30,8 +30,10 @@
package com.google.api.gax.httpjson;
import java.util.List;
+import org.jspecify.annotations.NullMarked;
/** Provider of custom REST ClientInterceptors. */
+@NullMarked
public interface HttpJsonInterceptorProvider {
/**
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonLoggingInterceptor.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonLoggingInterceptor.java
index 5a1b1b8c2b0f..0e5477c64143 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonLoggingInterceptor.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonLoggingInterceptor.java
@@ -43,7 +43,9 @@
import com.google.api.gax.logging.LoggerProvider;
import java.util.HashMap;
import java.util.Map;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
@InternalApi
public class HttpJsonLoggingInterceptor implements HttpJsonClientInterceptor {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonLongRunningClient.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonLongRunningClient.java
index 55bb5733cf88..b73f202c1c3f 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonLongRunningClient.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonLongRunningClient.java
@@ -35,12 +35,14 @@
import com.google.api.gax.rpc.LongRunningClient;
import com.google.api.gax.rpc.TranslatingUnaryCallable;
import com.google.api.gax.rpc.UnaryCallable;
+import org.jspecify.annotations.NullMarked;
/**
* Implementation of LongRunningClient based on REST transport.
*
* Public for technical reasons. For internal use only.
*/
+@NullMarked
@InternalApi
public class HttpJsonLongRunningClient implements LongRunningClient {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonMetadata.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonMetadata.java
index 558217a9b084..493539b3de2a 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonMetadata.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonMetadata.java
@@ -35,18 +35,18 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
@AutoValue
@InternalExtensionOnly
public abstract class HttpJsonMetadata {
public abstract Map getHeaders();
- @Nullable
- public abstract String getStatusMessage();
+ public abstract @Nullable String getStatusMessage();
- @Nullable
- public abstract Throwable getException();
+ public abstract @Nullable Throwable getException();
public abstract Builder toBuilder();
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonOperationSnapshot.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonOperationSnapshot.java
index 599f2e231c5e..d709b680a9b6 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonOperationSnapshot.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonOperationSnapshot.java
@@ -34,12 +34,14 @@
import com.google.api.gax.rpc.StatusCode;
import com.google.api.gax.rpc.StatusCode.Code;
import com.google.longrunning.Operation;
+import org.jspecify.annotations.NullMarked;
/**
* Implementation of OperationSnapshot based on REST transport.
*
* Public for technical reasons. For internal use only.
*/
+@NullMarked
@InternalApi
public class HttpJsonOperationSnapshot implements OperationSnapshot {
private final String name;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonOperationSnapshotCallable.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonOperationSnapshotCallable.java
index c0a61a521366..db5ff2617395 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonOperationSnapshotCallable.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonOperationSnapshotCallable.java
@@ -38,6 +38,7 @@
import com.google.api.gax.longrunning.OperationSnapshot;
import com.google.api.gax.rpc.ApiCallContext;
import com.google.api.gax.rpc.UnaryCallable;
+import org.jspecify.annotations.NullMarked;
/**
* A {@code UnaryCallable} that wraps a UnaryCallable returning an Operation and returns an
@@ -45,6 +46,7 @@
*
*
Public for technical reasons. For internal use only.
*/
+@NullMarked
@InternalApi
public class HttpJsonOperationSnapshotCallable
extends UnaryCallable {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonServerStreamingRequestParamCallable.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonServerStreamingRequestParamCallable.java
index 7b1d61596199..4beb85a2b31b 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonServerStreamingRequestParamCallable.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonServerStreamingRequestParamCallable.java
@@ -38,7 +38,9 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public class HttpJsonServerStreamingRequestParamCallable
extends ServerStreamingCallable {
private final ServerStreamingCallable callable;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStatusCode.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStatusCode.java
index ab680db169d3..45628fd90f3f 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStatusCode.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStatusCode.java
@@ -32,8 +32,11 @@
import com.google.api.core.InternalExtensionOnly;
import com.google.api.gax.rpc.StatusCode;
import java.util.Objects;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/** A failure code specific to an HTTP call. */
+@NullMarked
@InternalExtensionOnly
public class HttpJsonStatusCode implements StatusCode {
private final int httpStatus;
@@ -149,7 +152,7 @@ private HttpJsonStatusCode(int httpStatus, Code statusCode) {
}
@Override
- public boolean equals(Object o) {
+ public boolean equals(@Nullable Object o) {
if (this == o) {
return true;
}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStatusRuntimeException.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStatusRuntimeException.java
index a1b9b1c1b4de..af357e0952eb 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStatusRuntimeException.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStatusRuntimeException.java
@@ -30,10 +30,13 @@
package com.google.api.gax.httpjson;
+import org.jspecify.annotations.NullMarked;
+
/**
* HTTP status code in RuntimeException form, for propagating status code information via
* exceptions.
*/
+@NullMarked
public class HttpJsonStatusRuntimeException extends RuntimeException {
private static final long serialVersionUID = -5390915748330242256L;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStubCallableFactory.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStubCallableFactory.java
index a12ca89ebccf..b022ac080a9c 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStubCallableFactory.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonStubCallableFactory.java
@@ -40,7 +40,9 @@
import com.google.api.gax.rpc.StreamingCallSettings;
import com.google.api.gax.rpc.UnaryCallSettings;
import com.google.api.gax.rpc.UnaryCallable;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
public interface HttpJsonStubCallableFactory<
OperationT, OperationsStub extends BackgroundResource> {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonTransportChannel.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonTransportChannel.java
index 355193964555..813622b6a97e 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonTransportChannel.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonTransportChannel.java
@@ -33,8 +33,10 @@
import com.google.api.gax.rpc.TransportChannel;
import com.google.auto.value.AutoValue;
import java.util.concurrent.TimeUnit;
+import org.jspecify.annotations.NullMarked;
/** Implementation of TransportChannel based on http/json. */
+@NullMarked
@AutoValue
@InternalExtensionOnly
public abstract class HttpJsonTransportChannel implements TransportChannel {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonUnaryRequestParamCallable.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonUnaryRequestParamCallable.java
index 3770872e8753..e93c819d7a0a 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonUnaryRequestParamCallable.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpJsonUnaryRequestParamCallable.java
@@ -38,6 +38,7 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import org.jspecify.annotations.NullMarked;
/**
* A {@code UnaryCallable} that extracts values from the fields of the request and inserts them into
@@ -45,6 +46,7 @@
*
* Package-private for internal usage.
*/
+@NullMarked
class HttpJsonUnaryRequestParamCallable
extends UnaryCallable {
private final UnaryCallable callable;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestFormatter.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestFormatter.java
index c85307d4cd27..94b8f9c63f3c 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestFormatter.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestFormatter.java
@@ -33,8 +33,10 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import org.jspecify.annotations.NullMarked;
/** Interface for classes that create parts of HTTP requests from a parameterized message. */
+@NullMarked
public interface HttpRequestFormatter {
/**
* Return a map where each entry is the name of a query param mapped to the values of the param.
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestRunnable.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestRunnable.java
index b3b5b2612d18..7a20affb9386 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestRunnable.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpRequestRunnable.java
@@ -56,9 +56,11 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/** A runnable object that creates and executes an HTTP request. */
+@NullMarked
class HttpRequestRunnable implements Runnable {
private final RequestT request;
private final ApiMethodDescriptor methodDescriptor;
@@ -310,7 +312,7 @@ public abstract static class Builder {
public abstract Builder setStatusCode(int newStatusCode);
- public abstract Builder setResponseContent(InputStream newResponseContent);
+ public abstract Builder setResponseContent(@Nullable InputStream newResponseContent);
public abstract Builder setTrailers(HttpJsonMetadata newTrailers);
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpResponseParser.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpResponseParser.java
index b2c3d5fc87d4..700a2543b0d6 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpResponseParser.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/HttpResponseParser.java
@@ -34,8 +34,10 @@
import com.google.protobuf.TypeRegistry;
import java.io.InputStream;
import java.io.Reader;
+import org.jspecify.annotations.NullMarked;
/** Interface for classes that parse parts of HTTP responses into the parameterized message type. */
+@NullMarked
@InternalExtensionOnly
public interface HttpResponseParser {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/InstantiatingHttpJsonChannelProvider.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/InstantiatingHttpJsonChannelProvider.java
index 495fec1ed450..4cffc99cea59 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/InstantiatingHttpJsonChannelProvider.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/InstantiatingHttpJsonChannelProvider.java
@@ -50,7 +50,8 @@
import java.util.concurrent.ScheduledExecutorService;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* InstantiatingHttpJsonChannelProvider is a TransportChannelProvider which constructs a {@link
@@ -64,6 +65,7 @@
* The client lib header and generator header values are used to form a value that goes into the
* http header of requests to the service.
*/
+@NullMarked
@InternalExtensionOnly
public final class InstantiatingHttpJsonChannelProvider implements TransportChannelProvider {
@@ -75,7 +77,7 @@ public final class InstantiatingHttpJsonChannelProvider implements TransportChan
private final HttpJsonInterceptorProvider interceptorProvider;
private final String endpoint;
private final HttpTransport httpTransport;
- @Nullable private final MtlsProvider mtlsProvider;
+ private final @Nullable MtlsProvider mtlsProvider;
private final CertificateBasedAccess certificateBasedAccess;
private InstantiatingHttpJsonChannelProvider(
@@ -190,7 +192,7 @@ public TransportChannelProvider withCredentials(Credentials credentials) {
"InstantiatingHttpJsonChannelProvider doesn't need credentials");
}
- HttpTransport createHttpTransport() throws IOException, GeneralSecurityException {
+ @Nullable HttpTransport createHttpTransport() throws IOException, GeneralSecurityException {
if (mtlsProvider == null) {
return null;
}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonChannel.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonChannel.java
index bd3bed855608..8e24eafcce97 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonChannel.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonChannel.java
@@ -41,9 +41,11 @@
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/** Implementation of HttpJsonChannel which can issue http-json calls. */
+@NullMarked
public class ManagedHttpJsonChannel implements HttpJsonChannel, BackgroundResource {
private final Executor executor;
@@ -62,9 +64,9 @@ String getEndpoint() {
}
private ManagedHttpJsonChannel(
- Executor executor,
+ @Nullable Executor executor,
boolean usingDefaultExecutor,
- String endpoint,
+ @Nullable String endpoint,
@Nullable HttpTransport httpTransport) {
this.executor = executor;
this.usingDefaultExecutor = usingDefaultExecutor;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonInterceptorChannel.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonInterceptorChannel.java
index 3e71031f1c9d..eaaa8c3a7c56 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonInterceptorChannel.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ManagedHttpJsonInterceptorChannel.java
@@ -31,7 +31,9 @@
import com.google.common.annotations.VisibleForTesting;
import java.util.concurrent.TimeUnit;
+import org.jspecify.annotations.NullMarked;
+@NullMarked
class ManagedHttpJsonInterceptorChannel extends ManagedHttpJsonChannel {
private final ManagedHttpJsonChannel channel;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/OperationSnapshotFactory.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/OperationSnapshotFactory.java
index 21a746c51e09..1917c56095f2 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/OperationSnapshotFactory.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/OperationSnapshotFactory.java
@@ -30,6 +30,7 @@
package com.google.api.gax.httpjson;
import com.google.api.gax.longrunning.OperationSnapshot;
+import org.jspecify.annotations.NullMarked;
/**
* A factory which creates an {@link OperationSnapshot} from an initial request message (the one
@@ -41,6 +42,7 @@
* @param initial request message type
* @param initial or polling response type
*/
+@NullMarked
public interface OperationSnapshotFactory {
OperationSnapshot create(RequestT request, OperationT response);
}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/PollingRequestFactory.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/PollingRequestFactory.java
index f5a6e9c8d072..01f1d8750557 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/PollingRequestFactory.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/PollingRequestFactory.java
@@ -29,11 +29,14 @@
*/
package com.google.api.gax.httpjson;
+import org.jspecify.annotations.NullMarked;
+
/**
* A factory which creates a subsequent polling request from a compund operation id.
*
* @param polling request type
*/
+@NullMarked
public interface PollingRequestFactory {
/**
* Creates a polling request message from a {@code compoundOperationId}.
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageJsonStreamIterator.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageJsonStreamIterator.java
index 84167de5e91a..3cd74470dbec 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageJsonStreamIterator.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageJsonStreamIterator.java
@@ -38,8 +38,10 @@
import java.io.PipedWriter;
import java.io.Reader;
import java.util.Iterator;
+import org.jspecify.annotations.NullMarked;
/** This class is not thread-safe and is expected to be used under external synchronization. */
+@NullMarked
class ProtoMessageJsonStreamIterator implements Closeable, Iterator {
private volatile boolean arrayStarted;
private final JsonReader jsonReader;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageRequestFormatter.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageRequestFormatter.java
index aa3db693f5e3..efdf41131c01 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageRequestFormatter.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageRequestFormatter.java
@@ -36,8 +36,10 @@
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import org.jspecify.annotations.NullMarked;
/** Creates parts of a HTTP request from a protobuf message. */
+@NullMarked
public class ProtoMessageRequestFormatter
implements HttpRequestFormatter {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageResponseParser.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageResponseParser.java
index 815d19c7a904..7ed0602129e6 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageResponseParser.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoMessageResponseParser.java
@@ -36,8 +36,10 @@
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
+import org.jspecify.annotations.NullMarked;
/** The implementation of {@link HttpResponseParser} which works with protobuf messages. */
+@NullMarked
public class ProtoMessageResponseParser
implements HttpResponseParser {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoOperationTransformers.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoOperationTransformers.java
index a5a3e436cf98..d5092cbad9ec 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoOperationTransformers.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoOperationTransformers.java
@@ -36,8 +36,10 @@
import com.google.protobuf.Any;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.Message;
+import org.jspecify.annotations.NullMarked;
/** Public for technical reasons; intended for use by generated code. */
+@NullMarked
public class ProtoOperationTransformers {
private ProtoOperationTransformers() {}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoRestSerializer.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoRestSerializer.java
index 5d12920fea76..6dcb31dd03d7 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoRestSerializer.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/ProtoRestSerializer.java
@@ -42,6 +42,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import org.jspecify.annotations.NullMarked;
/**
* This class serializes/deserializes protobuf {@link Message} for REST interactions. It serializes
@@ -49,6 +50,7 @@
* URL path parameters, and query parameters. It deserializes JSON responses into response protobuf
* message.
*/
+@NullMarked
public class ProtoRestSerializer {
private final TypeRegistry registry;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/RestSerializationException.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/RestSerializationException.java
index cbf13723873a..3aa97826cb6b 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/RestSerializationException.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/RestSerializationException.java
@@ -29,10 +29,13 @@
*/
package com.google.api.gax.httpjson;
+import org.jspecify.annotations.NullMarked;
+
/**
* An exception thrown when a protobuf message cannot be serialized/deserialized for REST
* interactions.
*/
+@NullMarked
public class RestSerializationException extends RuntimeException {
private static final long serialVersionUID = -6485633460933364916L;
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/OperationsClient.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/OperationsClient.java
index 71982aacd058..568bc0373d22 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/OperationsClient.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/OperationsClient.java
@@ -51,6 +51,8 @@
import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
// AUTO-GENERATED DOCUMENTATION AND CLASS.
/**
@@ -119,8 +121,9 @@
*
* Please refer to the GitHub repository's samples for more quickstart code snippets.
*/
+@NullMarked
public class OperationsClient implements BackgroundResource {
- private final OperationsSettings settings;
+ private final @Nullable OperationsSettings settings;
private final OperationsStub stub;
/** Constructs an instance of OperationsClient with default settings. */
@@ -602,8 +605,8 @@ public static class ListOperationsPage
ListOperationsRequest, ListOperationsResponse, Operation, ListOperationsPage> {
private ListOperationsPage(
- PageContext context,
- ListOperationsResponse response) {
+ @Nullable PageContext context,
+ @Nullable ListOperationsResponse response) {
super(context, response);
}
@@ -634,7 +637,8 @@ public static class ListOperationsFixedSizeCollection
ListOperationsPage,
ListOperationsFixedSizeCollection> {
- private ListOperationsFixedSizeCollection(List pages, int collectionSize) {
+ private ListOperationsFixedSizeCollection(
+ @Nullable List pages, int collectionSize) {
super(pages, collectionSize);
}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/OperationsSettings.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/OperationsSettings.java
index 99cbc48d9259..6765cae65899 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/OperationsSettings.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/OperationsSettings.java
@@ -51,6 +51,8 @@
import com.google.protobuf.Empty;
import java.io.IOException;
import java.util.List;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
// AUTO-GENERATED DOCUMENTATION AND CLASS.
/**
@@ -83,6 +85,7 @@
* OperationsSettings operationsSettings = operationsSettingsBuilder.build();
* }
*/
+@NullMarked
public class OperationsSettings extends ClientSettings {
/** Returns the object with the settings used for calls to listOperations. */
@@ -171,7 +174,7 @@ protected Builder() throws IOException {
this(((ClientContext) null));
}
- protected Builder(ClientContext clientContext) {
+ protected Builder(@Nullable ClientContext clientContext) {
super(OperationsStubSettings.newBuilder(clientContext));
}
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/HttpJsonOperationsCallableFactory.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/HttpJsonOperationsCallableFactory.java
index 176e6e98c64d..a2056c2e4e7a 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/HttpJsonOperationsCallableFactory.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/HttpJsonOperationsCallableFactory.java
@@ -41,6 +41,7 @@
import com.google.api.gax.rpc.UnaryCallSettings;
import com.google.api.gax.rpc.UnaryCallable;
import com.google.longrunning.Operation;
+import org.jspecify.annotations.NullMarked;
// AUTO-GENERATED DOCUMENTATION AND CLASS.
/**
@@ -48,6 +49,7 @@
*
* This class is for advanced usage.
*/
+@NullMarked
public class HttpJsonOperationsCallableFactory
implements HttpJsonStubCallableFactory {
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/HttpJsonOperationsStub.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/HttpJsonOperationsStub.java
index f185b98fe2c7..e53bfcb80755 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/HttpJsonOperationsStub.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/HttpJsonOperationsStub.java
@@ -61,6 +61,7 @@
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+import org.jspecify.annotations.NullMarked;
// AUTO-GENERATED DOCUMENTATION AND CLASS.
/**
@@ -71,6 +72,7 @@
* Note: This OperationsClient was originally auto-generated by the generator. There has been a
* few handwritten changes since then and has not been regenerated.
*/
+@NullMarked
public class HttpJsonOperationsStub extends OperationsStub {
private static final String LRO_LIST_OPERATIONS = "google.longrunning.Operations.ListOperations";
private static final String LRO_GET_OPERATION = "google.longrunning.Operations.GetOperation";
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/OperationsStub.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/OperationsStub.java
index bbfec5bdee67..6482998d3e91 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/OperationsStub.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/OperationsStub.java
@@ -40,6 +40,7 @@
import com.google.longrunning.ListOperationsResponse;
import com.google.longrunning.Operation;
import com.google.protobuf.Empty;
+import org.jspecify.annotations.NullMarked;
// AUTO-GENERATED DOCUMENTATION AND CLASS.
/**
@@ -47,6 +48,7 @@
*
*
This class is for advanced usage and reflects the underlying API directly.
*/
+@NullMarked
public abstract class OperationsStub implements BackgroundResource {
public UnaryCallable
diff --git a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/OperationsStubSettings.java b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/OperationsStubSettings.java
index b1664088a54c..5122a8d60863 100644
--- a/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/OperationsStubSettings.java
+++ b/sdk-platform-java/gax-java/gax-httpjson/src/main/java/com/google/api/gax/httpjson/longrunning/stub/OperationsStubSettings.java
@@ -65,6 +65,8 @@
import com.google.protobuf.Empty;
import java.io.IOException;
import java.util.List;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
// AUTO-GENERATED DOCUMENTATION AND CLASS.
/**
@@ -97,6 +99,7 @@
* OperationsStubSettings operationsSettings = operationsSettingsBuilder.build();
* }
*/
+@NullMarked
public class OperationsStubSettings extends StubSettings {
/** The default scopes of the service. */
private static final ImmutableList DEFAULT_SERVICE_SCOPES =
@@ -308,7 +311,7 @@ protected Builder() {
this(((ClientContext) null));
}
- protected Builder(ClientContext clientContext) {
+ protected Builder(@Nullable ClientContext clientContext) {
super(clientContext);
listOperationsSettings = PagedCallSettings.newBuilder(LIST_OPERATIONS_PAGE_STR_FACT);
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/AccumulatingBatchReceiver.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/AccumulatingBatchReceiver.java
index 3e6e47013db6..95bcead82d6b 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/AccumulatingBatchReceiver.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/AccumulatingBatchReceiver.java
@@ -33,8 +33,10 @@
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;
+import org.jspecify.annotations.NullMarked;
/** A simple ThresholdBatchReceiver that just accumulates batches. */
+@NullMarked
public final class AccumulatingBatchReceiver implements ThresholdBatchReceiver {
private final ConcurrentLinkedQueue batches = new ConcurrentLinkedQueue<>();
private final ApiFuture> retFuture;
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchEntry.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchEntry.java
index 163eae9fd6fa..0cf420cb2edb 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchEntry.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchEntry.java
@@ -32,7 +32,8 @@
import com.google.api.core.InternalApi;
import com.google.api.core.SettableApiFuture;
import com.google.auto.value.AutoValue;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* This class contains the element and its corresponding unresolved future, which would be resolved
@@ -42,6 +43,7 @@
* @param The type of each individual element to be batched.
* @param The type of the result for each individual element.
*/
+@NullMarked
@InternalApi("For google-cloud-java client use only.")
@AutoValue
public abstract class BatchEntry {
@@ -52,8 +54,7 @@ public static BatchEntry cr
return new AutoValue_BatchEntry<>(element, resultFuture);
}
- @Nullable
- public abstract ElementT getElement();
+ public abstract @Nullable ElementT getElement();
public abstract SettableApiFuture getResultFuture();
}
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchMerger.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchMerger.java
index 2d8005307bf1..3cd207a6afde 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchMerger.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchMerger.java
@@ -29,6 +29,9 @@
*/
package com.google.api.gax.batching;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
public interface BatchMerger {
void merge(B batch, B newBatch);
}
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchResource.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchResource.java
index 91cd70c0d473..575d0e99b473 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchResource.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchResource.java
@@ -30,12 +30,14 @@
package com.google.api.gax.batching;
import com.google.api.core.InternalApi;
+import org.jspecify.annotations.NullMarked;
/**
* Represent the resource used by a batch including element and byte. It can also be extended to
* other things to determine if adding a new element needs to be flow controlled or if the current
* batch needs to be flushed.
*/
+@NullMarked
@InternalApi("For google-cloud-java client use only.")
public interface BatchResource {
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/Batcher.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/Batcher.java
index 6f9f87890546..1b8479c376b4 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/Batcher.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/Batcher.java
@@ -34,7 +34,8 @@
import com.google.api.gax.rpc.ApiCallContext;
import java.time.Duration;
import java.util.concurrent.TimeoutException;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* Represents a batching context where individual elements will be accumulated and flushed in a
@@ -48,6 +49,7 @@
* @param The type of each individual element to be batched.
* @param The type of the result for each individual element.
*/
+@NullMarked
@InternalExtensionOnly
public interface Batcher extends AutoCloseable {
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatcherImpl.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatcherImpl.java
index 96be0ffbf9b5..14c2e0ca12da 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatcherImpl.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatcherImpl.java
@@ -65,7 +65,8 @@
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* Queues up the elements until {@link #flush()} is called; once batching is over, returned future
@@ -78,6 +79,7 @@
* @param The type of the request that will contain the accumulated elements.
* @param The type of the response that will unpack into individual element results.
*/
+@NullMarked
@InternalApi("For google-cloud-java client use only")
public class BatcherImpl
implements Batcher {
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatcherStats.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatcherStats.java
index 20b0f95954ae..16407ae5f5a8 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatcherStats.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatcherStats.java
@@ -38,13 +38,15 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* Keeps the statistics about failed operations(both at RPC and ElementT) in {@link Batcher}. This
* provides the count of individual exception failure and count of each failed {@link Code} occurred
* in the batching process.
*/
+@NullMarked
class BatcherStats {
private final Map requestExceptionCounts = new HashMap<>();
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingCallSettings.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingCallSettings.java
index f7a25ae77fcc..24c43702fbbf 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingCallSettings.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingCallSettings.java
@@ -37,6 +37,7 @@
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import java.util.Set;
+import org.jspecify.annotations.NullMarked;
/**
* This is an extension of {@link UnaryCallSettings} class to configure a {@link UnaryCallable} for
@@ -63,6 +64,7 @@
* @param The type of the request that will contain the accumulated elements.
* @param The type of the response that will unpack into individual element results.
*/
+@NullMarked
public final class BatchingCallSettings
extends UnaryCallSettings {
private final BatchingDescriptor
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingDescriptor.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingDescriptor.java
index 41861c79035b..08ca59b86e52 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingDescriptor.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingDescriptor.java
@@ -31,6 +31,7 @@
import com.google.api.core.InternalApi;
import java.util.List;
+import org.jspecify.annotations.NullMarked;
/**
* An adapter that packs and unpacks the elements in and out of batch requests and responses.
@@ -79,6 +80,7 @@
* @param The type of the request that will contain the accumulated elements
* @param The type of the response that will be unpacked into individual element results
*/
+@NullMarked
@InternalApi("For google-cloud-java client use only.")
public interface BatchingDescriptor {
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingException.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingException.java
index 470c659d0d04..ed773cbd4960 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingException.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingException.java
@@ -29,7 +29,10 @@
*/
package com.google.api.gax.batching;
+import org.jspecify.annotations.NullMarked;
+
/** Represents exception occurred during batching. */
+@NullMarked
public final class BatchingException extends RuntimeException {
BatchingException(String message) {
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingFlowController.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingFlowController.java
index 4252f7594157..baeb0560b24e 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingFlowController.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingFlowController.java
@@ -32,8 +32,10 @@
import com.google.api.gax.batching.FlowController.FlowControlException;
import com.google.common.base.Preconditions;
import com.google.common.primitives.Ints;
+import org.jspecify.annotations.NullMarked;
/** Wraps a {@link FlowController} for use by batching. */
+@NullMarked
public class BatchingFlowController {
private final FlowController flowController;
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingRequestBuilder.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingRequestBuilder.java
index 448e15c5b6cf..7a2f61e21f01 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingRequestBuilder.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingRequestBuilder.java
@@ -30,6 +30,7 @@
package com.google.api.gax.batching;
import com.google.api.core.InternalApi;
+import org.jspecify.annotations.NullMarked;
/**
* Adapter to pack individual elements into a larger batch request.
@@ -40,6 +41,7 @@
* @param The type of each individual element to be batched.
* @param The type of the request that will contain the accumulated elements.
*/
+@NullMarked
@InternalApi("For google-cloud-java client use only.")
public interface BatchingRequestBuilder {
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingSettings.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingSettings.java
index 7507f6c28407..7cbb131903d6 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingSettings.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingSettings.java
@@ -37,7 +37,8 @@
import com.google.auto.value.AutoValue;
import com.google.common.base.Preconditions;
import java.time.Duration;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* Represents the batching settings to use for an API method that is capable of batching.
@@ -92,26 +93,23 @@
* can occur if messages are created and added to batching faster than they can be processed. The
* flow control behavior is controlled using FlowControlSettings.
*/
+@NullMarked
@AutoValue
public abstract class BatchingSettings {
/** Get the element count threshold to use for batching. */
- @Nullable
- public abstract Long getElementCountThreshold();
+ public abstract @Nullable Long getElementCountThreshold();
/** Get the request byte threshold to use for batching. */
- @Nullable
- public abstract Long getRequestByteThreshold();
+ public abstract @Nullable Long getRequestByteThreshold();
/** This method is obsolete. Use {@link #getDelayThresholdDuration() } instead */
- @Nullable
@ObsoleteApi("Use getDelayThresholdDuration() instead")
- public org.threeten.bp.Duration getDelayThreshold() {
+ public org.threeten.bp.@Nullable Duration getDelayThreshold() {
return toThreetenDuration(getDelayThresholdDuration());
}
/** Get the delay threshold to use for batching. */
- @Nullable
- public abstract java.time.Duration getDelayThresholdDuration();
+ public abstract java.time.@Nullable Duration getDelayThresholdDuration();
/** Returns the Boolean object to indicate if the batching is enabled. Default to true */
public abstract Boolean getIsEnabled();
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingThreshold.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingThreshold.java
index 02ceabdb1207..6a8ab4727bd5 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingThreshold.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingThreshold.java
@@ -29,10 +29,13 @@
*/
package com.google.api.gax.batching;
+import org.jspecify.annotations.NullMarked;
+
/**
* The interface representing a threshold to be used in ThresholdBatcher. Thresholds do not need to
* be thread-safe if they are only used inside ThresholdBatcher.
*/
+@NullMarked
public interface BatchingThreshold {
/**
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingThresholds.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingThresholds.java
index 28409b00b79c..9bb481273355 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingThresholds.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingThresholds.java
@@ -31,8 +31,10 @@
import com.google.common.collect.ImmutableList;
import java.util.List;
+import org.jspecify.annotations.NullMarked;
/** Factory methods for general-purpose batching thresholds. */
+@NullMarked
public final class BatchingThresholds {
/**
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BlockingSemaphore.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BlockingSemaphore.java
index 0271f7e8a3e3..ab876fa9f667 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BlockingSemaphore.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BlockingSemaphore.java
@@ -31,8 +31,10 @@
package com.google.api.gax.batching;
import com.google.common.base.Preconditions;
+import org.jspecify.annotations.NullMarked;
/** A {@link Semaphore64} that blocks until permits become available. */
+@NullMarked
class BlockingSemaphore implements Semaphore64 {
private long availablePermits;
private long limit;
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DefaultBatchResource.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DefaultBatchResource.java
index e5ce99960a9c..59404e89a367 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DefaultBatchResource.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DefaultBatchResource.java
@@ -31,10 +31,12 @@
import com.google.auto.value.AutoValue;
import com.google.common.base.Preconditions;
+import org.jspecify.annotations.NullMarked;
/**
* The default implementation of {@link BatchResource} which tracks the elementCount and byteCount.
*/
+@NullMarked
@AutoValue
abstract class DefaultBatchResource implements BatchResource {
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DynamicFlowControlSettings.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DynamicFlowControlSettings.java
index 4989f7213e00..50a4473bc044 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DynamicFlowControlSettings.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DynamicFlowControlSettings.java
@@ -33,48 +33,44 @@
import com.google.api.gax.batching.FlowController.LimitExceededBehavior;
import com.google.auto.value.AutoValue;
import com.google.common.base.Preconditions;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/** Settings for dynamic flow control */
+@NullMarked
@AutoValue
@InternalApi("For google-cloud-java client use only")
public abstract class DynamicFlowControlSettings {
/** Number of outstanding elements that {@link FlowController} allows when it's initiated. */
- @Nullable
- public abstract Long getInitialOutstandingElementCount();
+ public abstract @Nullable Long getInitialOutstandingElementCount();
/** Number of outstanding bytes that {@link FlowController} allows when it's initiated. */
- @Nullable
- public abstract Long getInitialOutstandingRequestBytes();
+ public abstract @Nullable Long getInitialOutstandingRequestBytes();
/**
* Maximum number of outstanding elements {@link FlowController} allows before enforcing flow
* control.
*/
- @Nullable
- public abstract Long getMaxOutstandingElementCount();
+ public abstract @Nullable Long getMaxOutstandingElementCount();
/**
* Maximum number of outstanding bytes {@link FlowController} allows before enforcing flow
* control.
*/
- @Nullable
- public abstract Long getMaxOutstandingRequestBytes();
+ public abstract @Nullable Long getMaxOutstandingRequestBytes();
/**
* Minimum number of outstanding elements {@link FlowController} allows before enforcing flow
* control.
*/
- @Nullable
- public abstract Long getMinOutstandingElementCount();
+ public abstract @Nullable Long getMinOutstandingElementCount();
/**
* Minimum number of outstanding bytes {@link FlowController} allows before enforcing flow
* control.
*/
- @Nullable
- public abstract Long getMinOutstandingRequestBytes();
+ public abstract @Nullable Long getMinOutstandingRequestBytes();
/**
* @see FlowControlSettings#getLimitExceededBehavior()
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ElementCounter.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ElementCounter.java
index 40c271699b72..838c0c8d6c1b 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ElementCounter.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ElementCounter.java
@@ -29,10 +29,13 @@
*/
package com.google.api.gax.batching;
+import org.jspecify.annotations.NullMarked;
+
/**
* Interface representing an object that provides a numerical count given an object of the
* parameterized type.
*/
+@NullMarked
public interface ElementCounter {
/** Provides the numerical count associated with the given object. */
long count(E element);
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowControlEventStats.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowControlEventStats.java
index 005b2bceddb7..ea0f09817296 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowControlEventStats.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowControlEventStats.java
@@ -36,7 +36,8 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* Record the statistics of flow control events.
@@ -59,6 +60,7 @@
* }
* }
*/
+@NullMarked
@InternalApi("For google-cloud-java client use only")
public class FlowControlEventStats {
@@ -124,13 +126,11 @@ public long getTimestampMs() {
return timestampMs;
}
- @Nullable
- public FlowControlException getException() {
+ public @Nullable FlowControlException getException() {
return exception;
}
- @Nullable
- public Long getThrottledTime(TimeUnit timeUnit) {
+ public @Nullable Long getThrottledTime(TimeUnit timeUnit) {
return throttledTimeMs == null
? null
: timeUnit.convert(throttledTimeMs, TimeUnit.MILLISECONDS);
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowControlSettings.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowControlSettings.java
index b1634c2f6518..81ca495ea6e2 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowControlSettings.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowControlSettings.java
@@ -33,9 +33,11 @@
import com.google.api.gax.batching.FlowController.LimitExceededBehavior;
import com.google.auto.value.AutoValue;
import com.google.common.base.Preconditions;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/** Settings for {@link FlowController}. */
+@NullMarked
@AutoValue
public abstract class FlowControlSettings {
public static FlowControlSettings getDefaultInstance() {
@@ -43,12 +45,10 @@ public static FlowControlSettings getDefaultInstance() {
}
/** Maximum number of outstanding elements to keep in memory before enforcing flow control. */
- @Nullable
- public abstract Long getMaxOutstandingElementCount();
+ public abstract @Nullable Long getMaxOutstandingElementCount();
/** Maximum number of outstanding bytes to keep in memory before enforcing flow control. */
- @Nullable
- public abstract Long getMaxOutstandingRequestBytes();
+ public abstract @Nullable Long getMaxOutstandingRequestBytes();
/**
* The behavior of {@link FlowController} when the specified limits are exceeded. Defaults to
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowController.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowController.java
index 00bf6988da08..3f282b0db7e6 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowController.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowController.java
@@ -34,9 +34,11 @@
import com.google.common.base.Preconditions;
import com.google.common.base.Stopwatch;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Nullable;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/** Provides flow control capability. */
+@NullMarked
public class FlowController {
/** Base exception that signals a flow control state. */
public abstract static class FlowControlException extends Exception {
@@ -137,12 +139,12 @@ public enum LimitExceededBehavior {
Ignore,
}
- @Nullable private final Semaphore64 outstandingElementCount;
- @Nullable private final Semaphore64 outstandingByteCount;
- @Nullable private final Long maxElementCountLimit;
- @Nullable private final Long maxRequestBytesLimit;
- @Nullable private final Long minElementCountLimit;
- @Nullable private final Long minRequestBytesLimit;
+ private final @Nullable Semaphore64 outstandingElementCount;
+ private final @Nullable Semaphore64 outstandingByteCount;
+ private final @Nullable Long maxElementCountLimit;
+ private final @Nullable Long maxRequestBytesLimit;
+ private final @Nullable Long minElementCountLimit;
+ private final @Nullable Long minRequestBytesLimit;
private final LimitExceededBehavior limitExceededBehavior;
private final Object updateLimitLock;
@@ -315,38 +317,32 @@ LimitExceededBehavior getLimitExceededBehavior() {
}
@InternalApi("For internal use by google-cloud-java clients only")
- @Nullable
- public Long getMaxElementCountLimit() {
+ public @Nullable Long getMaxElementCountLimit() {
return maxElementCountLimit;
}
@InternalApi("For internal use by google-cloud-java clients only")
- @Nullable
- public Long getMaxRequestBytesLimit() {
+ public @Nullable Long getMaxRequestBytesLimit() {
return maxRequestBytesLimit;
}
@InternalApi("For google-cloud-java client use only")
- @Nullable
- public Long getMinElementCountLimit() {
+ public @Nullable Long getMinElementCountLimit() {
return minElementCountLimit;
}
@InternalApi("For google-cloud-java client use only")
- @Nullable
- public Long getMinRequestBytesLimit() {
+ public @Nullable Long getMinRequestBytesLimit() {
return minRequestBytesLimit;
}
@InternalApi("For google-cloud-java client use only")
- @Nullable
- public Long getCurrentElementCountLimit() {
+ public @Nullable Long getCurrentElementCountLimit() {
return outstandingElementCount == null ? null : outstandingElementCount.getPermitLimit();
}
@InternalApi("For google-cloud-java client use only")
- @Nullable
- public Long getCurrentRequestBytesLimit() {
+ public @Nullable Long getCurrentRequestBytesLimit() {
return outstandingByteCount == null ? null : outstandingByteCount.getPermitLimit();
}
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/NonBlockingSemaphore.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/NonBlockingSemaphore.java
index 126d1bb7bced..d594d3b25347 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/NonBlockingSemaphore.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/NonBlockingSemaphore.java
@@ -32,8 +32,10 @@
import com.google.common.base.Preconditions;
import java.util.concurrent.atomic.AtomicLong;
+import org.jspecify.annotations.NullMarked;
/** A {@link Semaphore64} that immediately returns with failure if permits are not available. */
+@NullMarked
class NonBlockingSemaphore implements Semaphore64 {
private AtomicLong acquiredPermits;
private AtomicLong limit;
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/NumericThreshold.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/NumericThreshold.java
index 3012873ce9a1..82e91bd5fdf5 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/NumericThreshold.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/NumericThreshold.java
@@ -30,8 +30,10 @@
package com.google.api.gax.batching;
import com.google.common.base.Preconditions;
+import org.jspecify.annotations.NullMarked;
/** A threshold which accumulates a count based on the provided ElementCounter. */
+@NullMarked
public final class NumericThreshold implements BatchingThreshold {
private final long threshold;
private final ElementCounter extractor;
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/PartitionKey.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/PartitionKey.java
index ad1ee483a138..31847d79637c 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/PartitionKey.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/PartitionKey.java
@@ -31,7 +31,10 @@
package com.google.api.gax.batching;
import com.google.common.collect.ImmutableList;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
+@NullMarked
public final class PartitionKey {
private final ImmutableList keys;
private final int hash;
@@ -52,7 +55,7 @@ public int hashCode() {
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/RequestBuilder.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/RequestBuilder.java
index 1371069a82da..7b0e19fcc289 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/RequestBuilder.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/RequestBuilder.java
@@ -29,6 +29,9 @@
*/
package com.google.api.gax.batching;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
public interface RequestBuilder {
void appendRequest(RequestT request);
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/Semaphore64.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/Semaphore64.java
index f0e751846770..7bec44fe9d73 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/Semaphore64.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/Semaphore64.java
@@ -29,6 +29,8 @@
*/
package com.google.api.gax.batching;
+import org.jspecify.annotations.NullMarked;
+
/**
* Semaphore64 is similar to {@link java.util.concurrent.Semaphore} but allows up to {@code 2^63-1}
* permits. It also allows adding / reducing permits to the original limit and acquire partial
@@ -38,6 +40,7 @@
* encouraged to use Java's {@code Semaphore} instead. It is almost certainly faster and less error
* prone.
*/
+@NullMarked
interface Semaphore64 {
boolean acquire(long permits);
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ThresholdBatchReceiver.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ThresholdBatchReceiver.java
index 5f655a8b50f9..b4ddc3eeeadd 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ThresholdBatchReceiver.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ThresholdBatchReceiver.java
@@ -30,11 +30,13 @@
package com.google.api.gax.batching;
import com.google.api.core.ApiFuture;
+import org.jspecify.annotations.NullMarked;
/**
* Interface representing an object that receives batches from a ThresholdBatcher and takes action
* on them. Implementations of ThresholdBatchReceiver should be thread-safe.
*/
+@NullMarked
public interface ThresholdBatchReceiver {
/**
diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ThresholdBatcher.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ThresholdBatcher.java
index b9f3e44aeeec..cb02da03408a 100644
--- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ThresholdBatcher.java
+++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/ThresholdBatcher.java
@@ -48,11 +48,14 @@
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
+import org.jspecify.annotations.NullMarked;
+import org.jspecify.annotations.Nullable;
/**
* Queues up elements until either a duration of time has passed or any threshold in a given set of
* thresholds is breached, and then delivers the elements in a batch to the consumer.
*/
+@NullMarked
public final class ThresholdBatcher {
private class ReleaseResourcesFunction implements ApiFunction