Skip to content

typetools/checker-framework 3.50.0 release - #2188

Merged
wmdietl merged 5 commits into
masterfrom
typetools-3.50.0-fixes
Oct 1, 2026
Merged

wmdietl merged 5 commits into
masterfrom
typetools-3.50.0-fixes

Conversation

@wmdietl

@wmdietl wmdietl commented Oct 1, 2026

Copy link
Copy Markdown
Member

Merges the typetools Checker Framework 3.50.0 release into EISOP, the second step of the "Updating from a different fork" process in docs/developer/README-eisop.md. The first step, #2186, imported the release into typetools-3.50.0-fixes as one commit that keeps all upstream authors (the companion changes in eisop/jdk #153 and eisop/guava #17 are already merged). This pull request adds our own follow-up commits.

Please merge this pull request with a merge commit, not a squash, so that the import commit with its co-authors stays separate from the follow-ups below.

Commits on top of the import

  1. Move the release version and release tasks to release.gradle. Adopts typetools' new release structure: release.gradle holds releaseVersion, which is the only place the version is set, and build.gradle derives the build version from it. Nightly -SNAPSHOT publishing and -Prelease=true keep working. The Gradle tasks updateVersionNumbers, zip, zipMavenExamples, copyToWebsite and updateCopyMavenExample replace the Ant targets. The version pattern accepts our -eisopN suffix.
  2. Use the Gradle release tasks in the release scripts and remove the Ant files. The Python release scripts and README-release-process.html follow the new structure, keeping our setup (Central Portal publishing with ./gradlew publish -Prelease=true --no-parallel, io.github.eisop coordinates, eisop repositories and URLs). Also fixes a crash of version_number_to_array on -eisopN versions, which would have failed Step 1 of release_push.py.
  3. Adopt typetools' ruff configuration (.ruff.toml) and conform the performance scripts to it. gen-shapes.py and gen-sized-program.py produce byte-identical output for all shapes (checked for 67 argument combinations).
  4. Correct Javadoc wording that was changed incorrectly or ambiguously in the import, from the review comments on typetools/checker-framework 3.50.0 release #2186 (for example mustBeExact was documented backwards).

Things to check or decide

  • AFU release. AFU is not built yet (see Integrate the Annotation File Utilities into our build and port eisop/annotation-tools changes #2187), so our separate release of the Annotation File Utilities from eisop/annotation-tools is kept in the release scripts, marked NO-AFU. Upstream dropped the separate release.
  • Release version. release.gradle keeps releaseVersion = '3.49.5-eisop2', matching the top changelog entry. If the next release should be named after the typetools version it is based on (3.50.0-eisop1), change releaseVersion and the changelog title together.
  • Not exercised. The release scripts were not run as a real release. The version-update task was tested in a throwaway clone, and the zip, buildAll and copyToWebsite tasks only with dry runs and without the manuals. The Python scripts only passed ruff and py_compile.
  • Left out on purpose, as in typetools/checker-framework 3.50.0 release #2186: upstream's JDK-selection rework, extra Error Prone switches, and the per-subproject checkCompilerMessages.

🤖 Generated with Claude Code

wmdietl and others added 5 commits October 1, 2026 07:58
Co-authored-by: Claude Sonnet 5.5 <[email protected]>
Co-authored-by: Michael Ernst <[email protected]>
Co-authored-by: Suzanne Millstein <[email protected]>
Co-authored-by: Damika-Anupama <[email protected]>
Co-authored-by: Vlastimil <[email protected]>
Co-authored-by: Abhijit Kulkarni <[email protected]>
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>
Adapt the release Gradle tasks of the typetools 3.50.0 release, which
replace the Ant targets in docs/developer/release/release.xml, to EISOP.

release.gradle holds releaseVersion, the single source of truth for the
version.  The build's version is releaseVersion with -Prelease=true and
releaseVersion-SNAPSHOT otherwise, so nightly snapshots keep working and
a release no longer edits the version to drop -SNAPSHOT.

updateVersionNumbers replaces update-checker-framework-versions.  It
keeps EISOP's behavior: the version regexp accepts the -eisopN suffix,
it also rewrites eisopVersion and \ReleaseInfo, it uses the "d MMM yyyy"
date format, it does not touch docs/examples (Renovate does), and it
fails if a file it rewrites or a marker it keys off is missing.

The zip, copyToWebsite, zipMavenExamples, and updateCopyMavenExample
tasks replace the other Ant targets, with EISOP's file lists (README.md,
front page, quick-start page, favicon, dataflow manual, executable
checker/bin/javac) and EISOP's Maven-example version rewrite.  buildAll
now also builds the manuals; releaseBuild and releaseAndTest are gone.

