From 120d51ffdf243570aa01994aec479ed15becf20a Mon Sep 17 00:00:00 2001
From: Werner Dietl <wdietl@gmail.com>
Date: Thu, 8 Aug 2024 21:12:06 -0400
Subject: [PATCH] Daikon handling in CI, cleanup (#830)

---
 .github/workflows/ci.yml |  13 +-
 azure-pipelines.yml      | 860 +--------------------------------------
 build.gradle             |  18 +-
 3 files changed, 28 insertions(+), 863 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f46712b2646..3f30f430358 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -39,12 +39,15 @@ jobs:
   remainder:
     name: ${{ matrix.script }} on JDK ${{ matrix.java_version }}
     runs-on: ubuntu-latest
+    # Don't depend on sanity jobs, to have more parallelism.
+    # TODO: cancel these jobs if sanity fails.
+    # needs: sanity
     permissions:
       contents: read
     strategy:
       matrix:
         # No need to run 'cftests-junit-jdk21' on JDK 21.
-        script: ['typecheck-part1', 'typecheck-part2', 'guava', 'plume-lib', 'jspecify-conformance']
+        script: ['typecheck-part1', 'typecheck-part2', 'guava', 'plume-lib', 'daikon-part1', 'daikon-part2', 'jspecify-conformance']
         java_version: [21]
     env:
       JAVA_VERSION: ${{ matrix.java_version }}
@@ -67,14 +70,14 @@ jobs:
   otherjdks:
     name: ${{ matrix.script }} on JDK ${{ matrix.java.version }}
     runs-on: ubuntu-latest
-    needs: remainder
+    needs: sanity
     permissions:
       contents: read
     strategy:
       fail-fast: false
       matrix:
         # jspecify-conformance only tested on JDK 21.
-        script: ['cftests-junit', 'cftests-nonjunit', 'cftests-junit-jdk21', 'typecheck-part1', 'typecheck-part2', 'guava', 'plume-lib']
+        script: ['cftests-junit', 'cftests-nonjunit', 'cftests-junit-jdk21', 'typecheck-part1', 'typecheck-part2', 'guava', 'plume-lib', 'daikon-part1', 'daikon-part2']
         # JDK 21 used by sanity before
         java: [{version: '8', experimental: false},
           {version: '11', experimental: false},
@@ -114,7 +117,9 @@ jobs:
       #
       # At least one plume-lib project no longer works on Java 8.
       # Java 8 does not allow toolchains, so testing 'cftests-junit-jdk21' is unnecessary.
-      if: matrix.java.version != 8 || (matrix.script != 'plume-lib' && matrix.script != 'cftests-junit-jdk21')
+      # Daikon produces 'this-escape' compiler warnings in JDK 22+.
+      if: (matrix.java.version != 8 || (matrix.script != 'plume-lib' && matrix.script != 'cftests-junit-jdk21')) &&
+        (matrix.java.version <= 21 || (matrix.script != 'daikon-part1' && matrix.script != 'daikon-part2'))
       # Set the compiler version to use, allowing us to e.g. run Java 23 while gradle does not work
       # on Java 23 yet. This only tests the compiler, it does not use that version to run the tests.
       env:
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 1fd481f3956..068eb5090d3 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -10,385 +10,10 @@ pr:
 
 jobs:
 
-# Tests run on
-#  * "LTS" releases (8, 11, 17, 21),
-#  * jdk_latest, which is the latest JDK release. This is currently JDK 21, so not separate.
-#    (jdk_latest will move to JDK 22 once it is released.)
-#  * jdk_next, which is the next JDK version, which is not yet released and might still fail.
-#    This is currently JDK 22.
-#
-# The dependsOn clauses are:
-#  * Everything depends on the canary jobs (the 4 main jdk_21 jobs (the newest LTS release)), except those jobs themselves.
-#  * Anything *_jdk8, *_jdk11, *_jdk17, *_jdk_latest, or *_jdk_next depends on *_jdk21.
-#  * Anything daikon_* and guava_* depends on the framework jobs (all core CF tests for JDK 8, 11, 17, and 21).
-#    (This avoids running these long-running jobs if something already failed in the framework.)
-
-# Use inference/typecheck part1/part2 to reduce latency.
-# Include misc_jdk_latest because JDK 20+ adds more strict checking (e.g., Javadoc)
-- job: canary_jobs
-  dependsOn:
-   # - junit_jdk21
-   # - nonjunit_jdk21
-   # - inference_part1_jdk21
-   # - inference_part2_jdk21
-   # - typecheck_part1_jdk21
-   # - typecheck_part2_jdk21
-   - misc_jdk21
-   # - misc_jdk_latest
-  pool:
-    vmImage: 'ubuntu-latest'
-  steps:
-   - checkout: none
-
-- job: framework_jobs
-  dependsOn:
-   - canary_jobs
-   # - junit_jdk8
-   # - junit_jdk11
-   # - junit_jdk17
-   # - junit_jdk_latest
-   # - junit_jdk_next
-   # - nonjunit_jdk8
-   # - nonjunit_jdk11
-   # - nonjunit_jdk17
-   # - nonjunit_jdk_latest
-   # - nonjunit_jdk_next
-   # - inference_jdk8
-   # - inference_jdk11
-   # - inference_jdk17
-   # - inference_jdk_latest
-   # - inference_jdk_next
-   # - typecheck_jdk8
-   # - typecheck_jdk11
-   # - typecheck_jdk17
-   # - typecheck_jdk_latest
-   # - typecheck_jdk_next
-  pool:
-    vmImage: 'ubuntu-latest'
-  steps:
-   - checkout: none
-
-- job: required_jobs
-  dependsOn:
-   - framework_jobs
-   # - daikon_jdk8
-   # - daikon_jdk11
-   - daikon_jdk17
-   - daikon_jdk21
-   # - daikon_jdk_latest
-   # Not daikon_jdk_next
-   # - guava_jdk8
-   # - guava_jdk11
-   # - guava_jdk17
-   # - guava_jdk21
-   # - guava_jdk_latest
-   # Not guava_jdk_next
-   # - plume_lib_jdk8
-   # - plume_lib_jdk11
-   # - plume_lib_jdk17
-   # - plume_lib_jdk21
-   # - plume_lib_jdk_latest
-   # Not plume_lib_jdk_next
-   # - windows_junit_jdk17
-   # - jspecify_conformance_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  steps:
-   - checkout: none
-
-- job: junit_jdk8
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - junit_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk8:latest
-  timeoutInMinutes: 70
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-cftests-junit.sh
-    displayName: test-cftests-junit.sh
-  - task: PublishPipelineArtifact@1
-    inputs:
-      targetPath: ./checker/dist
-      artifactName: cf_jdk8
-      artifactType: pipeline
-- job: junit_jdk11
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - junit_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk11:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-cftests-junit.sh
-    displayName: test-cftests-junit.sh
-  - task: PublishPipelineArtifact@1
-    inputs:
-      targetPath: ./checker/dist
-      artifactName: cf_jdk11
-      artifactType: pipeline
-- job: junit_jdk17
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - junit_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk17:latest
-  timeoutInMinutes: 70
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-cftests-junit.sh
-    displayName: test-cftests-junit.sh
-  - task: PublishPipelineArtifact@1
-    inputs:
-      targetPath: ./checker/dist
-      artifactName: cf_jdk17
-      artifactType: pipeline
-- job: junit_jdk21
-  condition: false
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk21:latest
-  timeoutInMinutes: 70
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-cftests-junit.sh
-    displayName: test-cftests-junit.sh
-  - task: PublishPipelineArtifact@1
-    inputs:
-      targetPath: ./checker/dist
-      artifactName: cf_jdk_latest
-      artifactType: pipeline
-# Disable until JDK 22 is stable
-# - job: junit_jdk_latest
-#   dependsOn:
-#    - canary_jobs
-#    - junit_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk-latest:latest
-#   timeoutInMinutes: 70
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-cftests-junit.sh
-#     displayName: test-cftests-junit.sh
-#   - task: PublishPipelineArtifact@1
-#     inputs:
-#       targetPath: ./checker/dist
-#       artifactName: cf_jdk_latest
-#       artifactType: pipeline
-- job: junit_jdk_next
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - junit_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk-next:latest
-  timeoutInMinutes: 70
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  # Run test, but do not cause overall failure
-  - bash: ./checker/bin-devel/test-cftests-junit.sh
-    continueOnError: true
-    displayName: test-cftests-junit.sh
-  - task: PublishPipelineArtifact@1
-    continueOnError: true
-    inputs:
-      targetPath: ./checker/dist
-      artifactName: cf_jdk_next
-      artifactType: pipeline
-
-- job: nonjunit_jdk8
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - nonjunit_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk8:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-cftests-nonjunit.sh
-    displayName: test-cftests-nonjunit.sh
-- job: nonjunit_jdk11
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - nonjunit_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk11:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-cftests-nonjunit.sh
-    displayName: test-cftests-nonjunit.sh
-- job: nonjunit_jdk17
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - nonjunit_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk17:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-cftests-nonjunit.sh
-    displayName: test-cftests-nonjunit.sh
-- job: nonjunit_jdk21
-  condition: false
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk21:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-cftests-nonjunit.sh
-    displayName: test-cftests-nonjunit.sh
-# Disable until JDK 22 is stable
-# - job: nonjunit_jdk_latest
-#   dependsOn:
-#    - canary_jobs
-#    - nonjunit_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk-latest:latest
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-cftests-nonjunit.sh
-#     displayName: test-cftests-nonjunit.sh
-- job: nonjunit_jdk_next
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - nonjunit_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk-next:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  # Run test, but do not cause overall failure
-  - bash: ./checker/bin-devel/test-cftests-nonjunit.sh
-    continueOnError: true
-    displayName: test-cftests-nonjunit.sh
-
-# # Inference tests in EISOP do nothing, so disable the jobs here.
-# # Sometimes one of the invocations of wpi-many in `./gradlew wpiManyTest`
-# # takes much longer to complete than normal, and this Azure job times out.
-# # When there is a timeout, one cannot examine wpi or wpi-many logs.
-# # So use a timeout of 90 minutes, and hope that is enough.
-# - job: inference_jdk8
-#   dependsOn:
-#    - canary_jobs
-#    - inference_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk8:latest
-#   timeoutInMinutes: 90
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-cftests-inference.sh
-#     displayName: test-cftests-inference.sh
-# - job: inference_jdk11
-#   dependsOn:
-#    - canary_jobs
-#    - inference_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk11:latest
-#   timeoutInMinutes: 90
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-cftests-inference.sh
-#     displayName: test-cftests-inference.sh
-# - job: inference_jdk17
-#   dependsOn:
-#    - canary_jobs
-#    - inference_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk17:latest
-#   timeoutInMinutes: 90
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-cftests-inference.sh
-#     displayName: test-cftests-inference.sh
-# # Split into part1 and part2 only for the inference job that "canary_jobs" depends on.
-# - job: inference_part1_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk21:latest
-#   timeoutInMinutes: 90
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-cftests-inference-part1.sh
-#     displayName: test-cftests-inference-part1.sh
-# - job: inference_part2_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk21:latest
-#   timeoutInMinutes: 90
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-cftests-inference-part2.sh
-#     displayName: test-cftests-inference-part2.sh
-# # Disable until JDK 22 is stable
-# # - job: inference_jdk_latest
-# #   dependsOn:
-# #    - canary_jobs
-# #    - inference_part1_jdk21
-# #    - inference_part2_jdk21
-# #   pool:
-# #     vmImage: 'ubuntu-latest'
-# #   container: wmdietl/cf-ubuntu-jdk-latest:latest
-# #   timeoutInMinutes: 90
-# #   steps:
-# #   - checkout: self
-# #     fetchDepth: 25
-# #   - bash: ./checker/bin-devel/test-cftests-inference.sh
-# #    displayName: test-cftests-inference.sh
-# - job: inference_jdk_next
-#   dependsOn:
-#    - canary_jobs
-#    - inference_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk-next:latest
-#   timeoutInMinutes: 70
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   # Run test, but do not cause overall failure
-#   - bash: ./checker/bin-devel/test-cftests-inference.sh
-#     continueOnError: true
-#     displayName: test-cftests-inference.sh
-
 # Unlimited fetchDepth for misc_jobs, because of need to make contributors.tex
 - job: misc_jdk8
-  dependsOn:
-   # - canary_jobs
-   - misc_jdk21
+  # dependsOn:
+  #  - misc_jdk21
   pool:
     vmImage: 'ubuntu-latest'
   container: wmdietl/cf-ubuntu-jdk8-plus:latest
@@ -397,9 +22,8 @@ jobs:
   - bash: ./checker/bin-devel/test-misc.sh
     displayName: test-misc.sh
 - job: misc_jdk11
-  dependsOn:
-   # - canary_jobs
-   - misc_jdk21
+  # dependsOn:
+  #  - misc_jdk21
   pool:
     vmImage: 'ubuntu-latest'
   container: wmdietl/cf-ubuntu-jdk11-plus:latest
@@ -408,9 +32,8 @@ jobs:
   - bash: ./checker/bin-devel/test-misc.sh
     displayName: test-misc.sh
 - job: misc_jdk17
-  dependsOn:
-   # - canary_jobs
-   - misc_jdk21
+  # dependsOn:
+  #  - misc_jdk21
   pool:
     vmImage: 'ubuntu-latest'
   container: wmdietl/cf-ubuntu-jdk17-plus:latest
@@ -439,9 +62,8 @@ jobs:
 #   - bash: ./checker/bin-devel/test-misc.sh
 #     displayName: test-misc.sh
 - job: misc_jdk_next
-  dependsOn:
-   # - canary_jobs
-   - misc_jdk21
+  # dependsOn:
+  #  - misc_jdk21
   pool:
     vmImage: 'ubuntu-latest'
   container: wmdietl/cf-ubuntu-jdk-next-plus:latest
@@ -451,469 +73,3 @@ jobs:
   - bash: ./checker/bin-devel/test-misc.sh
     continueOnError: true
     displayName: test-misc.sh
-
-- job: typecheck_jdk8
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - typecheck_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk8:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-typecheck.sh
-    displayName: test-typecheck.sh
-- job: typecheck_jdk11
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - typecheck_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk11:latest
-  steps:
-  - checkout: self
-    fetchDepth: 1000
-  - bash: ./checker/bin-devel/test-typecheck.sh
-    displayName: test-typecheck.sh
-- job: typecheck_jdk17
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - typecheck_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk17-plus:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-typecheck.sh
-    displayName: test-typecheck.sh
-# Split into part1 and part2 only for the type-checking job that "canary_jobs" depends on.
-- job: typecheck_part1_jdk21
-  condition: false
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk21-plus:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-typecheck-part1.sh
-    displayName: test-typecheck-part1.sh
-- job: typecheck_part2_jdk21
-  condition: false
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk21-plus:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-typecheck-part2.sh
-    displayName: test-typecheck-part2.sh
-- job: typecheck_jdk21
-  condition: false
-  dependsOn:
-   - typecheck_part1_jdk21
-   - typecheck_part2_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  steps:
-   - checkout: none
-# Disable until JDK 22 is stable
-# - job: typecheck_jdk_latest
-#   dependsOn:
-#   - canary_jobs
-#   - typecheck_jdk21
-#  pool:
-#    vmImage: 'ubuntu-latest'
-#  container: wmdietl/cf-ubuntu-jdk-latest-plus:latest
-#  steps:
-#  - checkout: self
-#    fetchDepth: 25
-#  - bash: ./checker/bin-devel/test-typecheck.sh
-#    displayName: test-typecheck.sh
-- job: typecheck_jdk_next
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - typecheck_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk-next:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  # Run test, but do not cause overall failure
-  - bash: ./checker/bin-devel/test-typecheck.sh
-    continueOnError: true
-    displayName: test-typecheck.sh
-
-- job: daikon_jdk8
-  # Disable test on older JDK
-  condition: false
-  dependsOn:
-   - framework_jobs
-   - daikon_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk8:latest
-  timeoutInMinutes: 70
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-daikon.sh
-    displayName: test-daikon.sh
-- job: daikon_jdk11
-  # Disable test on older JDK
-  condition: false
-  dependsOn:
-   - framework_jobs
-   - daikon_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk11:latest
-  timeoutInMinutes: 80
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-daikon.sh
-    displayName: test-daikon.sh
-- job: daikon_jdk17
-  dependsOn:
-   - canary_jobs
-   - daikon_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk17:latest
-  timeoutInMinutes: 80
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-daikon.sh
-    displayName: test-daikon.sh
-- job: daikon_part1_jdk21
-  dependsOn:
-   - canary_jobs
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk21:latest
-  timeoutInMinutes: 70
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-daikon-part1.sh
-    displayName: test-daikon.sh
-- job: daikon_part2_jdk21
-  dependsOn:
-   - canary_jobs
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk21:latest
-  timeoutInMinutes: 80
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-daikon-part2.sh
-    displayName: test-daikon-part2.sh
-- job: daikon_jdk21
-  dependsOn:
-   - daikon_part1_jdk21
-   - daikon_part2_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  steps:
-   - checkout: none
-# Disable until JDK 22 is stable
-# - job: daikon_jdk_latest
-#   dependsOn:
-#    - canary_jobs
-#    - daikon_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk-latest:latest
-#   timeoutInMinutes: 80
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-daikon.sh
-#     displayName: test-daikon.sh
-- job: daikon_jdk_next
-  dependsOn:
-   - framework_jobs
-   - daikon_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk-next:latest
-  timeoutInMinutes: 70
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  # Run test, but do not cause overall failure
-  - bash: ./checker/bin-devel/test-daikon.sh
-    continueOnError: true
-    displayName: test-daikon.sh
-
-- job: guava_jdk8
-  # Disable test on older JDK
-  condition: false
-  dependsOn:
-   - framework_jobs
-   - guava_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk8:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-guava.sh
-    displayName: test-guava.sh
-- job: guava_jdk11
-  # Disable test on older JDK
-  condition: false
-  dependsOn:
-   - framework_jobs
-   - guava_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk11:latest
-  timeoutInMinutes: 60
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-guava.sh
-    displayName: test-guava.sh
-- job: guava_jdk17
-  condition: false
-  dependsOn:
-   - framework_jobs
-   - guava_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk17:latest
-  timeoutInMinutes: 60
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-guava.sh
-    displayName: test-guava.sh
-- job: guava_jdk21
-  condition: false
-  dependsOn:
-   - canary_jobs
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk21:latest
-  # The guava job sometimes times out, because the time between these lines can be 30 minutes!
-  #   [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugin-tools/maven-plugin-tools-generators/3.5.1/maven-plugin-tools-generators-3.5.1.pom
-  #   [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugin-tools/maven-plugin-tools-generators/3.5.1/maven-plugin-tools-generators-3.5.1.pom
-  # I tried to configure Maven to prevent that problem, but it is still ocurring.
-  # Maybe I need to use caching? https://learn.microsoft.com/en-us/azure/devops/pipelines/release/caching?view=azure-devops
-  timeoutInMinutes: 60
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-guava.sh
-    displayName: test-guava.sh
-# Disable until JDK 22 is stable
-# - job: guava_jdk_latest
-#   dependsOn:
-#    - framework_jobs
-#    - guava_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk-latest:latest
-#   timeoutInMinutes: 60
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-guava.sh
-#     displayName: test-guava.sh
-- job: guava_jdk_next
-  condition: false
-  dependsOn:
-   - framework_jobs
-   - guava_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk-next:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  # Run test, but do not cause overall failure
-  - bash: ./checker/bin-devel/test-guava.sh
-    continueOnError: true
-    displayName: test-guava.sh
-
-- job: plume_lib_jdk8
-  # Disable test on older JDK
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - plume_lib_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk8:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-plume-lib.sh
-    displayName: test-plume-lib.sh
-- job: plume_lib_jdk11
-  # Disable test on older JDK
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - plume_lib_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk11:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-plume-lib.sh
-    displayName: test-plume-lib.sh
-- job: plume_lib_jdk17
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - plume_lib_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk17:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-plume-lib.sh
-    displayName: test-plume-lib.sh
-- job: plume_lib_jdk21
-  condition: false
-  dependsOn:
-   - canary_jobs
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk21:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-plume-lib.sh
-    displayName: test-plume-lib.sh
-# Disable until JDK 22 is stable
-# - job: plume_lib_jdk_latest
-#   dependsOn:
-#    - canary_jobs
-#    - plume_lib_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk-latest:latest
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-plume-lib.sh
-#     displayName: test-plume-lib.sh
-- job: plume_lib_jdk_next
-  condition: false
-  dependsOn:
-   - canary_jobs
-   - plume_lib_jdk17
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk-next:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  # Run test, but do not cause overall failure
-  - bash: ./checker/bin-devel/test-plume-lib.sh
-    continueOnError: true
-    displayName: test-plume-lib.sh
-
-- job: jspecify_conformance_jdk21
-  condition: false
-  dependsOn:
-   - junit_jdk21
-  pool:
-    vmImage: 'ubuntu-latest'
-  container: wmdietl/cf-ubuntu-jdk21:latest
-  steps:
-  - checkout: self
-    fetchDepth: 25
-  - bash: ./checker/bin-devel/test-jspecify-conformance.sh
-    displayName: test-jspecify-conformance.sh
-
-## The downstream jobs are not currently needed because test-downstream.sh is empty.
-# - job: downstream_jdk8
-#   dependsOn:
-#    - canary_jobs
-#    - downstream_jdk17
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk8:latest
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-downstream.sh
-#     displayName: test-downstream.sh
-# - job: downstream_jdk11
-#   dependsOn:
-#    - canary_jobs
-#    - downstream_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk11:latest
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-downstream.sh
-#     displayName: test-downstream.sh
-# - job: downstream_jdk17
-#   dependsOn:
-#    - canary_jobs
-#    - downstream_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk17:latest
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-downstream.sh
-#     displayName: test-downstream.sh
-# - job: downstream_jdk21
-#   dependsOn:
-#    - canary_jobs
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk21:latest
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-downstream.sh
-#     displayName: test-downstream.sh
-# - job: downstream_jdk20
-#   dependsOn:
-#    - canary_jobs
-#    - downstream_jdk21
-#   pool:
-#     vmImage: 'ubuntu-latest'
-#   container: wmdietl/cf-ubuntu-jdk-latest:latest
-#   steps:
-#   - checkout: self
-#     fetchDepth: 25
-#   - bash: ./checker/bin-devel/test-downstream.sh
-#     displayName: test-downstream.sh
-
-- job: windows_junit_jdk17
-  condition: false
-  dependsOn:
-    - junit_jdk21
-  pool:
-    vmImage: 'windows-latest'
-  timeoutInMinutes: 90
-  steps:
-    - checkout: self
-      fetchDepth: 25
-    - bash: ./checker/bin-devel/test-cftests-junit.sh
-      displayName: Run all JUnit tests
-      env:
-        JAVA_HOME: $(JAVA_HOME_17_X64)
-        PATH: $(JAVA_HOME_17_X64)/bin:$(PATH)
diff --git a/build.gradle b/build.gradle
index 30b923ca25d..bf1b7340a96 100644
--- a/build.gradle
+++ b/build.gradle
@@ -460,14 +460,18 @@ allprojects {
             // -classfile: classgraph jar file and https://bugs.openjdk.org/browse/JDK-8190452
             String lint = '-Xlint:-options,-fallthrough,-classfile'
             // Java 8 uses the Error Prone javac, not what is requested with useJdkCompiler.
-            if (!isJava8 && useJdkCompiler >= 21) {
-                // TODO: Ignore this-escape for now, we may want to review and suppress each one later.
-                lint +=',-this-escape'
-            }
-            if (!isJava8 && useJdkCompiler >= 23) {
-                // TODO: Ignore dangling-doc-comments for now, we may want to fix them later.
-                lint +=',-dangling-doc-comments'
+            // So there is no need to set additional lint options.
+            if (!isJava8) {
+                if (useJdkCompiler >= 21) {
+                    // TODO: Ignore this-escape for now, we may want to review and suppress each one later.
+                    lint +=',-this-escape'
+                }
+                if (useJdkCompiler >= 23) {
+                    // TODO: Ignore dangling-doc-comments for now, we may want to fix them later.
+                    lint +=',-dangling-doc-comments'
+                }
             }
+
             options.compilerArgs += [
                 '-g',
                 '-Werror',