From 57a89e857bca5512e6a93b72a98f48e3f59926a7 Mon Sep 17 00:00:00 2001 From: Manu Sridharan Date: Sun, 22 Jan 2023 11:28:10 -0800 Subject: [PATCH] Update to Error Prone 2.18.0 (#707) Fixed some minor Javadoc warnings reported by the new version. Also, adds an `@Inject` annotation on the main `NullAway` constructor, for compatibility with future versions of Error Prone that load checkers via Guice. --- .github/workflows/continuous-integration.yml | 10 +++--- build.gradle | 4 +++ gradle/dependencies.gradle | 2 +- nullaway/build.gradle | 1 + .../main/java/com/uber/nullaway/NullAway.java | 36 +++++++++---------- 5 files changed, 28 insertions(+), 25 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index a8d80cbe20..9bb0d03707 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -21,16 +21,16 @@ jobs: epVersion: 2.4.0 - os: macos-latest java: 11 - epVersion: 2.16 + epVersion: 2.18.0 - os: ubuntu-latest java: 11 - epVersion: 2.16 + epVersion: 2.18.0 - os: windows-latest java: 11 - epVersion: 2.16 + epVersion: 2.18.0 - os: ubuntu-latest java: 17 - epVersion: 2.16 + epVersion: 2.18.0 fail-fast: false runs-on: ${{ matrix.os }} steps: @@ -70,7 +70,7 @@ jobs: with: arguments: coveralls continue-on-error: true - if: runner.os == 'Linux' && matrix.java == '11' && matrix.epVersion == '2.16' && github.repository == 'uber/NullAway' + if: runner.os == 'Linux' && matrix.java == '11' && matrix.epVersion == '2.18.0' && github.repository == 'uber/NullAway' - name: Check that Git tree is clean after build and test run: ./.buildscript/check_git_clean.sh publish_snapshot: diff --git a/build.gradle b/build.gradle index 33d5ff664f..63c05fc004 100644 --- a/build.gradle +++ b/build.gradle @@ -81,6 +81,10 @@ subprojects { project -> check("PackageLocation", CheckSeverity.ERROR) check("UnnecessaryAnonymousClass", CheckSeverity.ERROR) check("UnusedException", CheckSeverity.ERROR) + // To enable auto-patching, uncomment the line below, replace [CheckerName] with + // the checker(s) you want to apply patches for (comma-separated), and above, disable + // "-Werror" +// errorproneArgs.addAll("-XepPatchChecks:[CheckerName]", "-XepPatchLocation:IN_PLACE") } } else { // Disable Error Prone checks on JDK 8, as more recent Error Prone versions don't run on JDK 8 diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index ef6765cbf5..528862b5fc 100755 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -19,7 +19,7 @@ import org.gradle.util.VersionNumber // The oldest version of Error Prone that we support running on def oldestErrorProneVersion = "2.4.0" // Latest released Error Prone version that we've tested with -def latestErrorProneVersion = "2.16" +def latestErrorProneVersion = "2.18.0" // Default to using latest tested Error Prone version, except on Java 8, where 2.10.0 is the last version // that works def defaultErrorProneVersion = JavaVersion.current() >= JavaVersion.VERSION_11 ? latestErrorProneVersion : "2.10.0" diff --git a/nullaway/build.gradle b/nullaway/build.gradle index d6c4463dca..3b4f10f379 100644 --- a/nullaway/build.gradle +++ b/nullaway/build.gradle @@ -32,6 +32,7 @@ dependencies { annotationProcessor deps.apt.autoService compileOnly deps.build.jsr305Annotations compileOnly deps.test.jetbrainsAnnotations + compileOnly deps.apt.javaxInject compileOnly deps.build.errorProneCheckApi diff --git a/nullaway/src/main/java/com/uber/nullaway/NullAway.java b/nullaway/src/main/java/com/uber/nullaway/NullAway.java index a9f4dba424..c8744522c7 100644 --- a/nullaway/src/main/java/com/uber/nullaway/NullAway.java +++ b/nullaway/src/main/java/com/uber/nullaway/NullAway.java @@ -104,6 +104,7 @@ import java.util.stream.Collectors; import java.util.stream.StreamSupport; import javax.annotation.Nullable; +import javax.inject.Inject; import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; @@ -277,6 +278,7 @@ public NullAway() { moduleElementClass = null; } + @Inject // For future Error Prone versions in which checkers are loaded using Guice public NullAway(ErrorProneFlags flags) { config = new ErrorProneCLIFlagsConfig(flags); handler = Handlers.buildDefault(config); @@ -2453,50 +2455,46 @@ static FieldInitEntities create( ImmutableSet.copyOf(staticInitializerMethods)); } - /** - * @return symbol for class - */ + /** Returns symbol for class. */ abstract Symbol.ClassSymbol classSymbol(); /** - * @return @NonNull instance fields that are not directly initialized at - * declaration + * Returns @NonNull instance fields that are not directly initialized at + * declaration. */ abstract ImmutableSet nonnullInstanceFields(); /** - * @return @NonNull static fields that are not directly initialized at declaration + * Returns @NonNull static fields that are not directly initialized at declaration. */ abstract ImmutableSet nonnullStaticFields(); /** - * @return the list of instance initializer blocks (e.g. blocks of the form `class X { { //Code - * } } ), in the order in which they appear in the class + * Returns the list of instance initializer blocks (e.g. blocks of the form `class X { { //Code + * } } ), in the order in which they appear in the class. */ abstract ImmutableList instanceInitializerBlocks(); /** - * @return the list of static initializer blocks (e.g. blocks of the form `class X { static { - * //Code } } ), in the order in which they appear in the class + * Returns the list of static initializer blocks (e.g. blocks of the form `class X { static { + * //Code } } ), in the order in which they appear in the class. */ abstract ImmutableList staticInitializerBlocks(); - /** - * @return the list of constructor - */ + /** Returns constructors in the class. */ abstract ImmutableSet constructors(); /** - * @return the list of non-static (instance) initializer methods. This includes methods - * annotated @Initializer, as well as those specified by -XepOpt:NullAway:KnownInitializers - * or annotated with annotations passed to -XepOpt:NullAway:CustomInitializerAnnotations + * Returns the list of non-static (instance) initializer methods. This includes methods + * annotated @Initializer, as well as those specified by -XepOpt:NullAway:KnownInitializers or + * annotated with annotations passed to -XepOpt:NullAway:CustomInitializerAnnotations. */ abstract ImmutableSet instanceInitializerMethods(); /** - * @return the list of static initializer methods. This includes static methods - * annotated @Initializer, as well as those specified by -XepOpt:NullAway:KnownInitializers - * or annotated with annotations passed to -XepOpt:NullAway:CustomInitializerAnnotations + * Returns the list of static initializer methods. This includes static methods + * annotated @Initializer, as well as those specified by -XepOpt:NullAway:KnownInitializers or + * annotated with annotations passed to -XepOpt:NullAway:CustomInitializerAnnotations. */ abstract ImmutableSet staticInitializerMethods(); }