The Annotation File Utilities are not a subproject yet, so the AFU parts
of these tasks are kept as NO-AFU comments.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: Suzanne Millstein <[email protected]>
…t files

Port the release scripts of the typetools 3.50.0 release to EISOP:
release_build.py and sanity_checks.py call the Gradle tasks of
release.gradle instead of the Ant targets, passing -Prelease=true to
every Gradle command that builds release artifacts, and the scripts
use pathlib and pass the repository's ruff configuration.

Keep EISOP's adaptations: eisop repositories, URLs, and directories;
ReleaseError; no Maven Central staging in release_push.py (publishing
stays a manual step); EISOP's message keys in the sanity checks; the
link-checker exit-status check; and the Annotation File Utilities
release from eisop/annotation-tools, marked NO-AFU.  Comparing release
versions now understands the -eisopN suffix.

Remove release.xml, release.properties, and the include/exclude lists,
which release.gradle and build.gradle replace, and update the
documentation that referred to them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: Suzanne Millstein <[email protected]>
Co-authored-by: Michael Ernst <[email protected]>
…ts to it

The release scripts already conform.  gen-shapes.py and gen-sized-program.py
produce byte-identical output for all shapes (checked for 67 argument
combinations); only their structure and documentation changed.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Co-authored-by: Michael Ernst <[email protected]>
Fix descriptions that said the opposite of what the code does (the
mustBeExact parameter of MethodValAnnotatedTypeFactory, the return value of
InvocationTypeInference.notPertinentToApplicability), documented an enum as a
boolean (WholeProgramInference.updateContracts), and read ungrammatically.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Copilot AI balanced review requested due to automatic review settings October 1, 2026 12:06

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 release page misstates AFU packaging, the Maven example archive layout regresses, and a new documented command is invalid.

Review effort: Balanced
Findings: 1 Medium severity · 1 Low severity

Open (2)
What changed in this PR

Imports Checker Framework 3.50.0 into EISOP and adapts the release process while retaining EISOP publishing and separate AFU releases.

Changes:

  • Imports upstream framework, checker, parser, and test changes.
  • Replaces Ant release targets with Gradle tasks.
  • Adopts Ruff and corrects imported Javadocs.
File Description
checker/​**, framework/​**, dataflow/​**, javacutil/​** Imports upstream implementation and tests.
annotation-file-utilities/​** Adds upstream AFU sources without build integration.
release.gradle, build.gradle Defines release versions, archives, and website tasks.
docs/​developer/​release/​** Migrates release scripts and documentation to Gradle.
.ruff.toml, .claude/​skills/​cf-performance/​** Adds Ruff configuration and conforms scripts.
docs/​** Updates manuals, release pages, examples, and changelog.
Remaining build and test files Integrates upstream 3.50.0 across repository modules.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread release.gradle
description = 'Creates a zip archive for the Maven examples.'
archiveFileName = 'mvn-examples.zip'
destinationDirectory = layout.projectDirectory.dir(providers.gradleProperty('cfWebsite'))
from('docs/examples/MavenExample')

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Valid. Upstream's release.gradle writes the example files at the archive root, and we took that over unchanged in the import. Our previous mvn-examples.zip had a top-level maven-examples-<version>/ directory, so we will restore it in the follow-up pull request for the next typetools release (an EISOP adaptation of one line in zipMavenExamples).

Comment thread docs/checker-framework-webpage.html
@wmdietl
wmdietl force-pushed the typetools-3.50.0-fixes branch 2 times, most recently from 23702fe to 619af19 Compare October 1, 2026 12:55
@wmdietl
wmdietl merged commit 9d05c3f into master Oct 1, 2026
46 checks passed
@wmdietl
wmdietl deleted the typetools-3.50.0-fixes branch October 1, 2026 13:23
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.

2 participants