Skip to content

typetools/checker-framework 3.50.0 release - #2186

Merged
wmdietl merged 79 commits into
typetools-3.50.0-fixesfrom
typetools-3.50.0-merge
Oct 1, 2026
Merged

wmdietl merged 79 commits into
typetools-3.50.0-fixesfrom
typetools-3.50.0-merge

Conversation

@wmdietl

@wmdietl wmdietl commented Oct 1, 2026 •

Copy link
Copy Markdown
Member

Brings the typetools Checker Framework 3.50.0 release (the changes since 3.49.5) into EISOP, following the "Updating from a different fork" steps in docs/developer/README-eisop.md. Merging this PR into typetools-3.50.0-fixes is the first step; the second is a PR from typetools-3.50.0-fixes into master, to be merged without squashing.

Please squash-merge this PR with the title typetools/checker-framework 3.50.0 release and the co-author lines below, so that all authors are kept:

Co-authored-by: Michael Ernst <[email protected]>
Co-authored-by: Suzanne Millstein <[email protected]>
Co-authored-by: Damika-Anupama <[email protected]>
Co-authored-by: Damika-Anupama <[email protected]>
Co-authored-by: Abhijit Kulkarni <[email protected]>
Co-authored-by: Vlastimil <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

Companion pull requests

CI clones the companion repositories by branch name, and all three use typetools-3.50.0-merge. Merge them in this order, before this pull request:

  1. Add the file and parser packages to the add-opens compiler arguments guava#17 -- guava/pom.xml opens the file and parser compiler packages that the new expression parser needs (squash is fine).
  2. Update from typetools/jdk up to the Checker Framework 3.50.0 release jdk#153 -- the annotations for the new GrowOnly/shrink hierarchy, required by IndexListIndexingTest. Merge it with a merge commit, not a squash, so that the authorship of the two typetools commits is retained.

Once they are merged and their branches are deleted, CI here uses their master branches, which then contain these changes.

How it was made

The 95 upstream commits were cherry-picked onto a branch whose first commit switches the tree to the typetools formatting (a final commit switches back to AOSP), so that the picks apply cleanly. References to upstream issues and pull requests were removed from the commit messages.

Handled differently from a plain cherry-pick

  • javac jar removed. The release adds annotation-file-utilities/lib/javac-9+181-r4173-1.jar, which is not wanted; it is deleted in this branch and no javac*.jar is tracked.
  • Annotation File Utilities (AFU). The code that upstream moved into this repository is added under annotation-file-utilities/ as it is upstream and was not reviewed in detail. It is not wired into the Gradle build: settings.gradle keeps EISOP's NO-AFU block.
  • Parser replacement. Upstream replaced JavaParser by javac's parser for Java expressions. EISOP's changes to the old JavaExpressionParseUtil were ported to the new ExpressionTreeToJavaExpressionVisitor where the new design has an equivalent (sameName comparisons, a @SuppressWarnings). The build now exports jdk.compiler/com.sun.tools.javac.parser. One behavior difference: isFlowParseError() now uses upstream's startsWith instead of endsWith.
  • Our own versions kept for the changelog, the release scripts under docs/developer/release/, the Gradle wrapper and all dependency and plugin versions where EISOP is equal or newer, the root Makefile (upstream's mypy --strict step is not adopted), and EISOP's JavaDoc/comment wording where both sides edited the same text.
  • Build changes ported: the parser export, -Xep:DoNotCallSuggester:OFF, the new -PnullnessAll property, the dataflow JUnit test (the dataflow test task is re-enabled; we keep its dependsOn('allDataflowTests')), .gitignore and manual-Makefile updates.
  • Not adopted: upstream's release-process changes, its rework of the JDK-selection properties, extra Error Prone switches, and the per-subproject checkCompilerMessages change.
  • Compile fixes after the picks (upstream API that EISOP does not have): getPrimaryAnnotationInHierarchy -> getAnnotationInHierarchy, hasPrimaryAnnotation -> hasAnnotation, and a redundant assert removed in ValueLiteral.

The typetools changelog section is inserted below our 3.49.5-eisop2 entry and above 3.49.5-eisop1, so that our changes stay on top; there is also a note about the new parser in our own entry.

Testing

On JDK 21: compileJava, compileTestJava, assembleForJavac, :framework:test (384 tests), and :checker:test for the Nullness, Lock, Index, ResourceLeak and Initialization tests, plus :dataflow:test, all pass. jtreg sortwarnings, nullness/storeInBytecode and nullness/annotatedForScope pass. The full suite has not been run locally; CI will cover it.

🤖 Generated with Claude Code

mernst and others added 13 commits September 30, 2026 22:10
Co-authored-by: Abhijit Kulkarni <[email protected]>
Co-authored-by: Suzanne Millstein <[email protected]>
Copilot AI balanced review requested due to automatic review settings October 1, 2026 02:44

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The dataflow manual rename breaks EISOP release packaging, and several updated API comments are factually incorrect.

Review effort: Balanced
Findings: 1 High severity · 7 Low severity

Open (8)
What changed in this PR

Syncs Checker Framework 3.50.0 into EISOP while retaining fork-specific release and build behavior.

Changes:

  • Imports upstream parser, framework, checker, dataflow, and documentation updates.
  • Vendors AFU sources and tests without enabling its Gradle project.
  • Updates build scripts, CI configuration, Docker definitions, and test assets.
File Description
annotation-file-utilities/​** Adds vendored AFU implementation, documentation, and tests.
javacutil/​** Adds javac-based parsing support and documentation updates.
framework/​src/​** Integrates parser/API changes and upstream documentation cleanup.
framework/​tests/​** Updates parser, flow, value, and test documentation cases.
framework-test/​** Updates test harness documentation and formatting.
dataflow/​src/​** Updates dataflow expressions, CFG APIs, and analysis documentation.
dataflow/​manual/​** Renames and updates the dataflow manual.
checker/​src/​** Ports checker behavior and parser package changes.
checker/​tests/​** Updates checker regression inputs and expected diagnostics.
checker/​jtreg/​** Updates jtreg inputs for formatting and parser behavior.
checker/​bin-devel/​** Updates Docker generation, scripts, and compatibility expectations.
checker-util/​** Adds checker-util distribution copying and documentation cleanup.
checker-qual/​** Updates public qualifier Javadocs.
docs/​** Imports upstream manual and contributor updates.
buildSrc/​** Updates AFU executable paths and formatting.
.azure/​**, .travis.yml Updates scheduled and legacy CI configuration.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread dataflow/manual/Makefile
wmdietl and others added 9 commits September 30, 2026 22:53
… typetools' release and CI additions

Remove the doLast copy in checker-util/build.gradle: assembleForJavac already
copies checker-util.jar into checker/dist, and the closure fails with the
Gradle configuration cache.

Do not adopt typetools' release.gradle, which belongs to its own release
process, or the added checkNullness -PnullnessAll step of typecheck-part2.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01GW8C4XvQcY7RQkVAqStDB6
AFU is not a Gradle subproject here, so the root project's Spotless java
format now targets annotation-file-utilities/src.  The tests/ directory is
not formatted: its .goal files are the expected output of annotating the
inputs, which depends on the exact formatting of the inputs.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01GW8C4XvQcY7RQkVAqStDB6
…er note in the typetools 3.50.0 changelog entry

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01GW8C4XvQcY7RQkVAqStDB6
The typetools release renamed the dataflow manual to
checker-framework-dataflow-manual; the release.xml targets still looked for
dataflow.pdf, so a release build would have omitted the manual.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01GW8C4XvQcY7RQkVAqStDB6
Its stricter lint rules report 330 findings in the release scripts and require
reformatting them and two skill scripts, which makes make style-check fail.
Keep ruff's default configuration, as before the merge; adopting the stricter
rules goes together with updating the release scripts.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01GW8C4XvQcY7RQkVAqStDB6
@wmdietl
wmdietl merged commit 5549ed6 into typetools-3.50.0-fixes Oct 1, 2026
46 checks passed
@wmdietl
wmdietl deleted the typetools-3.50.0-merge branch October 1, 2026 11:58
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

Successfully merging this pull request may close these issues.

4 participants