Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NullAway complaining about returning null for a return type of CompletableFuture<Void> #801

Open
thugsatbay opened this issue Aug 11, 2023 · 1 comment

Comments

@thugsatbay
Copy link

thugsatbay commented Aug 11, 2023

// The purpose of this method is to run some heavy code of publish data on a separate thread pool 
// as that is blocking code. Whereas once published switch back to application thread pool. 
// The response needs to be a CompletableFuture<Void>  that informs if publish has successfully
// happened.
  @SuppressWarnings("NullAway")
  public CompletableFuture<Void> produceAsync(
      @Nonnull Parameter1, @Nonnull Parameter2) {

    return CompletableFuture.supplyAsync(
            () -> {
              // Some method that will publish data, also might throw an error as RuntimeException
              return null; 
            },
            someExecutorService)
        // If an exception occurs or not we move the flow to application thread pool.
        .handleAsync(
            (ignored, throwable) -> {
              if (throwable != null) {
                if (throwable instanceof RuntimeException) {
                  throw (RuntimeException) throwable;
                }

                throw new RuntimeException(throwable);
              }
              // In case there was no exception return null.
              // NullAway is complaining we are returning null. Hence using suppress warning annotation.
              // The null is converted to CompletableFuture<Object> and then to CompletbaleFuture<Void>.
              return null; 
            },
            applicationExecutorService)
        // Convert to Void completable future. whenCompleteAsync returns Object completable future.
        .thenRun(() -> {});
  }
}

Linter complaining about null when contract of method is @nonnull. However, the null is converted from CompletableFuture -> CompletableFuture

We might need to fix the edge case for the linter. In general I think, NullAway for the special case of T is unable to handle it.

@msridhar
Copy link
Collaborator

Sorry, I can't understand what error you are seeing. Can you point out the exact location where the error is reported and what the error message is? And also can you fix the formatting of your example code? Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants