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

Add tasks to run JDK 8 tests on JDK 11+ #778

Merged
merged 8 commits into from
Jul 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions annotations/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ plugins {
id 'nullaway.jacoco-conventions'
}

sourceCompatibility = 1.8

dependencies {
}

Expand Down
17 changes: 5 additions & 12 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -96,18 +96,11 @@ subprojects { project ->
}
}

// We target Java 11 when building on JDK 11+, but Java 8 when building on JDK 8, since
// EP 2.11.0+ requires Java 11
if (JavaVersion.current() >= JavaVersion.VERSION_11) {
tasks.withType(JavaCompile) {
java.sourceCompatibility = "11"
java.targetCompatibility = "11"
}
} else {
tasks.withType(JavaCompile) {
java.sourceCompatibility = "1.8"
java.targetCompatibility = "1.8"
}
// Target JDK 8. We need to use the older sourceCompatibility / targetCompatibility settings to get
// the build to work on JDK 11+. Once we stop supporting JDK 8, switch to using the javac "release" option
tasks.withType(JavaCompile) {
java.sourceCompatibility = "1.8"
java.targetCompatibility = "1.8"
}

// Ensure we are running on Java 8 whenever publishing to remote repos
Expand Down
27 changes: 27 additions & 0 deletions guava-recent-unit-tests/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,30 @@ test {
]
}
}

if (JavaVersion.current() >= JavaVersion.VERSION_11) {
// Create a task to test on JDK 8
def jdk8Test = tasks.register("testJdk8", Test) {
onlyIf {
// Only if we are using a version of Error Prone compatible with JDK 8
deps.versions.errorProneApi == "2.4.0"
}

javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(8)
}

description = "Runs the test suite on JDK 8"
group = LifecycleBasePlugin.VERIFICATION_GROUP

// Copy inputs from normal Test task.
def testTask = tasks.getByName("test")
classpath = testTask.classpath
testClassesDirs = testTask.testClassesDirs
jvmArgs "-Xbootclasspath/p:${configurations.errorproneJavac.asPath}"
}

tasks.named('check').configure {
dependsOn(jdk8Test)
}
}
2 changes: 0 additions & 2 deletions jar-infer/android-jarinfer-models-sdk28/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ plugins {
id "java-library"
}

sourceCompatibility = 1.8

repositories {
mavenCentral()
}
Expand Down
2 changes: 0 additions & 2 deletions jar-infer/android-jarinfer-models-sdk29/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ plugins {
id "java-library"
}

sourceCompatibility = 1.8

repositories {
mavenCentral()
}
Expand Down
2 changes: 0 additions & 2 deletions jar-infer/android-jarinfer-models-sdk30/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ plugins {
id "java-library"
}

sourceCompatibility = 1.8

repositories {
mavenCentral()
}
Expand Down
2 changes: 0 additions & 2 deletions jar-infer/android-jarinfer-models-sdk31/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ plugins {
id "java-library"
}

sourceCompatibility = 1.8

repositories {
mavenCentral()
}
Expand Down
1 change: 1 addition & 0 deletions jar-infer/jar-infer-cli/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ publishing {
project.tasks.named('publishShadowPublicationToMavenLocal').configure {
dependsOn 'sourcesJar'
dependsOn 'simpleJavadocJar'
dependsOn 'signMavenPublication'
}
}
}
2 changes: 0 additions & 2 deletions jar-infer/jar-infer-lib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ plugins {
id 'nullaway.jacoco-conventions'
}

sourceCompatibility = 1.8

repositories {
mavenCentral()
// uncomment if you want to use wala.dalvik or wala.scandroid
Expand Down
2 changes: 0 additions & 2 deletions jar-infer/test-android-lib-jarinfer/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@

apply plugin: 'com.android.library'

sourceCompatibility = 1.8

android {
compileSdkVersion deps.build.compileSdkVersion

Expand Down
62 changes: 45 additions & 17 deletions nullaway/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -101,25 +101,53 @@ test {
apply plugin: 'com.vanniktech.maven.publish'

if (JavaVersion.current() >= JavaVersion.VERSION_11) {
// Required on Java 11+ since Error Prone and NullAway access a bunch of
// JDK-internal APIs that are not exposed otherwise
tasks.withType(JavaCompile).configureEach {
options.compilerArgs += [
"--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
"--add-exports=jdk.compiler/com.sun.source.tree=ALL-UNNAMED",
]
// These --add-exports arguments are required when targeting JDK 11+ since Error Prone and NullAway access a bunch of
// JDK-internal APIs that are not exposed otherwise. Since we currently target JDK 8, we do not need to pass the
// arguments, as encapsulation of JDK internals is not enforced on JDK 8. In fact, the arguments cause a compiler error
// when targeting JDK 8. Leaving commented so we can easily add them back once we target JDK 11.
// tasks.withType(JavaCompile).configureEach {
// options.compilerArgs += [
// "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
// "--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
// "--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
// "--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
// "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
// "--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED",
// "--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
// "--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED",
// "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
// "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
// "--add-exports=jdk.compiler/com.sun.source.tree=ALL-UNNAMED",
// ]
// }

// Create a task to test on JDK 8
def jdk8Test = tasks.register("testJdk8", Test) {
onlyIf {
// Only if we are using a version of Error Prone compatible with JDK 8
deps.versions.errorProneApi == "2.4.0"
}

javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(8)
}

description = "Runs the test suite on JDK 8"
group = LifecycleBasePlugin.VERIFICATION_GROUP

// Copy inputs from normal Test task.
def testTask = tasks.getByName("test")
classpath = testTask.classpath
testClassesDirs = testTask.testClassesDirs
jvmArgs "-Xbootclasspath/p:${configurations.errorproneJavac.asPath}"
}

tasks.named('check').configure {
dependsOn(jdk8Test)
}

// Create a task to build NullAway with NullAway checking enabled
// For some reason, this doesn't work on Java 8
// (For some reason, this doesn't work on Java 8)
tasks.register('buildWithNullAway', JavaCompile) {
onlyIf {
// We only do NullAway checks when compiling against the latest
Expand Down
3 changes: 0 additions & 3 deletions sample/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@ plugins {
id "java-library"
}

sourceCompatibility = "1.8"
targetCompatibility = "1.8"

dependencies {
annotationProcessor project(":nullaway")
annotationProcessor project(path: ":sample-library-model")
Expand Down
3 changes: 0 additions & 3 deletions test-java-lib-lombok/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@ plugins {
id "java-library"
}

sourceCompatibility = "1.8"
targetCompatibility = "1.8"

dependencies {
annotationProcessor project(":nullaway")
annotationProcessor deps.test.lombok
Expand Down
3 changes: 0 additions & 3 deletions test-java-lib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@ plugins {
id "java-library"
}

sourceCompatibility = "1.8"
targetCompatibility = "1.8"

dependencies {
annotationProcessor project(":nullaway")
implementation deps.build.jspecify
Expand Down