gapic-generator-java icon indicating copy to clipboard operation
gapic-generator-java copied to clipboard

[not for review yet] deps: changing jsr305 to jspecify

Open suztomo opened this issue 1 year ago • 6 comments

Preparation for b/341380807. Following https://jspecify.dev/docs/using/#if-your-code-already-uses-jsr-305-annotations

  • Change com.google.code.findbugs:jsr305 to org.jspecify:1.0.0 in pom.xml
  • Change import javax.annotation.Nullable; to import org.jspecify.annotations.Nullable;
    • For fully-qualified class names appearing in code, the annotation moves to just between the package and the simple class name. For example:
      @Nullable private java.time.Duration timeout
      
      becomes
      private java.time. @Nullable Duration timeout;
      
  • Change import javax.annotation.Nonnull; to import org.jspecify.annotations.NonNull; and change @Nonnull to NonNull.

suztomo avatar Sep 11 '24 18:09 suztomo

The build failed:

[INFO] ------------------------------------------------------------------------
Error:  Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile (default-compile) on project gax: Compilation failure: Compilation failure: 
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[71,55] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[85,57] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[90,18] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[94,12] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[101,65] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[120,67] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[125,18] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[133,12] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[140,65] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[160,67] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[165,18] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ApiCallContext.java:[173,12] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingSettings.java:[108,25] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingSettings.java:[114,28] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientSettings.java:[284,64] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientSettings.java:[288,66] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientSettings.java:[370,27] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientSettings.java:[375,21] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/InstantiatingWatchdogProvider.java:[52,36] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/InstantiatingWatchdogProvider.java:[61,26] scoping construct cannot be annotated with type-use annotation: @org.jspecify.annotations.Nullable
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchEntry.java:[52,16] cannot find symbol
Error:    symbol:   class AutoValue_BatchEntry
Error:    location: class com.google.api.gax.batching.BatchEntry<ElementT,ElementResultT>
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/EndpointContext.java:[119,41] package AutoValue_EndpointContext does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/retrying/RetrySettings.java:[222,39] package AutoValue_RetrySettings does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/BatchingSettings.java:[124,42] package AutoValue_BatchingSettings does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/FlowControlSettings.java:[72,45] package AutoValue_FlowControlSettings does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DynamicFlowControlSettings.java:[85,52] package AutoValue_DynamicFlowControlSettings does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DefaultBatchResource.java:[42,46] package AutoValue_DefaultBatchResource does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/batching/DefaultBatchResource.java:[51,46] package AutoValue_DefaultBatchResource does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/core/FixedCredentialsProvider.java:[46,16] cannot find symbol
Error:    symbol:   class AutoValue_FixedCredentialsProvider
Error:    location: class com.google.api.gax.core.FixedCredentialsProvider
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/core/GoogleCredentialsProvider.java:[107,51] package AutoValue_GoogleCredentialsProvider does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/core/InstantiatingExecutorProvider.java:[93,55] package AutoValue_InstantiatingExecutorProvider does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/core/InstantiatingExecutorProvider.java:[106,55] package AutoValue_InstantiatingExecutorProvider does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/retrying/TimedAttemptSettings.java:[101,46] package AutoValue_TimedAttemptSettings does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/PageContext.java:[47,16] cannot find symbol
Error:    symbol:   class AutoValue_PageContext
Error:    location: class com.google.api.gax.rpc.PageContext<RequestT,ResponseT,ResourceT>
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/PageContext.java:[56,16] cannot find symbol
Error:    symbol:   class AutoValue_PageContext
Error:    location: class com.google.api.gax.rpc.PageContext<RequestT,ResponseT,ResourceT>
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ErrorDetails.java:[143,38] package AutoValue_ErrorDetails does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java:[139,39] package AutoValue_ClientContext does not exist
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/SpanName.java:[50,16] cannot find symbol
Error:    symbol:   class AutoValue_SpanName
Error:    location: class com.google.api.gax.tracing.SpanName
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedHeaderProvider.java:[54,16] cannot find symbol
Error:    symbol:   class AutoValue_FixedHeaderProvider
Error:    location: class com.google.api.gax.rpc.FixedHeaderProvider
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/FixedHeaderProvider.java:[69,16] cannot find symbol
Error:    symbol:   class AutoValue_FixedHeaderProvider
Error:    location: class com.google.api.gax.rpc.FixedHeaderProvider
Error:  /home/runner/work/sdk-platform-java/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/MethodName.java:[52,16] cannot find symbol
Error:    symbol:   class AutoValue_MethodName
Error:    location: class com.google.api.gax.tracing.MethodName
Error:  -> [Help 1]

suztomo avatar Sep 11 '24 18:09 suztomo

ci / build(8) for gapic-generator-java failed: https://github.com/googleapis/sdk-platform-java/actions/runs/10837827237/job/30074668962?pr=3191

external/com_google_api_gax_java/gax/src/main/java/com/google/api/gax/batching/FlowController.java:336: error: could not resolve Nullable @Nullable

I need to add jspecify dependency in the Bazel build too.

suztomo avatar Sep 13 '24 14:09 suztomo

"ci / build(8) except for gapic-generator-java" passed.

suztomo avatar Sep 16 '24 20:09 suztomo

There are differnces in the AutoValue generated code. https://gist.github.com/suztomo/0dc82b1b04d9364ecb35421f8b65cc63 It seems explicitly adding Nullable annotations for variables that can be null.

Update: They are irrelevant. AutoValue is adding the Nullable for the builder fields that can be null at initialization when type annotation is found.

suztomo avatar Sep 18 '24 15:09 suztomo