From 7b6e5c5caa80f2b53a0ff091dc48eadd43e8c8cd Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Wed, 14 Sep 2022 10:55:51 -0400 Subject: [PATCH 01/13] Implement a simple nullaway wrapper plugin This plugin can be applied with the baseline-error-prone plugin, it adds a standardized nullaway configuration to the project with centrally managed nullaway versioning via gralde-baseline. Note that Nullaway is applied at `WARNING` rather than `ERROR` such that projects that already enforce warnings will fail builds on nullaway, however the nullaway warnings will only produce console churn otherwise. --- baseline-null-away/README.md | 1 + baseline-null-away/build.gradle | 7 ++ gradle-baseline-java/build.gradle | 6 ++ .../baseline/plugins/BaselineNullAway.java | 78 +++++++++++++++++ ...com.palantir.baseline-null-away.properties | 16 ++++ .../BaselineNullAwayIntegrationTest.groovy | 84 +++++++++++++++++++ settings.gradle | 1 + versions.lock | 4 +- versions.props | 2 + 9 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 baseline-null-away/README.md create mode 100644 baseline-null-away/build.gradle create mode 100644 gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java create mode 100644 gradle-baseline-java/src/main/resources/META-INF/gradle-plugins/com.palantir.baseline-null-away.properties create mode 100644 gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy diff --git a/baseline-null-away/README.md b/baseline-null-away/README.md new file mode 100644 index 000000000..a64dffaa8 --- /dev/null +++ b/baseline-null-away/README.md @@ -0,0 +1 @@ +This module acts as a thin shim around NullAway, allowing us to manage the NullAway dependency via baseline. \ No newline at end of file diff --git a/baseline-null-away/build.gradle b/baseline-null-away/build.gradle new file mode 100644 index 000000000..d80aa343b --- /dev/null +++ b/baseline-null-away/build.gradle @@ -0,0 +1,7 @@ +apply plugin: 'java-library' +apply plugin: 'com.palantir.external-publish-jar' + +dependencies { + runtimeOnly 'com.uber.nullaway:nullaway' + runtimeOnly 'org.checkerframework:dataflow-nullaway' +} diff --git a/gradle-baseline-java/build.gradle b/gradle-baseline-java/build.gradle index be937fbfc..bc97c71b2 100644 --- a/gradle-baseline-java/build.gradle +++ b/gradle-baseline-java/build.gradle @@ -55,6 +55,7 @@ dependencies { tasks.test.dependsOn tasks.findByPath(':gradle-baseline-java-config:publishToMavenLocal') tasks.test.dependsOn tasks.findByPath(':baseline-error-prone:publishToMavenLocal') +tasks.test.dependsOn tasks.findByPath(':baseline-null-away:publishToMavenLocal') tasks.test.dependsOn tasks.findByPath(':baseline-refaster-javac-plugin:publishToMavenLocal') tasks.test.dependsOn tasks.findByPath(':baseline-refaster-rules:publishToMavenLocal') tasks.test.dependsOn tasks.publishToMavenLocal @@ -153,3 +154,8 @@ task writeCheckstyleVersion() { if (gradle.startParameter.isWriteDependencyLocks()) { gradle.startParameter.taskNames += 'writeCheckstyleVersion' } + +javaVersion { + target = 11 + runtime = 17 +} diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java new file mode 100644 index 000000000..93e3d27ed --- /dev/null +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java @@ -0,0 +1,78 @@ +/* + * (c) Copyright 2017 Palantir Technologies Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.palantir.baseline.plugins; + +import java.util.Optional; +import net.ltgt.gradle.errorprone.ErrorProneOptions; +import org.gradle.api.Action; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.logging.Logger; +import org.gradle.api.logging.Logging; +import org.gradle.api.plugins.ExtensionAware; +import org.gradle.api.tasks.compile.JavaCompile; + +public final class BaselineNullAway implements Plugin { + + private static final Logger log = Logging.getLogger(BaselineNullAway.class); + + // This nullaway dependency in our plugin allows dependency upgrades on the baseline + // project to ensure nullaway remains up to date for all consumers. + private static final String NULLAWAY_VERSION = "0.10.1"; + + @Override + public void apply(Project project) { + project.getPluginManager().withPlugin("com.palantir.baseline-error-prone", _unused0 -> { + project.getPluginManager().withPlugin("java", _unused1 -> { + applyToProject(project); + }); + }); + } + + private void applyToProject(Project project) { + String version = Optional.ofNullable(BaselineNullAway.class.getPackage().getImplementationVersion()) + .orElseGet(() -> { + log.warn("BaselineNullAway is using 'latest.release' - " + + "beware this compromises build reproducibility"); + return "latest.release"; + }); + project.getDependencies().add("errorprone", "com.palantir.baseline:baseline-null-away:" + version); + configureErrorProneOptions(project, new Action() { + @Override + public void execute(ErrorProneOptions options) { + options.option("NullAway:AnnotatedPackages", "com.palantir"); + options.option("NullAway:CheckOptionalEmptiness", "true"); + } + }); + } + + private static void configureErrorProneOptions(Project proj, Action action) { + proj.afterEvaluate(new Action() { + @Override + public void execute(Project project) { + project.getTasks().withType(JavaCompile.class).configureEach(new Action() { + @Override + public void execute(JavaCompile javaCompile) { + ((ExtensionAware) javaCompile.getOptions()) + .getExtensions() + .configure(ErrorProneOptions.class, action); + } + }); + } + }); + } +} diff --git a/gradle-baseline-java/src/main/resources/META-INF/gradle-plugins/com.palantir.baseline-null-away.properties b/gradle-baseline-java/src/main/resources/META-INF/gradle-plugins/com.palantir.baseline-null-away.properties new file mode 100644 index 000000000..91f540397 --- /dev/null +++ b/gradle-baseline-java/src/main/resources/META-INF/gradle-plugins/com.palantir.baseline-null-away.properties @@ -0,0 +1,16 @@ +# +# Copyright 2022 Palantir Technologies, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +implementation-class=com.palantir.baseline.plugins.BaselineNullAway diff --git a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy new file mode 100644 index 000000000..fa0954e94 --- /dev/null +++ b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy @@ -0,0 +1,84 @@ +/* + * (c) Copyright 2017 Palantir Technologies Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.palantir.baseline + + +import org.gradle.testkit.runner.BuildResult +import org.gradle.testkit.runner.TaskOutcome +import spock.lang.Unroll + +class BaselineNullAwayIntegrationTest extends AbstractPluginTest { + + def standardBuildFile = ''' + plugins { + id 'java' + id 'com.palantir.baseline-error-prone' + id 'com.palantir.baseline-null-away' + } + repositories { + mavenLocal() + mavenCentral() + } + tasks.withType(JavaCompile).configureEach { + options.compilerArgs += ['-Werror'] + } + '''.stripIndent() + + def validJavaFile = ''' + package com.palantir.test; + public class Test { void test() {} } + '''.stripIndent() + + def invalidJavaFile = ''' + package com.palantir.test; + public class Test { + int test(Throwable throwable) { + // uh-oh, getMessage may be null! + return throwable.getMessage().hashCode(); + } + } + '''.stripIndent() + + def 'Can apply plugin'() { + when: + buildFile << standardBuildFile + + then: + with('compileJava', '--info').build() + } + + def 'compileJava fails when null-away finds errors'() { + when: + buildFile << standardBuildFile + file('src/main/java/com/palantir/test/Test.java') << invalidJavaFile + + then: + BuildResult result = with('compileJava').buildAndFail() + result.task(":compileJava").outcome == TaskOutcome.FAILED + result.output.contains("[NullAway] dereferenced expression throwable.getMessage() is @Nullable") + } + + def 'compileJava succeeds when null-away finds no errors'() { + when: + buildFile << standardBuildFile + file('src/main/java/com/palantir/test/Test.java') << validJavaFile + + then: + BuildResult result = with('compileJava').build() + result.task(":compileJava").outcome == TaskOutcome.SUCCESS + } +} diff --git a/settings.gradle b/settings.gradle index 27c77a35c..a7dec6f59 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,7 @@ rootProject.name = "gradle-baseline" include "baseline-error-prone" +include "baseline-null-away" include "baseline-refaster-javac-plugin" include "baseline-refaster-rules" include "baseline-refaster-testing" diff --git a/versions.lock b/versions.lock index 291ff1a61..f97bd6b84 100644 --- a/versions.lock +++ b/versions.lock @@ -23,7 +23,7 @@ com.google.errorprone:error_prone_test_helpers:2.15.0 (1 constraints: 3a053e3b) com.google.errorprone:error_prone_type_annotations:2.15.0 (1 constraints: 251151c9) com.google.googlejavaformat:google-java-format:1.13.0 (1 constraints: 8b149d75) com.google.guava:failureaccess:1.0.1 (1 constraints: 140ae1b4) -com.google.guava:guava:31.1-jre (13 constraints: 3cdc2b02) +com.google.guava:guava:31.1-jre (14 constraints: d6e9749b) com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava (1 constraints: bd17c918) com.google.inject:guice:4.2.2 (1 constraints: e40b61f3) com.google.j2objc:j2objc-annotations:1.3 (1 constraints: b809eda0) @@ -40,6 +40,7 @@ com.palantir.javaformat:palantir-java-format-spi:1.1.0 (1 constraints: 711560be) com.palantir.safe-logging:preconditions:3.0.0 (6 constraints: 76574831) com.palantir.safe-logging:safe-logging:3.0.0 (8 constraints: 8777131f) com.palantir.tritium:tritium-registry:0.50.0 (1 constraints: 3705333b) +com.uber.nullaway:nullaway:0.10.1 (1 constraints: 3405243b) commons-io:commons-io:2.11.0 (2 constraints: 1426005d) commons-lang:commons-lang:2.6 (1 constraints: ac04232c) io.dropwizard.metrics:metrics-core:4.1.1 (1 constraints: 901088a5) @@ -70,6 +71,7 @@ org.apache.maven.shared:maven-shared-utils:3.3.4 (1 constraints: e60b61f3) org.assertj:assertj-core:3.23.1 (3 constraints: e42af49e) org.checkerframework:checker-qual:3.23.0 (3 constraints: 08256088) org.checkerframework:dataflow-errorprone:3.23.0 (4 constraints: fa3d685c) +org.checkerframework:dataflow-nullaway:3.25.0 (2 constraints: 6911b8f1) org.codehaus.groovy:groovy:3.0.10 (3 constraints: e32879d6) org.codehaus.groovy:groovy-xml:3.0.10 (1 constraints: 791161da) org.codehaus.plexus:plexus-cipher:2.0 (1 constraints: 641174c7) diff --git a/versions.props b/versions.props index 37cb43118..9727c795d 100644 --- a/versions.props +++ b/versions.props @@ -15,6 +15,8 @@ com.googlecode.java-diff-utils:diffutils = 1.3.0 com.puppycrawl.tools:checkstyle = 10.3.2 org.checkerframework:* = 3.23.0 com.palantir.gradle.utils:* = 0.1.0 +com.uber.nullaway:nullaway = 0.10.1 +org.checkerframework:dataflow-nullaway = 3.25.0 # test deps com.fasterxml.jackson.*:* = 2.13.3 From 3d36b53dc4646b3618e5f2fcd4c88999568e332b Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Wed, 14 Sep 2022 11:04:07 -0400 Subject: [PATCH 02/13] Update gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java --- .../groovy/com/palantir/baseline/plugins/BaselineNullAway.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java index 93e3d27ed..5326fb416 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java @@ -1,5 +1,5 @@ /* - * (c) Copyright 2017 Palantir Technologies Inc. All rights reserved. + * (c) Copyright 2022 Palantir Technologies Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 7b8913c5cfc85262fb29db3d94f351b4607257dd Mon Sep 17 00:00:00 2001 From: svc-changelog Date: Wed, 14 Sep 2022 15:05:21 +0000 Subject: [PATCH 03/13] Add generated changelog entries --- changelog/@unreleased/pr-2382.v2.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelog/@unreleased/pr-2382.v2.yml diff --git a/changelog/@unreleased/pr-2382.v2.yml b/changelog/@unreleased/pr-2382.v2.yml new file mode 100644 index 000000000..ed106f5d1 --- /dev/null +++ b/changelog/@unreleased/pr-2382.v2.yml @@ -0,0 +1,5 @@ +type: improvement +improvement: + description: Implement a simple nullaway wrapper plugin `com.palantir.baseline-null-away` + links: + - https://github.com/palantir/gradle-baseline/pull/2382 From c0bf34eceba78c28e1cad96c82031440d105b200 Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Wed, 14 Sep 2022 11:06:04 -0400 Subject: [PATCH 04/13] Update gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy --- .../palantir/baseline/BaselineNullAwayIntegrationTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy index fa0954e94..cb94c4790 100644 --- a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy +++ b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy @@ -1,5 +1,5 @@ /* - * (c) Copyright 2017 Palantir Technologies Inc. All rights reserved. + * (c) Copyright 2022 Palantir Technologies Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From e1ea88e28634bf0b8b8568eafb727ff52a54ff57 Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Wed, 14 Sep 2022 11:14:23 -0400 Subject: [PATCH 05/13] test with smaller blast radius. target=15 has issues --- gradle-baseline-java/build.gradle | 5 ----- .../palantir/baseline/BaselineNullAwayIntegrationTest.groovy | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/gradle-baseline-java/build.gradle b/gradle-baseline-java/build.gradle index bc97c71b2..320876558 100644 --- a/gradle-baseline-java/build.gradle +++ b/gradle-baseline-java/build.gradle @@ -154,8 +154,3 @@ task writeCheckstyleVersion() { if (gradle.startParameter.isWriteDependencyLocks()) { gradle.startParameter.taskNames += 'writeCheckstyleVersion' } - -javaVersion { - target = 11 - runtime = 17 -} diff --git a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy index cb94c4790..bc9e65457 100644 --- a/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy +++ b/gradle-baseline-java/src/test/groovy/com/palantir/baseline/BaselineNullAwayIntegrationTest.groovy @@ -28,11 +28,15 @@ class BaselineNullAwayIntegrationTest extends AbstractPluginTest { id 'java' id 'com.palantir.baseline-error-prone' id 'com.palantir.baseline-null-away' + id 'com.palantir.baseline-java-versions' } repositories { mavenLocal() mavenCentral() } + javaVersions { + libraryTarget = 17 + } tasks.withType(JavaCompile).configureEach { options.compilerArgs += ['-Werror'] } From be8497461102c437cd7a7295e2eaa3ca0ae5b5b9 Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Wed, 14 Sep 2022 12:53:10 -0400 Subject: [PATCH 06/13] same class-uniqueness issue as baseline-error-prone --- baseline-null-away/baseline-class-uniqueness.lock | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 baseline-null-away/baseline-class-uniqueness.lock diff --git a/baseline-null-away/baseline-class-uniqueness.lock b/baseline-null-away/baseline-class-uniqueness.lock new file mode 100644 index 000000000..0992dbcd0 --- /dev/null +++ b/baseline-null-away/baseline-class-uniqueness.lock @@ -0,0 +1,10 @@ +# Danger! Multiple jars contain identically named classes. This may cause different behaviour depending on classpath ordering. +# Run ./gradlew checkClassUniqueness --write-locks to update this file + +## runtimeClasspath +[org.checkerframework:checker-qual, org.checkerframework:dataflow-nullaway] + - org.checkerframework.dataflow.qual.Deterministic + - org.checkerframework.dataflow.qual.Pure + - org.checkerframework.dataflow.qual.Pure$Kind + - org.checkerframework.dataflow.qual.SideEffectFree + - org.checkerframework.dataflow.qual.TerminatesExecution From f0ad86ae165b116d785e6995aa610a1509857fde Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Wed, 14 Sep 2022 12:57:39 -0400 Subject: [PATCH 07/13] Update gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java --- .../com/palantir/baseline/plugins/BaselineNullAway.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java index 5326fb416..5e06b30dd 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java @@ -30,10 +30,6 @@ public final class BaselineNullAway implements Plugin { private static final Logger log = Logging.getLogger(BaselineNullAway.class); - // This nullaway dependency in our plugin allows dependency upgrades on the baseline - // project to ensure nullaway remains up to date for all consumers. - private static final String NULLAWAY_VERSION = "0.10.1"; - @Override public void apply(Project project) { project.getPluginManager().withPlugin("com.palantir.baseline-error-prone", _unused0 -> { From 6352a5b03f341495e805f9e882766288f33c1c8e Mon Sep 17 00:00:00 2001 From: svc-changelog Date: Wed, 14 Sep 2022 17:59:01 +0000 Subject: [PATCH 08/13] Add generated changelog entries --- changelog/@unreleased/pr-2382.v2.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/changelog/@unreleased/pr-2382.v2.yml b/changelog/@unreleased/pr-2382.v2.yml index ed106f5d1..ec2c79999 100644 --- a/changelog/@unreleased/pr-2382.v2.yml +++ b/changelog/@unreleased/pr-2382.v2.yml @@ -1,5 +1,7 @@ type: improvement improvement: description: Implement a simple nullaway wrapper plugin `com.palantir.baseline-null-away` + which registers the `NullAway` check at `WARNING`. Projects which fail on warnings + will require this to pass pre-merge. links: - https://github.com/palantir/gradle-baseline/pull/2382 From ec79a56f5e136c24f2ef143a44a275f4653d16cf Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Thu, 15 Sep 2022 09:10:56 -0400 Subject: [PATCH 09/13] constrain versions --- versions.lock | 4 ++-- versions.props | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/versions.lock b/versions.lock index f97bd6b84..ef15d0e26 100644 --- a/versions.lock +++ b/versions.lock @@ -69,8 +69,8 @@ org.apache.maven.resolver:maven-resolver-util:1.6.3 (3 constraints: 5930fd65) org.apache.maven.shared:maven-dependency-analyzer:1.12.0 (1 constraints: 36052f3b) org.apache.maven.shared:maven-shared-utils:3.3.4 (1 constraints: e60b61f3) org.assertj:assertj-core:3.23.1 (3 constraints: e42af49e) -org.checkerframework:checker-qual:3.23.0 (3 constraints: 08256088) -org.checkerframework:dataflow-errorprone:3.23.0 (4 constraints: fa3d685c) +org.checkerframework:checker-qual:3.25.0 (3 constraints: 08256088) +org.checkerframework:dataflow-errorprone:3.25.0 (4 constraints: fc3da85d) org.checkerframework:dataflow-nullaway:3.25.0 (2 constraints: 6911b8f1) org.codehaus.groovy:groovy:3.0.10 (3 constraints: e32879d6) org.codehaus.groovy:groovy-xml:3.0.10 (1 constraints: 791161da) diff --git a/versions.props b/versions.props index 9727c795d..f738a4182 100644 --- a/versions.props +++ b/versions.props @@ -3,9 +3,11 @@ com.google.auto.service:auto-service = 1.0.1 com.google.errorprone:error_prone_* = 2.15.0 com.google.guava:guava = 31.1-jre com.palantir.safe-logging:* = 3.0.0 +com.uber.nullaway:nullaway = 0.10.1 commons-lang:commons-lang = 2.6 org.apache.maven.shared:maven-dependency-analyzer = 1.12.0 org.apache.maven:maven-core = 3.8.5 +org.checkerframework:* = 3.25.0 org.inferred:freebuilder = 1.14.6 org.jooq:jooq = 3.17.2 org.slf4j:* = 1.7.36 @@ -13,10 +15,7 @@ org.immutables:* = 2.8.8 org.ow2.asm:asm = 9.3 com.googlecode.java-diff-utils:diffutils = 1.3.0 com.puppycrawl.tools:checkstyle = 10.3.2 -org.checkerframework:* = 3.23.0 com.palantir.gradle.utils:* = 0.1.0 -com.uber.nullaway:nullaway = 0.10.1 -org.checkerframework:dataflow-nullaway = 3.25.0 # test deps com.fasterxml.jackson.*:* = 2.13.3 From 7c3bb86aec311e8a582c852b696e37452a29d1d1 Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Thu, 15 Sep 2022 09:15:50 -0400 Subject: [PATCH 10/13] include guava --- .../com/palantir/baseline/plugins/BaselineNullAway.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java index 5e06b30dd..c93ba7985 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java @@ -16,6 +16,7 @@ package com.palantir.baseline.plugins; +import com.google.common.collect.ImmutableSet; import java.util.Optional; import net.ltgt.gradle.errorprone.ErrorProneOptions; import org.gradle.api.Action; @@ -30,6 +31,11 @@ public final class BaselineNullAway implements Plugin { private static final Logger log = Logging.getLogger(BaselineNullAway.class); + private static final ImmutableSet DEFAULT_ANNOTATED_PACKAGES = ImmutableSet.of( + "com.palantir", + // guava + "com.google.common"); + @Override public void apply(Project project) { project.getPluginManager().withPlugin("com.palantir.baseline-error-prone", _unused0 -> { @@ -50,7 +56,7 @@ private void applyToProject(Project project) { configureErrorProneOptions(project, new Action() { @Override public void execute(ErrorProneOptions options) { - options.option("NullAway:AnnotatedPackages", "com.palantir"); + options.option("NullAway:AnnotatedPackages", String.join(",", DEFAULT_ANNOTATED_PACKAGES)); options.option("NullAway:CheckOptionalEmptiness", "true"); } }); From 2bfcbcc085519a09e7c8c1c3642f3f90a7f00f4f Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Thu, 15 Sep 2022 09:30:05 -0400 Subject: [PATCH 11/13] no guava --- .../com/palantir/baseline/plugins/BaselineNullAway.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java index c93ba7985..3454945aa 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java @@ -31,10 +31,7 @@ public final class BaselineNullAway implements Plugin { private static final Logger log = Logging.getLogger(BaselineNullAway.class); - private static final ImmutableSet DEFAULT_ANNOTATED_PACKAGES = ImmutableSet.of( - "com.palantir", - // guava - "com.google.common"); + private static final ImmutableSet DEFAULT_ANNOTATED_PACKAGES = ImmutableSet.of("com.palantir"); @Override public void apply(Project project) { From a502e3c296220ac231169b903ffa6d2306e4b55e Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Thu, 15 Sep 2022 09:35:52 -0400 Subject: [PATCH 12/13] comment --- .../groovy/com/palantir/baseline/plugins/BaselineNullAway.java | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java index 3454945aa..1e5614738 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java @@ -31,6 +31,7 @@ public final class BaselineNullAway implements Plugin { private static final Logger log = Logging.getLogger(BaselineNullAway.class); + /** We may add a gradle extension in a future release allowing custom additional packages. */ private static final ImmutableSet DEFAULT_ANNOTATED_PACKAGES = ImmutableSet.of("com.palantir"); @Override From 4ebcd14cf23e93469b7f991e63446b2637d56696 Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Thu, 15 Sep 2022 09:42:46 -0400 Subject: [PATCH 13/13] no afterevaluate --- .../baseline/plugins/BaselineNullAway.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java index 1e5614738..a0ef9c5f2 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/BaselineNullAway.java @@ -37,7 +37,7 @@ public final class BaselineNullAway implements Plugin { @Override public void apply(Project project) { project.getPluginManager().withPlugin("com.palantir.baseline-error-prone", _unused0 -> { - project.getPluginManager().withPlugin("java", _unused1 -> { + project.getPluginManager().withPlugin("java-base", _unused1 -> { applyToProject(project); }); }); @@ -60,18 +60,11 @@ public void execute(ErrorProneOptions options) { }); } - private static void configureErrorProneOptions(Project proj, Action action) { - proj.afterEvaluate(new Action() { + private static void configureErrorProneOptions(Project project, Action action) { + project.getTasks().withType(JavaCompile.class).configureEach(new Action() { @Override - public void execute(Project project) { - project.getTasks().withType(JavaCompile.class).configureEach(new Action() { - @Override - public void execute(JavaCompile javaCompile) { - ((ExtensionAware) javaCompile.getOptions()) - .getExtensions() - .configure(ErrorProneOptions.class, action); - } - }); + public void execute(JavaCompile javaCompile) { + ((ExtensionAware) javaCompile.getOptions()).getExtensions().configure(ErrorProneOptions.class, action); } }); }