)]}'
{
  "log": [
    {
      "commit": "b9073d6a9bf9d94fd2f4d552b542022c1d0e1e02",
      "tree": "47c5b95ea229ca5607b7638ee00965161a29306e",
      "parents": [
        "442c65922ba6e62ed76465a02aea8d5f13feb956"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Tue Nov 10 19:55:35 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Nov 10 19:56:59 2026"
      },
      "message": "Suggest `instanceof Foo\u003c?\u003e foo` even for \"raw\" `instanceof Foo` checks.\n\nPiperOrigin-RevId: 1018422073\n"
    },
    {
      "commit": "442c65922ba6e62ed76465a02aea8d5f13feb956",
      "tree": "3e9832110e87af9de527c09e79f11548398a659b",
      "parents": [
        "032a3157d830f62f02529e7b833e72444e3f5c3c"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Tue Nov 10 19:41:31 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Nov 10 19:42:52 2026"
      },
      "message": "[StatementSwitchToExpressionSwitch] consolidate dead-code deletion to align with javac\u0027s reachability\n\nPiperOrigin-RevId: 1018409780\n"
    },
    {
      "commit": "032a3157d830f62f02529e7b833e72444e3f5c3c",
      "tree": "bfa4c9d54498cb3510dd06a920f3336125c38fcf",
      "parents": [
        "4e8b7acc44fca89b15c0b540db980d798133a31b"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Tue Nov 10 19:25:11 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Nov 10 19:26:47 2026"
      },
      "message": "FutureReturnValueIgnored: check the return type before searching super methods\n\nFor every call whose return value is unused, MATCHER checked for\n@CanIgnoreReturnValue on the method, searched all supertypes for\noverridden methods annotated with @CanIgnoreReturnValue, and ran the\nIGNORED_METHODS matchers before checking whether the method returns a\nFuture at all. Most methods don\u0027t, so checking the return type first\navoids computing the supertype closure and scanning member scopes for\nnearly all calls.\n\nThe matcher is a conjunction of predicates that don\u0027t depend on each\nother and have no side effects other than completing symbols, so\nreordering them doesn\u0027t change its result. getSymbol() having returned a\nMethodSymbol is the only precondition the return type check needs, and\nit already handles void, type variables and error types on its own.\n(On an incomplete classpath, non-Future calls no longer complete the\nsupertypes of the method\u0027s owner, while calls exempted by the earlier\npredicates now walk the supertypes of their return type, which\ncheckLostType() already does for the result type of method invocations.)\n\nPiperOrigin-RevId: 1018394858\n"
    },
    {
      "commit": "4e8b7acc44fca89b15c0b540db980d798133a31b",
      "tree": "9261c8fb9c9a38a99c9f9899c54259c71107b5f7",
      "parents": [
        "40de14d2ec0d54ca179174aedbb8489a2d31e409"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Tue Nov 10 19:07:35 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Nov 10 19:09:07 2026"
      },
      "message": "[StatementSwitchToExpressionSwitch] add tests that show bugs in dead-code deletion after a `return switch`\n\nPiperOrigin-RevId: 1018378769\n"
    },
    {
      "commit": "40de14d2ec0d54ca179174aedbb8489a2d31e409",
      "tree": "1323da7f1f56766c7cd25e79bc14462fdbc69984",
      "parents": [
        "469a98bc44e3f1925b51596a5fb52d4cc6587c26"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Tue Nov 10 13:41:30 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Nov 10 13:42:36 2026"
      },
      "message": "Reformat with latest google-java-format version\n\nPiperOrigin-RevId: 1018142383\n"
    },
    {
      "commit": "469a98bc44e3f1925b51596a5fb52d4cc6587c26",
      "tree": "6c8ebe8df1017296418b78ab3aa233677a104475",
      "parents": [
        "de06209ba78bc5a63997e46e96e7c741c570abc0"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Tue Nov 10 00:08:59 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Nov 10 00:10:01 2026"
      },
      "message": "Add `BootclasspathShadowing` check for classes that shadow platform or bootclasspath types.\n\nFlag top-level class declarations whose binary name already exists in `StandardLocation.PLATFORM_CLASS_PATH` or `StandardLocation.SYSTEM_MODULES`.\n\nPiperOrigin-RevId: 1017715940\n"
    },
    {
      "commit": "de06209ba78bc5a63997e46e96e7c741c570abc0",
      "tree": "55c4ddee6d791a586e5220a8deba7bf66c4a8be0",
      "parents": [
        "483abedf60c10d895777d9c7e895cc8e2813d5c9"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Mon Nov 09 23:52:36 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Nov 09 23:58:58 2026"
      },
      "message": "[IfChainToSwitch] [RefactorSwitch] share the dead-code deletion in `IfChainToSwitch` and `RefactorSwitch`\n\nPiperOrigin-RevId: 1017703201\n"
    },
    {
      "commit": "483abedf60c10d895777d9c7e895cc8e2813d5c9",
      "tree": "a6acc09c778d7b54cad59210b0e012b1b36d79a8",
      "parents": [
        "6e4957592d4626e7bba4b037b36c23c7c5ff5368"
      ],
      "author": {
        "name": "Error Prone Team",
        "email": "java-team-github-bot@google.com",
        "time": "Mon Nov 09 23:46:28 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Nov 09 23:47:55 2026"
      },
      "message": "Strip underscore when test names begin with `test_`.\n\nPiperOrigin-RevId: 1017698280\n"
    },
    {
      "commit": "6e4957592d4626e7bba4b037b36c23c7c5ff5368",
      "tree": "d87e3bd0b881ab322cbf41a1dd5c670c77bec9a9",
      "parents": [
        "c130a822ad9906b56a283c8639152e9029c3e9ed"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Nov 09 23:36:56 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Nov 09 23:39:04 2026"
      },
      "message": "Bump the dependencies group with 3 updates\n\nBumps the dependencies group with 3 updates: [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer), [com.google.googlejavaformat:google-java-format](https://github.com/google/google-java-format) and [joda-time:joda-time](https://github.com/JodaOrg/joda-time).\n\nUpdates `org.apache.maven.plugins:maven-enforcer-plugin` from 3.6.3 to 3.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/apache/maven-enforcer/releases\"\u003eorg.apache.maven.plugins:maven-enforcer-plugin\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.7.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003e⚠️ Deprecated\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eName enforcer 4.0.0 as the release that removes the legacy rule API (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1047\"\u003e#1047\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecate the evaluateBeanshell rule (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1034\"\u003e#1034\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New features and improvements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImprove RequireUpperBoundDeps error message (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1059\"\u003e#1059\u003c/a\u003e) \u003ca href\u003d\"https://github.com/Sambuddha-Jana\"\u003e\u003ccode\u003e@​Sambuddha-Jana\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://issues.apache.org/jira/browse/MENFORCER-433\"\u003e[MENFORCER-433]\u003c/a\u003e - Add banPropertyPrefix rule to ban Maven properties by configured prefixes (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1039\"\u003e#1039\u003c/a\u003e) \u003ca href\u003d\"https://github.com/juliojgd\"\u003e\u003ccode\u003e@​juliojgd\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove RequireUpperBoundDeps error message (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1022\"\u003e#1022\u003c/a\u003e) \u003ca href\u003d\"https://github.com/dhruv9b\"\u003e\u003ccode\u003e@​dhruv9b\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://issues.apache.org/jira/browse/ENFORCER-939\"\u003e[ENFORCER-939]\u003c/a\u003e - Support enforcer.skip without a POM (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1021\"\u003e#1021\u003c/a\u003e) \u003ca href\u003d\"https://github.com/dhruv9b\"\u003e\u003ccode\u003e@​dhruv9b\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix RequireUpperBoundDeps with test-scope mediation (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1064\"\u003e#1064\u003c/a\u003e) \u003ca href\u003d\"https://github.com/efegokdemir\"\u003e\u003ccode\u003e@​efegokdemir\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix EnforcerRuleCache concurrency across plugin realms (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1057\"\u003e#1057\u003c/a\u003e) \u003ca href\u003d\"https://github.com/efegokdemir\"\u003e\u003ccode\u003e@​efegokdemir\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eResolve plugins on copies of the model plugins (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1046\"\u003e#1046\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://issues.apache.org/jira/browse/MENFORCER-517\"\u003e[MENFORCER-517]\u003c/a\u003e - requireReleaseDeps and bannedDependencies  checks now also for optional dependencies (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1025\"\u003e#1025\u003c/a\u003e) \u003ca href\u003d\"https://github.com/schwarfl\"\u003e\u003ccode\u003e@​schwarfl\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: avoid misleading legacy warning for unknown rules (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1037\"\u003e#1037\u003c/a\u003e) \u003ca href\u003d\"https://github.com/efegokdemir\"\u003e\u003ccode\u003e@​efegokdemir\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erequireFilesExist should accept a symbolic link (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1031\"\u003e#1031\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix/916 require same versions for managed report plugins (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1024\"\u003e#1024\u003c/a\u003e) \u003ca href\u003d\"https://github.com/dhruv9b\"\u003e\u003ccode\u003e@​dhruv9b\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: correct enforceBytecodeVersion excludes filtering (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/990\"\u003e#990\u003c/a\u003e) \u003ca href\u003d\"https://github.com/w3lld1\"\u003e\u003ccode\u003e@​w3lld1\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix: support custom \u003c!-- raw HTML omitted --\u003e output for 9 enforcer rules that ignored getMessage() (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1004\"\u003e#1004\u003c/a\u003e) \u003ca href\u003d\"https://github.com/btpka3\"\u003e\u003ccode\u003e@​btpka3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRequireFilesExist should accept a file reached through .. (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/977\"\u003e#977\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1011\"\u003e#1011\u003c/a\u003e) \u003ca href\u003d\"https://github.com/AzazelSensei\"\u003e\u003ccode\u003e@​AzazelSensei\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e📝 Documentation updates\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate the evaluateBeanshell rule (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1034\"\u003e#1034\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ejavadoc grammar (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1013\"\u003e#1013\u003c/a\u003e) \u003ca href\u003d\"https://github.com/elharo\"\u003e\u003ccode\u003e@​elharo\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRestore the common wording on the download page (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1008\"\u003e#1008\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u0026lt;a id\u0026gt; rather than \u0026lt;a name\u0026gt; for the FAQ anchors (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1010\"\u003e#1010\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert the FAQ from FML to Markdown (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1009\"\u003e#1009\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove obsolete note, clean up typos (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1001\"\u003e#1001\u003c/a\u003e) \u003ca href\u003d\"https://github.com/scordio\"\u003e\u003ccode\u003e@​scordio\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd enforceBytecodeVersion to rules index (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/983\"\u003e#983\u003c/a\u003e) \u003ca href\u003d\"https://github.com/omribz156\"\u003e\u003ccode\u003e@​omribz156\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md + SECURITY.md security-model pointer for scanner discoverability (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/989\"\u003e#989\u003c/a\u003e) \u003ca href\u003d\"https://github.com/potiuk\"\u003e\u003ccode\u003e@​potiuk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e👻 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore SLF4J 2.x in Dependabot (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1062\"\u003e#1062\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove redundant rat configuration (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1061\"\u003e#1061\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix ATR project name (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1060\"\u003e#1060\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse push for PR Automation (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1058\"\u003e#1058\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse workflow_run for PR check (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1056\"\u003e#1056\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd project metadata for ATR (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1044\"\u003e#1044\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse ReaderInputStream builder in RequireTextFileChecksum (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1052\"\u003e#1052\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse Resolver RemoteRepository in BannedRepositories (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1051\"\u003e#1051\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd PR check workflow (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1053\"\u003e#1053\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace plexus-utils StringUtils with commons-lang3 in enforcer-rules (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1048\"\u003e#1048\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-enforcer/commit/465ebf280e7f7efd9acf9f524b114df69a33c524\"\u003e\u003ccode\u003e465ebf2\u003c/code\u003e\u003c/a\u003e [maven-release-plugin] prepare release enforcer-3.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-enforcer/commit/b24b05c33fd23e710d28e663b83311377be6f3e2\"\u003e\u003ccode\u003eb24b05c\u003c/code\u003e\u003c/a\u003e Fix test-scope mediation in RequireUpperBoundDeps\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-enforcer/commit/2b75dd32499dc971ca990ba5b62d564f3709122b\"\u003e\u003ccode\u003e2b75dd3\u003c/code\u003e\u003c/a\u003e Improve RequireUpperBoundDeps error message (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1059\"\u003e#1059\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-enforcer/commit/b519cd0372a170ef29b8318f251f7d5067972a21\"\u003e\u003ccode\u003eb519cd0\u003c/code\u003e\u003c/a\u003e Fix EnforcerRuleCache concurrency across plugin realms (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1055\"\u003e#1055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-enforcer/commit/f6222345ba1fbce5839ad45dd8ba650d2e052d31\"\u003e\u003ccode\u003ef622234\u003c/code\u003e\u003c/a\u003e Ignore SLF4J 2.x in Dependabot\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-enforcer/commit/5a9ebca1b513ea6c1276f40dee7c8b9288fc569c\"\u003e\u003ccode\u003e5a9ebca\u003c/code\u003e\u003c/a\u003e Remove redundant rat configuration\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-enforcer/commit/e8512d0095bd082db1e933315b6f9d020b113464\"\u003e\u003ccode\u003ee8512d0\u003c/code\u003e\u003c/a\u003e Fix ATR project name\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-enforcer/commit/08605b22b95923741b9da272987eb96d2c10850e\"\u003e\u003ccode\u003e08605b2\u003c/code\u003e\u003c/a\u003e Use push for PR Automation\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-enforcer/commit/fbe1ae506c1defdb2d80d3a8298342905d68f912\"\u003e\u003ccode\u003efbe1ae5\u003c/code\u003e\u003c/a\u003e Use workflow_run for PR check (\u003ca href\u003d\"https://redirect.github.com/apache/maven-enforcer/issues/1056\"\u003e#1056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-enforcer/commit/b1d59aa6cc14579577c723b0b2b8c875e463773b\"\u003e\u003ccode\u003eb1d59aa\u003c/code\u003e\u003c/a\u003e Bump commons-codec:commons-codec from 1.22.1 to 1.23.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/apache/maven-enforcer/compare/enforcer-3.6.3...enforcer-3.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `com.google.googlejavaformat:google-java-format` from 1.37.0 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/google/google-java-format/releases\"\u003ecom.google.googlejavaformat:google-java-format\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.0.0\u003c/h2\u003e\n\u003cp\u003egoogle-java-format 2.0.0 replaces the formatter\u0027s layout engine, and makes some improvements to lambda formatting (\u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/19\"\u003e#19\u003c/a\u003e). This release also adds an optional cleanup pass that makes small non-whitespace changes, which is enabled by default.\u003c/p\u003e\n\u003cp\u003eBecause of these changes, 2.0.0 reformats more existing code than a typical release. We recommend reformatting your codebase in a single commit when upgrading.\u003c/p\u003e\n\u003ch2\u003eFormatting changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eA lambda that is the only argument of a call is now kept on the same line as the call, instead of starting on a new line with an extra level of indentation (\u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/19\"\u003e#19\u003c/a\u003e):\u003c/p\u003e\n\u003cpre lang\u003d\"java\"\u003e\u003ccode\u003eexecutor.submit(() -\u0026gt; {\n  doSomething();\n});\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eText blocks are now indented as part of the main formatting pass, so their indentation is correct even with \u003ccode\u003e--skip-reflowing-long-strings\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed indentation of comments after \u003ccode\u003eassert\u003c/code\u003e, enum constants, \u003ccode\u003efor\u003c/code\u003e initializers, \u003ccode\u003etry\u003c/code\u003e resources, multi-catch clauses, and type arguments.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eCleanups\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded a \u003ccode\u003e--cleanup\u003c/code\u003e flag, enabled by default, for small non-whitespace changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eremoving redundant semicolons\u003c/li\u003e\n\u003cli\u003eremoving empty annotation parentheses (\u003ccode\u003e@Foo()\u003c/code\u003e → \u003ccode\u003e@Foo\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eremoving parentheses around a single untyped lambda parameter (\u003ccode\u003e(x) -\u0026gt; ...\u003c/code\u003e → \u003ccode\u003ex -\u0026gt; ...\u003c/code\u003e) (\u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/762\"\u003e#762\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eCleanups only apply to the ranges being formatted. Use \u003ccode\u003e--cleanup\u003dfalse\u003c/code\u003e to only change whitespace (and the existing \u003ccode\u003e--skip-sorting-imports\u003c/code\u003e, \u003ccode\u003e--skip-removing-unused-imports\u003c/code\u003e, and \u003ccode\u003e--skip-reordering-modifiers\u003c/code\u003e flags for the other non-whitespace changes).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen formatting a range with \u003ccode\u003e--lines\u003c/code\u003e or \u003ccode\u003e--offset\u003c/code\u003e and cleanups enabled, unformatted statements outside the range are re-indented to match the formatted output, so an edit that adds or removes a level of nesting doesn\u0027t leave the surrounding code misaligned. Blank lines left behind by cleanups are removed.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eConfiguration\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e--max-line-length\u003dN\u003c/code\u003e sets the column limit (default 100) (\u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/425\"\u003e#425\u003c/a\u003e). (This flag was introduced in \u003ca href\u003d\"https://github.com/google/google-java-format/releases/tag/v1.37.0\"\u003ev1.37.0\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eLanguage support\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport value classes and value records (\u003ca href\u003d\"https://openjdk.org/jeps/401\"\u003eJEP 401: Value Objects (Preview)\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eJavadoc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStrip trailing asterisks before \u003ccode\u003e*/\u003c/code\u003e (\u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/67\"\u003e#67\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003ePreserve relative indentation in \u003ccode\u003e\u0026lt;pre\u0026gt;{@code ...}\u003c/code\u003e blocks without leading \u003ccode\u003e*\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eJoin hyphenated words broken across lines.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eLong strings\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen formatting a range with \u003ccode\u003e--lines\u003c/code\u003e or \u003ccode\u003e--offset\u003c/code\u003e, only long string literals in the requested range are reflowed (\u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/1114\"\u003e#1114\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eEscaped backslashes (e.g. \u003ccode\u003e\\\\t\u003c/code\u003e in a Windows path or a regular expression) are no longer split when reflowing long string literals (\u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/1186\"\u003e#1186\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/1253\"\u003e#1253\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/1439\"\u003e#1439\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFailures while reflowing long strings are reported as errors instead of crashing or hanging the CLI (\u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/1439\"\u003e#1439\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eOther fixes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/246202f548df50e63159e95912d42ddb5411a93a\"\u003e\u003ccode\u003e246202f\u003c/code\u003e\u003c/a\u003e Release google-java-format 2.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/e01cd0279e4e1525048204b0deffd8771ffa21f1\"\u003e\u003ccode\u003ee01cd02\u003c/code\u003e\u003c/a\u003e Only reflow long strings in the requested lines when partially formatting.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/7e4696dd6b965d7f73e20a80f852f51fadf3b8a6\"\u003e\u003ccode\u003e7e4696d\u003c/code\u003e\u003c/a\u003e Don\u0027t split escaped backslashes when reflowing long string literals.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/7cfa88bb525778dcd5cd4d6fda672ac357cc91b4\"\u003e\u003ccode\u003e7cfa88b\u003c/code\u003e\u003c/a\u003e Fix the flag name in the error for using --dry-run with --replace.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/044bbe618eb3853a1902e9b704d723658c99366e\"\u003e\u003ccode\u003e044bbe6\u003c/code\u003e\u003c/a\u003e Bundle commonmark in the Eclipse plugin.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/722d074791787034c35d15adc785bf4d0f6ace21\"\u003e\u003ccode\u003e722d074\u003c/code\u003e\u003c/a\u003e Report string wrapping failures without crashing or hanging the CLI.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/93bb96d40cd52801399e8ed23a09feb822f49e35\"\u003e\u003ccode\u003e93bb96d\u003c/code\u003e\u003c/a\u003e Add tests demonstrating unclosed Javadoc inline tags leaving comments unforma...\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/2980bad61507c0cbea612fe6df8cdd98a003ac39\"\u003e\u003ccode\u003e2980bad\u003c/code\u003e\u003c/a\u003e Join hyphenated words broken across lines in Javadoc comments.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/0452ffde75c9fd09181e055825d9be9d0c0c99ea\"\u003e\u003ccode\u003e0452ffd\u003c/code\u003e\u003c/a\u003e Use text blocks for multi-line expected output in layout tests.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/0b3c7427bdda30af5ef498605bab0009ddfdc34d\"\u003e\u003ccode\u003e0b3c742\u003c/code\u003e\u003c/a\u003e Don\u0027t hug on the first line of statement headers that are followed by a body.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/google/google-java-format/compare/v1.37.0...v2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `joda-time:joda-time` from 2.15.0 to 2.15.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/JodaOrg/joda-time/releases\"\u003ejoda-time:joda-time\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v2.15.1\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href\u003d\"https://www.joda.org/joda-time/changes-report.html#a2.15.1\"\u003echange notes\u003c/a\u003e for more information.\u003c/p\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate time zone data to 2026fgtz by \u003ca href\u003d\"https://github.com/jodastephen\"\u003e\u003ccode\u003e@​jodastephen\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/JodaOrg/joda-time/pull/850\"\u003eJodaOrg/joda-time#850\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/JodaOrg/joda-time/compare/v2.15.0...v2.15.1\"\u003ehttps://github.com/JodaOrg/joda-time/compare/v2.15.0...v2.15.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/JodaOrg/joda-time/commit/d451f7cf7b56628d8e390c649ecc865235701727\"\u003e\u003ccode\u003ed451f7c\u003c/code\u003e\u003c/a\u003e Release v2.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/JodaOrg/joda-time/commit/a2292e2e5e2183d0e72b17b7fd7304d6040ad78f\"\u003e\u003ccode\u003ea2292e2\u003c/code\u003e\u003c/a\u003e Update time zone data to 2026fgtz (\u003ca href\u003d\"https://redirect.github.com/JodaOrg/joda-time/issues/850\"\u003e#850\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/JodaOrg/joda-time/compare/v2.15.0...v2.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e\n\nFixes https://github.com/google/error-prone/pull/6323\n\nCOPYBARA_INTEGRATE_REVIEW\u003dhttps://github.com/google/error-prone/pull/6323 from google:dependabot/maven/dependencies-b807014d44 d8b39794c1470187c7ecd700bc7af1a8ef1ee95a\nPiperOrigin-RevId: 1017691541\n"
    },
    {
      "commit": "c130a822ad9906b56a283c8639152e9029c3e9ed",
      "tree": "2861ed9957aae8324ece7f5561874317109a8bae",
      "parents": [
        "f6c86cfc5e62fa1dfb6f6ce33c7b906ad6e8463b"
      ],
      "author": {
        "name": "Éamonn McManus",
        "email": "emcmanus@google.com",
        "time": "Mon Nov 09 23:13:24 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Nov 09 23:14:47 2026"
      },
      "message": "Adjust the documentation of `@NoAutoboxing` to clarify that it forbids both boxing and unboxing.\n\nThis was motivated by an AI finding that this Refaster rule is inaccurate:\n```java\nstatic final class MaskAndCastToByte {\n  @BeforeTemplate\n  byte before(long value) {\n    return (byte) (value \u0026 0xFF);\n  }\n\n  @AfterTemplate\n  byte after(long value) {\n    return (byte) value;\n  }\n}\n```\n\nIt fails in this example:\n```java\n// shortList is List\u003cShort\u003e:\n// Before:\nbytes[i] \u003d (byte) (shortList.get(i) \u0026 0xFF);\n\n// After:\nbytes[i] \u003d (byte) shortList.get(i);\n```\n\nThat\u0027s because `Short` cannot be cast to `byte`. The AI proposed adding `@NoAutoboxing` to the `before` method parameter, which initially puzzled me because what we want to disallow is auto-**un**boxing.\n\nPiperOrigin-RevId: 1017674371\n"
    },
    {
      "commit": "f6c86cfc5e62fa1dfb6f6ce33c7b906ad6e8463b",
      "tree": "1f43c8a22714f963d1c2f37904a75bece8b82c6b",
      "parents": [
        "3828151f2d6b2c2dff9381f8ab2134af997f4806"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Sun Nov 08 23:56:25 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Sun Nov 08 23:58:40 2026"
      },
      "message": "Add Gson and Guava TypeToken classes to WellKnownMutability.\n\nBoth `com.google.gson.reflect.TypeToken` (stores only `final` immutable fields: `Class`, `int`, and canonicalized `Type` values) and `com.google.common.reflect.TypeToken` (stores `final Type runtimeType` and `@LazyInit` `TypeResolver` caches backed by `ImmutableMap`) are effectively immutable, analogous to `com.google.inject.TypeLiteral`.\n\nPiperOrigin-RevId: 1016911369\n"
    },
    {
      "commit": "3828151f2d6b2c2dff9381f8ab2134af997f4806",
      "tree": "e018665e26b242449192fc2ac4eaabee050c057e",
      "parents": [
        "49ce4edd433f58d81d65e837038021ca7169ada9"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Sat Nov 07 00:06:21 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Sat Nov 07 00:08:08 2026"
      },
      "message": "Migrate AnnotationNames and matcher class constants to ClassName.\n\nMigrates class and annotation name constants in `AnnotationNames`, `InjectMatchers`, and `JUnitMatchers` from `String` to `ClassName`, and updates callers across `check_api` and `core` (including `ProtobufMatchers` and `WellKnownMutability` callers) to use `ClassName`-accepting `ASTHelpers`, `Matchers`, `TypePredicates`, `MoreAnnotations`, and `SuggestedFix` APIs instead of string-based type and annotation lookups.\n\nAdds `ClassName` overloads to `MoreAnnotations` (`getAnnotation`, `getStringValue`, `getBooleanValue`, `getEnumValue`, `getEnumValues`, `getStrings`, `getTypes`, `getTypeValue`).\n\nPiperOrigin-RevId: 1015929325\n"
    },
    {
      "commit": "49ce4edd433f58d81d65e837038021ca7169ada9",
      "tree": "1ba5f536bf233461ef3dd4f197a0466830c443e8",
      "parents": [
        "754348f207c7b52803967946f4bdb07be03d0ee6"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Fri Nov 06 22:32:47 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Nov 06 22:34:10 2026"
      },
      "message": "Optimize `SuppressionInfo`.\n\nIt looks like most of the gains here come from the change to `isGenerated`, though the exact locations reported in the profiles don\u0027t necessarily seem fully reliable at this low volume of samples.\n\nPiperOrigin-RevId: 1015860846\n"
    },
    {
      "commit": "754348f207c7b52803967946f4bdb07be03d0ee6",
      "tree": "36b4292b255b581bcd0eeacc3228c3069e25d010",
      "parents": [
        "f242fed02dbd28312cec8aae396cae8e646c3359"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Fri Nov 06 19:41:26 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Nov 06 19:42:55 2026"
      },
      "message": "Automated rollback of commit a1750c372709493b79f5647ea39d487c6cb0c95a.\n\n*** Reason for rollback ***\n\nBreaks handling of while and do-while loops\n\n*** Original change description ***\n\nHandle parenthesized expressions in `LoopConditionChecker`.\n\nUnwrap parentheses before resolving the updated variable symbol in `UpdateScanner`, and look through `ParenthesizedTree` in `LoopConditionVisitor`.\n\nFixes https://github.com/google/error-prone/issues/6213\n\nPiperOrigin-RevId: 1015725323\n"
    },
    {
      "commit": "f242fed02dbd28312cec8aae396cae8e646c3359",
      "tree": "66af6fcf56243c0b1cbd3e3d38c52cf659bb3e3d",
      "parents": [
        "c00080e87760d8b7e458775c8ffbba1ce48ac659"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Fri Nov 06 03:32:24 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Nov 06 03:33:42 2026"
      },
      "message": "Use `SourceVersion` APIs instead of `Character.isJavaIdentifier*`.\n\n- `SourceVersion.isIdentifier` is exactly equivalent to our hand-rolled equivalent.\n- `SourceVersion.isName` is slightly stricter, forbidding keywords. That leads to small behavioral differences (shown in the tests), and it forces us to check for keywords like `int` before the step that rejects `!isName` strings.\n\nThe only thing that seems a little iffy here is that `isName` behavior can vary by version, though that currently matters only for [8 vs. 9+](https://github.com/openjdk/jdk/blob/d4d72b0a353b2280f9a566af611668911ce2c02d/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java#L712), and I especially hope that no one has named a _class_ \"`_`.\" If this somehow bites us, we could go back to manually splitting on periods and just switching from our custom `isJavaIdentifier` to `isIdentifier`.\n\n(followup to unknown commit)\n\nPiperOrigin-RevId: 1015179673\n"
    },
    {
      "commit": "c00080e87760d8b7e458775c8ffbba1ce48ac659",
      "tree": "c19e6b415c108941db48d02080409795f9250346",
      "parents": [
        "bc0bd7b7cadf5f94937695217e4cf142e2e87add"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Thu Nov 05 20:16:08 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Nov 05 20:18:20 2026"
      },
      "message": "ParameterName: skip calls without comments between their arguments\n\nAll comments contain a `/` (except comments written with a unicode escape for\n`/`, which are ignored), so if there are none between the start of the argument\nlist and the end of the last argument, there can\u0027t be any parameter comments,\nand the check now returns early.\n\nOn a large chrome Java target, reduces check runtime by 20% (1108ms to 892ms).\n\nPiperOrigin-RevId: 1014900937\n"
    },
    {
      "commit": "bc0bd7b7cadf5f94937695217e4cf142e2e87add",
      "tree": "2df12451a2d782f83aa75a4a16ac37a7b608182a",
      "parents": [
        "af359f3740f8a90bdd539e583c554ffeac5d9161"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Thu Nov 05 15:35:16 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Nov 05 15:37:27 2026"
      },
      "message": "AbstractReturnValueIgnored: check specializedMatcher before isAllowed\n\nCheck whether the return value is expected to be used (isCheckReturnValue)\nbefore checking whether the surrounding context allows it to be ignored\n(UnusedReturnValueMatcher#isAllowed: mocking calls, exception tests,\netc.). The latter walks enclosing statements and runs several matchers,\nand its result only matters when the former matches, which is rare.\n\nBoth are side-effect-free matchers, so the conjunction is unchanged;\nthis speeds up CheckReturnValue and all other subclasses of\nAbstractReturnValueIgnored.\n\nPiperOrigin-RevId: 1014686003\n"
    },
    {
      "commit": "af359f3740f8a90bdd539e583c554ffeac5d9161",
      "tree": "bd77c1797a3a54e2265f5c6d3929203eae6010bb",
      "parents": [
        "9a55710fb085b76fb93ad6cbf552f50bb01c0822"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Thu Nov 05 14:34:00 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Nov 05 14:36:35 2026"
      },
      "message": "Replace `\\p{javaJavaIdentifierStart}` and `\\p{javaJavaIdentifierPart}` regexes in `TypeToString` and `NamedParameterComment`\n\nReplace `TypeToString.JAVA_CLASS_NAME_PATTERN` with `isJavaClassName(String)` and `NamedParameterComment.PARAMETER_COMMENT_PATTERN` with `parseParameterComment(String)`, checking identifier characters directly via `Character.isJavaIdentifierStart` and `Character.isJavaIdentifierPart`.\n\nPiperOrigin-RevId: 1014652999\n"
    },
    {
      "commit": "9a55710fb085b76fb93ad6cbf552f50bb01c0822",
      "tree": "1c613d8db530c83be60b459aaae4d8290cc1b74c",
      "parents": [
        "750332fe20e0ce942ded382af0234cdf266ca4aa"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Thu Nov 05 12:47:19 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Nov 05 12:48:27 2026"
      },
      "message": "Evaluate `MethodMatchers` constraints in selectivity order and memoize `Name` lookups.\n\n`MethodMatchers`\u0027s fluent builder hierarchy requires callers to specify the receiver or owner class constraint (`onClass`, `onExactClass`, `onDescendantOf`, `anyClass`) before `.named(...)` or `.namedAnyOf(...)`. Previously, `MethodMatcherImpl` stored constraints in an `ImmutableList\u003cConstraint\u003e` in builder call order and allocated a `MatchState` wrapper on each evaluation, so every `MethodMatcher` evaluated its class `TypePredicate` (`isSubtype`, `isSameType`, `typeFromString`) before checking the method\u0027s simple name or parameter count. When `onExactClass(String)` or `onDescendantOf(String)` ran on the first method invocation in a compilation unit, `Suppliers.typeFromString` resolved and completed the target class symbol from the classpath even if no method with the target name ever appeared in the compilation unit.\n\nAdditionally, `MethodMatcherImpl.named(String)`, `namedAnyOf`, and `forClass(String)` compared names using `Name.contentEquals(String)` or `Name.toString()`, which decodes the `Name`\u0027s UTF-8 bytes into a new `String` on each call.\n\nReplace the constraint list and per-call `MatchState` allocation with one field per kind of constraint (the fluent API only allows setting each once), evaluated in order of increasing cost regardless of the order they were specified in: the method kind (any, instance, static, or constructor), the set of expected `Name`s, the parameter count, regex name predicates, the receiver/owner `TypePredicate`, and parameter type predicates. Memoize `Name` lookups via `VisitorState.memoize` and compare `Name`s with `equals`. Delete `BaseMethodMatcher`, `MatchState`, `MethodMatchState`, and `ConstructorMatchState`, which are now unused.\n\nPiperOrigin-RevId: 1014601352\n"
    },
    {
      "commit": "750332fe20e0ce942ded382af0234cdf266ca4aa",
      "tree": "769bbcfdf2c420c3b53c755e25340a7cc2f10072",
      "parents": [
        "714a48ef9c01645dbefa7dcfcc5bb258b1d4e07d"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Thu Nov 05 07:57:38 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Nov 05 07:59:34 2026"
      },
      "message": "OptionalNotPresent: compute the truthiness of conditions lazily\n\nComputing the truthiness of every if condition and conditional\nexpression dominated the cost of this check, mostly due to matching\nmethod invocations against ConstantExpressions\u0027 known pure methods.\n\nDefer computing the truthiness of enclosing conditions with\nSuppliers.memoize so that conditions are only evaluated when a branch\ncontains an Optional.get() or Optional.orElseThrow() call.\n\nPiperOrigin-RevId: 1014449740\n"
    },
    {
      "commit": "714a48ef9c01645dbefa7dcfcc5bb258b1d4e07d",
      "tree": "ccd617e1dcd90978173f8d423f1e48f53fedc8ef",
      "parents": [
        "968b7662200b9dcb7843181038e4e29807189e0b"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Wed Nov 04 22:21:39 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 22:27:22 2026"
      },
      "message": "GuardedBy: avoid stream overhead when looking up guard values\n\nGuardedByUtils.getGuardValues is called for every identifier and member\nselect in each analyzed method, and the stream pipeline it built\ndominated its cost, since nearly all symbols have no annotations at all.\nUse a loop instead, returning early for symbols without annotations.\n\nThe annotations are visited in the same order with the same filter, and\ntheir values are added to the set in the same order, so the result is\nunchanged.\n\nPiperOrigin-RevId: 1014135097\n"
    },
    {
      "commit": "968b7662200b9dcb7843181038e4e29807189e0b",
      "tree": "3dc7e8eede57e3b8e2030c90e754f989965e2f88",
      "parents": [
        "0245c35148e07803894ec830f0b7ca03dd69240e"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Wed Nov 04 22:20:22 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 22:24:24 2026"
      },
      "message": "UnusedMethod: avoid creating TreePaths and scanning method bodies for classes\n\n* getVisibleClasses used a TreePathScanner without using the path, and\n  scanned method bodies. Use a TreeScanner, and skip method bodies:\n  classes declared in methods are local or anonymous, so canBeRemoved is\n  always true for them (and for classes nested in them).\n* FilterUsedMethods doesn\u0027t use the current path either, so make it a\n  TreeScanner.\n\nThese don\u0027t change which classes are made visible or which methods are\nreported.\n\nPiperOrigin-RevId: 1014134219\n"
    },
    {
      "commit": "0245c35148e07803894ec830f0b7ca03dd69240e",
      "tree": "6a195be48791b93f3b29339d6bc1c53b300657cd",
      "parents": [
        "faba32533ed047e82d00070f0899f443d590f578"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Wed Nov 04 22:18:22 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 22:21:11 2026"
      },
      "message": "Check isEffectivelyPrivate before findSuperMethods in ASTHelpers.canBeRemoved\n\ncanBeRemoved(Symbol, VisitorState) searched all supertypes for\noverridden methods before checking whether the symbol is effectively\nprivate. Most methods aren\u0027t effectively private, and checking that\nfirst is a cheap walk of enclosing owners that avoids computing the\nsupertype closure and scanning member scopes.\n\nisEffectivelyPrivate is pure, so the conjunction is unchanged (other\nthan possibly avoiding completing supertypes on an incomplete classpath\nwhen the symbol isn\u0027t effectively private anyway).\n\nPiperOrigin-RevId: 1014132739\n"
    },
    {
      "commit": "faba32533ed047e82d00070f0899f443d590f578",
      "tree": "1ed5fc4e4f60e4bf071f28d56931014579a86a36",
      "parents": [
        "c4875a80e3b91996e3c5617070f76eba8987050d"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Wed Nov 04 22:16:11 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 22:17:47 2026"
      },
      "message": "Check method signature before owner type in Matchers.SERIALIZATION_METHODS\n\nSERIALIZATION_METHODS checked whether the enclosing class is a subtype\nof Serializable before checking the method\u0027s name, parameters and return\ntype. Most methods aren\u0027t named after the five serialization methods,\nand checking the method signature first avoids the subtype check for\nthem.\n\nBoth parts are side-effect-free predicates on already-completed symbols,\nso reordering them doesn\u0027t change the result.\n\nPiperOrigin-RevId: 1014131034\n"
    },
    {
      "commit": "c4875a80e3b91996e3c5617070f76eba8987050d",
      "tree": "59fb99a16984ab2d126ae15d225122a0d5bdd13e",
      "parents": [
        "74fbc3138b187ec606843577217e60589e41774d"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Wed Nov 04 19:31:11 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 19:32:44 2026"
      },
      "message": "AlmostJavadoc: skip tokenizing files without candidate comments\n\nThis change first does a cheap scan of the source, and only tokenizes the file\nif it contains a non-Javadoc block comment, or a line comment ending in `*/`,\nwhich contains one of the tags that the check looks for. Files containing\nunicode escapes always take the slow path, since escapes can form comment\ndelimiters. It also checks whether a comment would produce a fix before parsing\nthe Javadoc of the tree it\u0027s attached to, since the former is much cheaper.\n\nFor a large chrome java target, this reduces the time spent in\nAlmostJavadoc from 858ms to 59ms (-93%).\n\nPiperOrigin-RevId: 1014007846\n"
    },
    {
      "commit": "74fbc3138b187ec606843577217e60589e41774d",
      "tree": "f1213efa8660bd44c55fb408485aab89ee0ff48b",
      "parents": [
        "a4a973a7f3b4ca7fdaccf79788bd1e93288e83f5"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Wed Nov 04 18:12:40 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 18:15:47 2026"
      },
      "message": "Check method names before other method matcher constraints\n\nMethod matchers evaluated their constraints in the order they were declared,\nwhich is usually the class (often a subtype check) and then the name. Most\nmethod invocations are rejected by the name, which is much cheaper to check.\n\nName constraints are side-effect free, so testing them first doesn\u0027t change the\nresult (other than possibly avoiding a completion failure when a class\nconstraint would have been rejected anyway).\n\nOn a large chrome java target (medians of 3 runs), this reduces the time spent\nin DoNotCall from 751ms to 526ms (-30%), and the total time spent in Error Prone\nchecks from 42.0s to 38.0s (-9.5%).\n\nPiperOrigin-RevId: 1013949224\n"
    },
    {
      "commit": "a4a973a7f3b4ca7fdaccf79788bd1e93288e83f5",
      "tree": "5cc76e57e081a0120b67e78d664a86ca20bb40b4",
      "parents": [
        "5e9502b51e2e94709f53b0ee55cd284487c55758"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Wed Nov 04 18:00:32 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 18:01:43 2026"
      },
      "message": "DoNotCall: index third-party matchers by method name\n\nReplaces the linear scan over `THIRD_PARTY_METHODS` on every method invocation\nand method reference with an `ImmutableListMultimap\u003cString, ThirdPartyMethod\u003e`\nkeyed by the method\u0027s simple name.\n\nOn a large chrome java target (median of 5 runs), this reduces the time spent\nin DoNotCall from 533ms (with MethodMatcherImpl name-first ordering) to 447ms\n(-16%, or -44% vs the 794ms baseline).\n\nPiperOrigin-RevId: 1013938826\n"
    },
    {
      "commit": "5e9502b51e2e94709f53b0ee55cd284487c55758",
      "tree": "8cc945b29cf9d88d7103319040053dce3bd5c3aa",
      "parents": [
        "cc6fd9ab73bf3505f3fc7f8d68cb982ca89e9c2f"
      ],
      "author": {
        "name": "agrieve",
        "email": "agrieve@google.com",
        "time": "Wed Nov 04 16:57:22 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 16:58:58 2026"
      },
      "message": "Reduce per-call overhead of getEndPosition and getTextFromComment\n\n* `ErrorProneEndPosTable.getEndPosition(pos, unit)`, which backs\n  `VisitorState#getEndPosition`, created a new bound `MethodHandle` on every\n  call. It now invokes the existing static handle instead.\n* `Comments.getTextFromComment` compiled a regex on every call\n  (`String#replaceAll`). It now uses precompiled `java.util.regex` patterns,\n  which is equivalent.\n\nSpeeds up ParameterName on a large chrome target by 10% (892ms to 800ms).\n\nPiperOrigin-RevId: 1013894384\n"
    },
    {
      "commit": "cc6fd9ab73bf3505f3fc7f8d68cb982ca89e9c2f",
      "tree": "6433dd434e49e21c9f86b92efc56dea80f8f5ce6",
      "parents": [
        "161c201cc415581d52800fa261e2b5966f00a285"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Wed Nov 04 15:36:14 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 15:37:15 2026"
      },
      "message": "Check for hashCode without equals in EqualsHashCode.\n\nUpdate `EqualsHashCode` to also flag classes that override `Object.hashCode` without overriding `Object.equals`, gated by the `-XepOpt:EqualsHashCode:CheckHashCodeWithoutEquals` flag (enabled by default). Exempt `abstract` `hashCode()` declarations on `@AutoValue` and `@AutoOneOf` classes (such as `@Memoized` `hashCode()`, where AutoValue still generates both `equals` and `hashCode`), no-op `super.hashCode()` and `System.identityHashCode(this)` overrides, and single-statement throwing `hashCode()` implementations.\n\nSee https://github.com/google/error-prone/issues/129.\n\nPiperOrigin-RevId: 1013841414\n"
    },
    {
      "commit": "161c201cc415581d52800fa261e2b5966f00a285",
      "tree": "4d5e3685576fcd1088c46634f920483b6aa79e54",
      "parents": [
        "89bab06ae7b7ee1673c3a8dde5588ccb6a81b075"
      ],
      "author": {
        "name": "Vladimir Sitnikov",
        "email": "sitnikov.vladimir@gmail.com",
        "time": "Wed Nov 04 13:48:54 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 13:50:07 2026"
      },
      "message": "Document that `ASTHelpers.getSymbol(Tree)` returns null for a parenthesized expression\n\n`ASTHelpers.getSymbol((x))` returns null where `getSymbol(x)` returns the symbol of `x`, and the Javadoc did not say so. A caller that forgets `stripParentheses` gets no symbol for a parenthesized operand, including the expression of every `synchronized` statement, and usually treats that as \"not a variable\" without any error.\n\nAs discussed in #6223, the method keeps returning null: callers treat a non-null result as a sign that the tree itself is the identifier, member select, or invocation, and some cast it or pass it to `getReceiver`, which throws `IllegalStateException` when given a parenthesized expression. The Javadoc now states the null result and points at `stripParentheses(Tree)`. A new test in `ASTHelpersTest` pins it, with that reason in its comment, so that a change making `getSymbol` look through parentheses fails it.\n\nThe old Javadoc also promised null when a compilation error left the symbol unresolved. Error Prone does not run checks on a compilation unit with errors, and an unresolved invocation, `new` expression, or member reference throws `IllegalArgumentException` from its typed overload instead of returning null. The comment now states what the code returns: null for an identifier or member select that javac left without a symbol. The inline comment in `getSymbol` names module names as one such case.\n\n`check_api/pom.xml` lists `ASTHelpersTest.java` in `testExcludes`, so the GitHub Maven build does not compile or run the new test. I compiled and ran `ASTHelpersTest` by hand on JDK 25.0.4: all 67 tests pass. With a `ParenthesizedTree` case added at the top of `getSymbol(Tree)`, the new test fails with `expected: null` / `but was : x`. `javadoc -Xdoclint:all` on `ASTHelpers.java` reports no errors; both `{@link}` targets resolve.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nFixes https://github.com/google/error-prone/pull/6295\n\nCOPYBARA_INTEGRATE_REVIEW\u003dhttps://github.com/google/error-prone/pull/6295 from vlsi:claude/javadoc-getsymbol-improvement-ba25fb 4f5b2414d86f9d53421600a95b890fa98c560e7c\nPiperOrigin-RevId: 1013782394\n"
    },
    {
      "commit": "89bab06ae7b7ee1673c3a8dde5588ccb6a81b075",
      "tree": "77f6c376cc19846a7f2fc7d1e9a132f17e30bd83",
      "parents": [
        "b94d627d1ce40d84e1ad84bd9bd2e09ab7832873"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Wed Nov 04 11:00:24 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 11:06:46 2026"
      },
      "message": "Unwrap parenthesized operands in `NonAtomicVolatileUpdate`.\n\nFixes https://github.com/google/error-prone/issues/6214\n\nPiperOrigin-RevId: 1013701398\n"
    },
    {
      "commit": "b94d627d1ce40d84e1ad84bd9bd2e09ab7832873",
      "tree": "07990de4a5d7bab1cdad4c74aa1cdf30f5db5740",
      "parents": [
        "d59febd0e61e1d28b47f26b1ea03abce10f81ef3"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Wed Nov 04 10:50:38 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 10:51:45 2026"
      },
      "message": "Document policy on false positives, false negatives, and synthetic bug reports.\n\nError Prone checks do not aim to be 100% sound or have a zero percent false positive rate on arbitrary syntax. Document in `CONTRIBUTING.md` and `docs/criteria.md` how false-positive and false-negative reports are evaluated (based on real-world likelihood, check severity, and implementation complexity) and note that automated or agentic reports of false negatives on synthetic code patterns are unlikely to be prioritized.\n\nPiperOrigin-RevId: 1013696633\n"
    },
    {
      "commit": "d59febd0e61e1d28b47f26b1ea03abce10f81ef3",
      "tree": "ce1a182033d8ae3f707f7bc83c9c1b3b4f38b07c",
      "parents": [
        "71d7cdad60cd097f7e214f0b4462812241c728b7"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Wed Nov 04 08:37:00 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 08:38:30 2026"
      },
      "message": "Recognize compile-time constants in `LoopConditionChecker`.\n\nTreat identifiers and member selects with compile-time constant values as constant expressions when scanning loop conditions, so loops like `for (int i \u003d 0; i \u003c MAX; )` are recognized when `i` is never modified.\n\nFixes https://github.com/google/error-prone/issues/5826\n\nPiperOrigin-RevId: 1013627639\n"
    },
    {
      "commit": "71d7cdad60cd097f7e214f0b4462812241c728b7",
      "tree": "4ae5eeced8ad687302a4138cc7965eb9435407d5",
      "parents": [
        "a1750c372709493b79f5647ea39d487c6cb0c95a"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Wed Nov 04 02:30:56 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 02:35:02 2026"
      },
      "message": "Use `ASTHelpers.constValue` in `TimeUnitConversionChecker`.\n\n`TimeUnitConversionChecker` previously checked for constant arguments by parsing `state.getSourceForNode(arg0)` with `Longs.tryParse`, which missed `long` literals with an `L` suffix, numeric literals with underscores, and constant expressions.\n\nFixes https://github.com/google/error-prone/issues/6279\n\nPiperOrigin-RevId: 1013450518\n"
    },
    {
      "commit": "a1750c372709493b79f5647ea39d487c6cb0c95a",
      "tree": "c7225f909b08449fb13fb8dc83aaf13b2a308aad",
      "parents": [
        "7db5faeee73443dc8ec16d3c16de208c5537f894"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Wed Nov 04 02:30:49 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 02:32:41 2026"
      },
      "message": "Handle parenthesized expressions in `LoopConditionChecker`.\n\nUnwrap parentheses before resolving the updated variable symbol in `UpdateScanner`, and look through `ParenthesizedTree` in `LoopConditionVisitor`.\n\nFixes https://github.com/google/error-prone/issues/6213\n\nPiperOrigin-RevId: 1013450475\n"
    },
    {
      "commit": "7db5faeee73443dc8ec16d3c16de208c5537f894",
      "tree": "73a2da85c8cf027d7638447fb5cceab5619f99e7",
      "parents": [
        "6c801f09145ba36d11bdc9fff9c446db5b75ebe6"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Wed Nov 04 02:26:28 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Nov 04 02:27:57 2026"
      },
      "message": "Unwrap parenthesized initializers in `InlineTrivialConstant`.\n\nFixes https://github.com/google/error-prone/issues/6217\n\nPiperOrigin-RevId: 1013448520\n"
    },
    {
      "commit": "6c801f09145ba36d11bdc9fff9c446db5b75ebe6",
      "tree": "8bd8a1a80adc156a881d0dc79cc0abf93246f0a8",
      "parents": [
        "eb67f129df0be4d5afd5ad35d48140749999f183"
      ],
      "author": {
        "name": "Error Prone Team",
        "email": "java-team-github-bot@google.com",
        "time": "Tue Nov 03 21:43:08 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Nov 03 21:44:40 2026"
      },
      "message": "# Expand immutable collection factories recognized by `CompileTimeConstantExpressionMatcher`\n\nAdds Guava\u0027s `ImmutableMap.of`, `ImmutableMultiset.of`, `ImmutableSortedSet.of`, and `ImmutableSortedMap.of`, as well as Java 9+\u0027s `List.of`, `Set.of`, and `Map.of` to the set of factory methods recognized to create compile-time constant expressions.\n\nPiperOrigin-RevId: 1013262640\n"
    },
    {
      "commit": "eb67f129df0be4d5afd5ad35d48140749999f183",
      "tree": "ca79126e323ececf34b6471f3da36a4236f3aecf",
      "parents": [
        "ea88595a9fe955e72498e2a37ad1beb922e935d4"
      ],
      "author": {
        "name": "Error Prone Team",
        "email": "java-team-github-bot@google.com",
        "time": "Tue Nov 03 21:10:54 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Nov 03 21:12:56 2026"
      },
      "message": "# Update docs for `CompileTimeConstant` expressions\n\nAlign `CompileTimeConstant.md` and the Javadoc in `CompileTimeConstantExpressionMatcher` with the compile-time constant expression types the code currently supports.\n\nPiperOrigin-RevId: 1013238827\n"
    },
    {
      "commit": "ea88595a9fe955e72498e2a37ad1beb922e935d4",
      "tree": "5df461f787c203097622b5e37b7d3c894c1b0a88",
      "parents": [
        "e188bc5ce81975299588346248e6616f340443eb"
      ],
      "author": {
        "name": "Error Prone Team",
        "email": "java-team-github-bot@google.com",
        "time": "Tue Nov 03 09:23:34 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Nov 03 09:25:07 2026"
      },
      "message": "Enforce @MustBeClosed on method and constructor references.\n\nMustBeClosedChecker only checked method invocations and constructor calls, so\npassing a reference to a `@MustBeClosed` method or constructor (such as\n`foo::mustBeClosedMethod` or `MustBeClosedResource::new`) to a functional\ninterface whose method is not annotated with `@MustBeClosed` (such as\n`Supplier\u003cCloseable\u003e`) bypassed the check and let the resource leak.\n\nMethod and constructor references are now checked like lambdas: they are\nreported unless the functional interface method is annotated with\n`@MustBeClosed`. As with lambdas, references passed to exception-testing APIs\nsuch as `assertThrows` are exempt. StreamResourceLeak shares this logic, so it\nnow also reports references such as `Files::lines`. The new behavior can be\ndisabled with `-XepOpt:MustBeClosedChecker:MatchMethodReferences\u003dfalse`.\n\nPiperOrigin-RevId: 1012810317\n"
    },
    {
      "commit": "e188bc5ce81975299588346248e6616f340443eb",
      "tree": "68e0441e04b0ad9d448752bdd2ad74512ca7b05e",
      "parents": [
        "7cc815f951187fe14eb3a9831fdb4ff5a67beb12"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Mon Nov 02 20:39:55 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Nov 02 20:41:28 2026"
      },
      "message": "Add DiscouragedHashKey, a configurable check for types that shouldn\u0027t be hash keys.\n\nSome types have well-defined `equals` and `hashCode` methods but still shouldn\u0027t be used as elements of hash-based sets or keys of hash-based maps, for example because they are expensive to hash or because equivalent instances don\u0027t compare equal. Matching all such types in general (for example all protocol buffers) has too many false positives, but projects know about specific problematic types.\n\n`DiscouragedHashKey` reports hash-based containers keyed on types (or subtypes of types) configured with `-XepOpt:DiscouragedHashKey:Types` (for example, `-XepOpt:DiscouragedHashKey:Types\u003dcom.google.protobuf.MessageLite` matches any protocol buffer message used as a hash key). It only reports hash keys, not equality or containment, which are fine for these types. It reuses the use-site matching from `UndefinedEquals` and `URLEqualsHashCode`, including hash-based containers created by `Stream.collect`.\n\nPiperOrigin-RevId: 1012370518\n"
    },
    {
      "commit": "7cc815f951187fe14eb3a9831fdb4ff5a67beb12",
      "tree": "dfffe85bf9a6753b55ceed9b3952580cac530fb0",
      "parents": [
        "7f73cee3cf7a9ad2fbcfdcb549adbe7272d8aa20"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Mon Nov 02 20:23:44 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Nov 02 20:25:53 2026"
      },
      "message": "Rebuild URLEqualsHashCode on AbstractEqualsHashCodeUsageChecker.\n\n`URLEqualsHashCode` had its own logic for finding hash-based containers of `java.net.URL`, which only handled `Set`, `Map`, and `BiMap`. Using the shared engine from `UndefinedEquals` makes it consistent with the other equality checks: it now also reports `URL` keys of `Multimap`s and `Multiset`s, hash-based containers created by `Stream.collect`, direct equality, equality assertions, and methods like `Collection#contains`, and no longer reports identity and sorted containers, which don\u0027t call `equals` or `hashCode`.\n\nPiperOrigin-RevId: 1012359425\n"
    },
    {
      "commit": "7f73cee3cf7a9ad2fbcfdcb549adbe7272d8aa20",
      "tree": "08e008c70487d1c4370dd8086356d8ac78057a10",
      "parents": [
        "ea4c6df5dafef16a9e8c45d7d4b045c1d79e8d33"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Mon Nov 02 18:33:06 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Nov 02 18:34:08 2026"
      },
      "message": "Bump Guava to 33.8.0.\n\nRELNOTES\u003dn/a\nPiperOrigin-RevId: 1012276939\n"
    },
    {
      "commit": "ea4c6df5dafef16a9e8c45d7d4b045c1d79e8d33",
      "tree": "7f6b1be5a267cf1e4c96773b47560da5edfba3c2",
      "parents": [
        "04640b8b5677c06118ce1395948551ba8589146c"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Mon Nov 02 11:50:51 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Nov 02 11:52:50 2026"
      },
      "message": "Avoid calling `SuggestedFixes.compilesWithFix` in `FieldCanBeFinal`\n\n`SuggestedFixes.compilesWithFix` re-parses and re-attributes the entire compilation unit for each candidate field, which can be slow on large files with many candidate fields that are conditionally initialized.\n\nInstead, check that blank candidate fields are initialized once in straight-line code (including plain blocks and `catch`-less `try` blocks) in the class or instance initializer or in every non-delegating constructor, before any reads of the field or `return` statements. Fields initialized across branching control flow (such as `if`/`else`) are no longer matched.\n\nPiperOrigin-RevId: 1012050702\n"
    },
    {
      "commit": "04640b8b5677c06118ce1395948551ba8589146c",
      "tree": "90cf746bab0eae83b240c0b15768c480953b5b96",
      "parents": [
        "6034e0957fcd38eaef37de08f8aa63c247523555"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Mon Nov 02 00:50:47 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Nov 02 00:52:42 2026"
      },
      "message": "Update SafeRE to 1.1.0\n\nhttps://github.com/eaftan/safere/releases/tag/v1.1.0\n\nhttps://github.com/google/error-prone/issues/6230\n\nPiperOrigin-RevId: 1011773206\n"
    },
    {
      "commit": "6034e0957fcd38eaef37de08f8aa63c247523555",
      "tree": "6e5820bb47439b3045fb51abb17869a81c3c9d17",
      "parents": [
        "3cc36d5125e62d697466991771d471d5ea1b8864"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Nov 01 14:45:42 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Sun Nov 01 14:47:08 2026"
      },
      "message": "Bump the dependencies group across 1 directory with 8 updates\n\nBumps the dependencies group with 8 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) | `3.6.0` | `3.6.1` |\n| [org.sonatype.central:central-publishing-maven-plugin](https://github.com/sonatype-nexus-community/central-publishing-maven-plugin) | `0.11.0` | `0.12.0` |\n| [io.github.java-diff-utils:java-diff-utils](https://github.com/java-diff-utils/java-diff-utils) | `4.17` | `4.18` |\n| com.google.testparameterinjector:test-parameter-injector | `1.24` | `1.25` |\n| [com.github.ben-manes.caffeine:caffeine](https://github.com/ben-manes/caffeine) | `3.3.0` | `3.3.1` |\n| [com.ibm.icu:icu4j](https://github.com/unicode-org/icu) | `78.3` | `79.1` |\n| [org.threeten:threeten-extra](https://github.com/ThreeTen/threeten-extra) | `1.10.0` | `1.11.0` |\n| [com.google.code.gson:gson](https://github.com/google/gson) | `2.14.0` | `2.15.0` |\n\nUpdates `org.apache.maven.plugins:maven-surefire-plugin` from 3.6.0 to 3.6.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/apache/maven-surefire/releases\"\u003eorg.apache.maven.plugins:maven-surefire-plugin\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.6.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003e🚀 New features and improvements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eGroup module path heuristics in a single class ModulePathJpmsArguments (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3541\"\u003e#3541\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix out of memory errors with big JUnit 4 suites (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3511\"\u003e#3511\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3515\"\u003e#3515\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://issues.apache.org/jira/browse/SUREFIRE-3459\"\u003e[SUREFIRE-3459]\u003c/a\u003e - Allow opting out of StackWalker stack capture (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3493\"\u003e#3493\u003c/a\u003e) \u003ca href\u003d\"https://github.com/goutamadwant\"\u003e\u003ccode\u003e@​goutamadwant\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix IllegalAccessError when the main module requires JUnit (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3532\"\u003e#3532\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3538\"\u003e#3538\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix groups and excludedGroups being ignored when TestNG is on the classpath (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3534\"\u003e#3534\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon\u0027t let runOrder replace JUnit orderers set elsewhere (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3529\"\u003e#3529\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3530\"\u003e#3530\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix groups and excludedGroups for Spock and Jupiter tests when JUnit 4 is on the classpath (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3468\"\u003e#3468\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3503\"\u003e#3503\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3517\"\u003e#3517\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIssue \u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3462\"\u003e#3462\u003c/a\u003e TestNG extension onStart/onFinish called too many times (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3470\"\u003e#3470\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix forked JVM hanging forever when the exit timeout fires (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3500\"\u003e#3500\u003c/a\u003e), Possible NPE if a thread ends while building the thread dump (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3506\"\u003e#3506\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop rewriting the class report for every nested suite (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3511\"\u003e#3511\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3514\"\u003e#3514\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix IllegalAccessError in the forked JVM on Java 8 and 11 (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3511\"\u003e#3511\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3513\"\u003e#3513\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://issues.apache.org/jira/browse/SUREFIRE-3460\"\u003e[SUREFIRE-3460]\u003c/a\u003e - Don\u0027t NPE when StackWalkerStrategy inits with a null TCCL (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3464\"\u003e#3464\u003c/a\u003e) \u003ca href\u003d\"https://github.com/kalayciburak\"\u003e\u003ccode\u003e@​kalayciburak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://issues.apache.org/jira/browse/SUREFIRE-3465\"\u003e[SUREFIRE-3465]\u003c/a\u003e - Match includes/excludes the way the scanner does (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3466\"\u003e#3466\u003c/a\u003e) \u003ca href\u003d\"https://github.com/orion0616\"\u003e\u003ccode\u003e@​orion0616\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[Issue-3456] Apply systemPropertyVariables before the fork initializes networking (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3467\"\u003e#3467\u003c/a\u003e) \u003ca href\u003d\"https://github.com/joseluisll\"\u003e\u003ccode\u003e@​joseluisll\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix inverted filter predicate in ForkStarter#readTestClassNames (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3453\"\u003e#3453\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e📝 Documentation updates\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eClean up deprecated parameters and fix TestNG parallel modes (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3452\"\u003e#3452\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3519\"\u003e#3519\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMerge the two timeout extension pages into one. The guide and the example page covered the same things twice. (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3520\"\u003e#3520\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop the Source Xref menu items (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3479\"\u003e#3479\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e👻 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUse push for PR Automation (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3536\"\u003e#3536\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse workflow_run for PR check (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3531\"\u003e#3531\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd project metadata for ATR (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3522\"\u003e#3522\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd PR check workflow (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3507\"\u003e#3507\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix ForkCountIT failing on Windows with Maven 3.10.0 (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3509\"\u003e#3509\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix ITs for Maven 3.10.0 (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3508\"\u003e#3508\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slawekjaranowski\"\u003e\u003ccode\u003e@​slawekjaranowski\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate surefire-its fixture from maven-verifier to maven-executor (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3484\"\u003e#3484\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePort the IT scripts from BeanShell to Groovy (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3480\"\u003e#3480\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop the Source Xref menu items (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3479\"\u003e#3479\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplement getOutputPath() and deprecate getOutputName() (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3469\"\u003e#3469\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🔧 Build\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDrop the Maven 3.9.0 CI job (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3525\"\u003e#3525\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix ForkCountIT failing on Windows with Maven 3.10.0 (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3509\"\u003e#3509\u003c/a\u003e) \u003ca href\u003d\"https://github.com/olamy\"\u003e\u003ccode\u003e@​olamy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix test due to uneven Maven API migration, Maven 4 build (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3502\"\u003e#3502\u003c/a\u003e) \u003ca href\u003d\"https://github.com/sebtiem\"\u003e\u003ccode\u003e@​sebtiem\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep Dependabot off JUnit 6 (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3497\"\u003e#3497\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eVerify the plugin on Maven 3.9.0 (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3478\"\u003e#3478\u003c/a\u003e) \u003ca href\u003d\"https://github.com/slachiewicz\"\u003e\u003ccode\u003e@​slachiewicz\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-surefire/commit/5bf0dcf034365f13dc7fdc7a2776e936e636bc52\"\u003e\u003ccode\u003e5bf0dcf\u003c/code\u003e\u003c/a\u003e [maven-release-plugin] prepare release surefire-3.6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-surefire/commit/7f73580532a727e1bde77e102aa227bc3e278d1a\"\u003e\u003ccode\u003e7f73580\u003c/code\u003e\u003c/a\u003e Bump doxiaVersion from 2.1.0 to 2.2.0 (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3542\"\u003e#3542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-surefire/commit/ab7ce2fdf38aa53d63e8d0fbaab65e8facab54fe\"\u003e\u003ccode\u003eab7ce2f\u003c/code\u003e\u003c/a\u003e Bump org.testng:testng (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3539\"\u003e#3539\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-surefire/commit/ff3b768b8b92b005b784ccb451ddf44f43c0d932\"\u003e\u003ccode\u003eff3b768\u003c/code\u003e\u003c/a\u003e Group module path heuristics in ModulePathJpmsArguments (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3541\"\u003e#3541\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-surefire/commit/a343e4dcb51db7fa68cb09a2572dd8c25f4e5304\"\u003e\u003ccode\u003ea343e4d\u003c/code\u003e\u003c/a\u003e Fix IllegalAccessError when the main module requires JUnit (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3532\"\u003e#3532\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3538\"\u003e#3538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-surefire/commit/907a2e21646744b5f4707e4b0b4a05b4358e9c83\"\u003e\u003ccode\u003e907a2e2\u003c/code\u003e\u003c/a\u003e Fix groups and excludedGroups being ignored when TestNG is on the classpath (...\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-surefire/commit/cc69b3c4cda47b35815b30a4bc3ff92988492f4a\"\u003e\u003ccode\u003ecc69b3c\u003c/code\u003e\u003c/a\u003e Use push for PR Automation\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-surefire/commit/b11901901c43d65c7f3888f7c311c39803c6cdfd\"\u003e\u003ccode\u003eb119019\u003c/code\u003e\u003c/a\u003e Install the JUnit Platform provider for the ITs (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3535\"\u003e#3535\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-surefire/commit/2cdec2eec3f7e10832e99905fe08ac01a1ff99c1\"\u003e\u003ccode\u003e2cdec2e\u003c/code\u003e\u003c/a\u003e Don\u0027t let runOrder replace JUnit orderers set elsewhere (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3529\"\u003e#3529\u003c/a\u003e) (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3530\"\u003e#3530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/apache/maven-surefire/commit/1e4f6b98e4076e120455e37b1049688354f49a11\"\u003e\u003ccode\u003e1e4f6b9\u003c/code\u003e\u003c/a\u003e Use workflow_run for PR check (\u003ca href\u003d\"https://redirect.github.com/apache/maven-surefire/issues/3531\"\u003e#3531\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/apache/maven-surefire/compare/surefire-3.6.0...surefire-3.6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `org.sonatype.central:central-publishing-maven-plugin` from 0.11.0 to 0.12.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/sonatype-nexus-community/central-publishing-maven-plugin/releases\"\u003eorg.sonatype.central:central-publishing-maven-plugin\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003erelease-0.12.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add \u003ccode\u003eskipUpload\u003c/code\u003e property to build the bundle without uploading it by \u003ca href\u003d\"https://github.com/madpah\"\u003e\u003ccode\u003e@​madpah\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/sonatype-nexus-community/central-publishing-maven-plugin/pull/6\"\u003esonatype-nexus-community/central-publishing-maven-plugin#6\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: remove local repository files from the bundle on Maven 3.10 by \u003ca href\u003d\"https://github.com/madpah\"\u003e\u003ccode\u003e@​madpah\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/sonatype-nexus-community/central-publishing-maven-plugin/pull/3\"\u003esonatype-nexus-community/central-publishing-maven-plugin#3\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/sonatype-nexus-community/central-publishing-maven-plugin/compare/release-0.11.1...release-0.12.0\"\u003ehttps://github.com/sonatype-nexus-community/central-publishing-maven-plugin/compare/release-0.11.1...release-0.12.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.11.1\u003c/h2\u003e\n\u003cp\u003eThis is the same source as for release \u003ccode\u003e0.11.0\u003c/code\u003e, but now open-sourced under Apache-2.0 license.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/sonatype-nexus-community/central-publishing-maven-plugin/commits/release-0.11.1\"\u003ehttps://github.com/sonatype-nexus-community/central-publishing-maven-plugin/commits/release-0.11.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/sonatype-nexus-community/central-publishing-maven-plugin/commits/release-0.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `io.github.java-diff-utils:java-diff-utils` from 4.17 to 4.18\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/releases\"\u003eio.github.java-diff-utils:java-diff-utils\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ejava-diff-utils-parent-4.18\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eChanges and new Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReject a chunk that ends exactly at the end of the target by \u003ca href\u003d\"https://github.com/youdie006\"\u003e\u003ccode\u003e@​youdie006\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/232\"\u003ejava-diff-utils/java-diff-utils#232\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve equal rows from patches by \u003ca href\u003d\"https://github.com/Chanakan5591\"\u003e\u003ccode\u003e@​Chanakan5591\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/233\"\u003ejava-diff-utils/java-diff-utils#233\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePropagate I/O failures from UnifiedDiffWriter by \u003ca href\u003d\"https://github.com/jakezwang\"\u003e\u003ccode\u003e@​jakezwang\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/234\"\u003ejava-diff-utils/java-diff-utils#234\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: improve coverage for com.github.difflib.patch.Chunk by \u003ca href\u003d\"https://github.com/zemeng2015\"\u003e\u003ccode\u003e@​zemeng2015\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/235\"\u003ejava-diff-utils/java-diff-utils#235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRead and write empty hunk ranges the way diff and git do by \u003ca href\u003d\"https://github.com/youdie006\"\u003e\u003ccode\u003e@​youdie006\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/236\"\u003ejava-diff-utils/java-diff-utils#236\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTrack line-count changes when applying fuzzy patches by \u003ca href\u003d\"https://github.com/PHJ2000\"\u003e\u003ccode\u003e@​PHJ2000\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/238\"\u003ejava-diff-utils/java-diff-utils#238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePreserve header-only Git file boundaries in UnifiedDiffReader by \u003ca href\u003d\"https://github.com/JimmyLiuJia\"\u003e\u003ccode\u003e@​JimmyLiuJia\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/240\"\u003ejava-diff-utils/java-diff-utils#240\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/youdie006\"\u003e\u003ccode\u003e@​youdie006\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/232\"\u003ejava-diff-utils/java-diff-utils#232\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/Chanakan5591\"\u003e\u003ccode\u003e@​Chanakan5591\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/233\"\u003ejava-diff-utils/java-diff-utils#233\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/jakezwang\"\u003e\u003ccode\u003e@​jakezwang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/234\"\u003ejava-diff-utils/java-diff-utils#234\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/zemeng2015\"\u003e\u003ccode\u003e@​zemeng2015\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/235\"\u003ejava-diff-utils/java-diff-utils#235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/PHJ2000\"\u003e\u003ccode\u003e@​PHJ2000\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/238\"\u003ejava-diff-utils/java-diff-utils#238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/JimmyLiuJia\"\u003e\u003ccode\u003e@​JimmyLiuJia\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/pull/240\"\u003ejava-diff-utils/java-diff-utils#240\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/compare/java-diff-utils-parent-4.17...java-diff-utils-parent-4.18\"\u003ehttps://github.com/java-diff-utils/java-diff-utils/compare/java-diff-utils-parent-4.17...java-diff-utils-parent-4.18\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/commit/f7cbd4b66276ff39e20bdf0245b57f25badc64cf\"\u003e\u003ccode\u003ef7cbd4b\u003c/code\u003e\u003c/a\u003e [maven-release-plugin] prepare release java-diff-utils-parent-4.18\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/commit/99db90100b85317e00631b918cab8ec77cf4b496\"\u003e\u003ccode\u003e99db901\u003c/code\u003e\u003c/a\u003e added sources plugin again\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/commit/51f74396ca9c11c6f26f6c6852fae63c6fae4bfb\"\u003e\u003ccode\u003e51f7439\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/commit/9a76f4d93c5e3e0aa603f32ff6d42f0d2a4e7bfb\"\u003e\u003ccode\u003e9a76f4d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/issues/240\"\u003e#240\u003c/a\u003e from Xujian66/fix/header-only-file-boundaries\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/commit/83d419d02a11ea5d7570893312cc55e4c5118f19\"\u003e\u003ccode\u003e83d419d\u003c/code\u003e\u003c/a\u003e Preserve header-only Git file boundaries in UnifiedDiffReader\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/commit/9a6f529c5dc514db19539dd625cde4f19f693785\"\u003e\u003ccode\u003e9a6f529\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/issues/238\"\u003e#238\u003c/a\u003e from PHJ2000/fix-fuzzy-patch-size-offset\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/commit/1083d88b82668c54e445e6bcc89a1877e16de9e6\"\u003e\u003ccode\u003e1083d88\u003c/code\u003e\u003c/a\u003e Read and write empty hunk ranges the way diff and git do (\u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/issues/236\"\u003e#236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/commit/92c90c243071414955a143b2ae5fb8335483035c\"\u003e\u003ccode\u003e92c90c2\u003c/code\u003e\u003c/a\u003e test: improve coverage for com.github.difflib.patch.Chunk (\u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/issues/235\"\u003e#235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/commit/1b449dbb98038f04bdc8f7471e4c5268aeb4573b\"\u003e\u003ccode\u003e1b449db\u003c/code\u003e\u003c/a\u003e Propagate I/O failures from UnifiedDiffWriter (\u003ca href\u003d\"https://redirect.github.com/java-diff-utils/java-diff-utils/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/commit/9f805b3e8ebe91dec47122fc099e8b71a67ee9e2\"\u003e\u003ccode\u003e9f805b3\u003c/code\u003e\u003c/a\u003e Track line-count changes when applying fuzzy patches\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/java-diff-utils/java-diff-utils/compare/java-diff-utils-parent-4.17...java-diff-utils-parent-4.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `com.google.testparameterinjector:test-parameter-injector` from 1.24 to 1.25\n\nUpdates `com.github.ben-manes.caffeine:caffeine` from 3.3.0 to 3.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/ben-manes/caffeine/releases\"\u003ecom.github.ben-manes.caffeine:caffeine\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.3.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded a workaround for \u003ccode\u003eForkJoinPool\u003c/code\u003e queue corruption caused by resubmitting a reusable \u003ccode\u003eForkJoinTask\u003c/code\u003e (\u003ca href\u003d\"https://redirect.github.com/ben-manes/caffeine/issues/2021\"\u003e#2021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImproved JCache read performance when using access expiration\u003c/li\u003e\n\u003cli\u003eFixed various minor issues found using AI audits\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ben-manes/caffeine/commit/aabb24230296101f179e425b71bb64d62ded3189\"\u003e\u003ccode\u003eaabb242\u003c/code\u003e\u003c/a\u003e record the prefix-cache and warm-up findings\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ben-manes/caffeine/commit/0117302da894a68e087b7570b14958d17a761113\"\u003e\u003ccode\u003e0117302\u003c/code\u003e\u003c/a\u003e stop JCache access expiry from writing every hit\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ben-manes/caffeine/commit/27fc6b845d7499f8b9b80a3ad65ddfd15a4e77af\"\u003e\u003ccode\u003e27fc6b8\u003c/code\u003e\u003c/a\u003e skip rewriting an unchanged deadline on a read\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ben-manes/caffeine/commit/7f87a7e520aa1612f7dd82bd6a6b07bbd1d508df\"\u003e\u003ccode\u003e7f87a7e\u003c/code\u003e\u003c/a\u003e restore coverage lost to recent fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ben-manes/caffeine/commit/75e2dc01be18acbca0ff3d9384dc33779885119f\"\u003e\u003ccode\u003e75e2dc0\u003c/code\u003e\u003c/a\u003e minor polish\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ben-manes/caffeine/commit/5155a5a9d066ad2932944e2996152c375b76795b\"\u003e\u003ccode\u003e5155a5a\u003c/code\u003e\u003c/a\u003e use nullRef() for null futures rejected by NullAway\u0027s generic inference (\u003ca href\u003d\"https://redirect.github.com/ben-manes/caffeine/issues/2023\"\u003e#2023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ben-manes/caffeine/commit/998978c04bfd5e2183581627283b76ceffcd70c4\"\u003e\u003ccode\u003e998978c\u003c/code\u003e\u003c/a\u003e Avoid reusing a ForkJoinTask for maintenance (fixes \u003ca href\u003d\"https://redirect.github.com/ben-manes/caffeine/issues/2021\"\u003e#2021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ben-manes/caffeine/commit/6999bfd39a708c8489ae8ed87baec423c737c070\"\u003e\u003ccode\u003e6999bfd\u003c/code\u003e\u003c/a\u003e add the Qwen Bailian prefix-cache traces\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ben-manes/caffeine/commit/76dcbb503ce17f190ef24e2229e2d3e25d80d315\"\u003e\u003ccode\u003e76dcbb5\u003c/code\u003e\u003c/a\u003e fix canary test races and misc cleanups\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ben-manes/caffeine/commit/7f46a43c4a942a514235fc86f114746ceba19998\"\u003e\u003ccode\u003e7f46a43\u003c/code\u003e\u003c/a\u003e pad the eviction sizes off the hit path\u0027s lines\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/ben-manes/caffeine/compare/v3.3.0...v3.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `com.ibm.icu:icu4j` from 78.3 to 79.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/unicode-org/icu/releases\"\u003ecom.ibm.icu:icu4j\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eICU 79.1\u003c/h2\u003e\n\u003cp\u003eWe are pleased to announce the release of Unicode® ICU 79. It updates to \u003ca href\u003d\"https://www.unicode.org/versions/Unicode18.0.0/\"\u003eUnicode 18\u003c/a\u003e (\u003ca href\u003d\"https://blog.unicode.org/2026/09/announcing-unicode-standard-version-180.html\"\u003eblog\u003c/a\u003e), including new characters and scripts, emoji, collation \u0026amp; IDNA changes, and corresponding APIs and implementations.\u003c/p\u003e\n\u003cp\u003eIt also updates to \u003ca href\u003d\"https://cldr.unicode.org/downloads/cldr-49\"\u003eCLDR 49\u003c/a\u003e (\u003ca href\u003d\"https://blog.unicode.org/2026/09/unicode-cldr-49-beta-available-for.html\"\u003ebeta blog\u003c/a\u003e) locale data with many additions and corrections.\u003c/p\u003e\n\u003cp\u003eLine break backwards-iteration performance has been significantly improved, fixing a long-standing regression.\u003c/p\u003e\n\u003cp\u003eC++ and Java implementations of the \u003ca href\u003d\"https://www.unicode.org/reports/tr35/tr35-messageFormat.html\"\u003eCLDR MessageFormat 2.0 specification\u003c/a\u003e have been updated to CLDR 49. Some of the API remains in technology preview.\u003c/p\u003e\n\u003cp\u003eICU 79 and CLDR 49 are major releases, including a new version of Unicode and major locale data improvements.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetails: \u003ca href\u003d\"https://unicode-org.github.io/icu/download/79.html\"\u003eICU 79\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDownload: \u003ca href\u003d\"https://github.com/unicode-org/icu/releases/tag/release-79.1\"\u003ereleases/tag/release-79.1\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAPI docs: follow the “Released” links on \u003ca href\u003d\"https://unicode-org.github.io/icu-docs/\"\u003eunicode-org.github.io/icu-docs/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMaven: \u003ca href\u003d\"https://mvnrepository.com/artifact/com.ibm.icu/icu4j/79.1\"\u003ecom.ibm.icu / icu4j / version 79.1\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAttention: \u003ca href\u003d\"https://unicode-org.github.io/icu/download/79.html#attention-future-changes\"\u003eFuture Changes\u003c/a\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWe will phase out cross-version \u003cstrong\u003eJava serialization\u003c/strong\u003e compatibility guarantees for ICU4J starting with the ICU 80 release.\u003c/li\u003e\n\u003cli\u003eFollow the link for details and other planned changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eICU 79 RC\u003c/h2\u003e\n\u003cp\u003eWe are pleased to announce the release candidate for Unicode® ICU 79. It updates to \u003ca href\u003d\"https://www.unicode.org/versions/Unicode18.0.0/\"\u003eUnicode 18\u003c/a\u003e (\u003ca href\u003d\"https://blog.unicode.org/2026/09/announcing-unicode-standard-version-180.html\"\u003eblog\u003c/a\u003e), including new characters and scripts, emoji, collation \u0026amp; IDNA changes, and corresponding APIs and implementations.\u003c/p\u003e\n\u003cp\u003eIt also updates to \u003ca href\u003d\"https://cldr.unicode.org/downloads/cldr-49\"\u003eCLDR 49\u003c/a\u003e (\u003ca href\u003d\"https://blog.unicode.org/2026/09/unicode-cldr-49-beta-available-for.html\"\u003ebeta blog\u003c/a\u003e) locale data with many additions and corrections.\u003c/p\u003e\n\u003cp\u003eLine break backwards-iteration performance has been significantly improved, fixing a long-standing regression.\u003c/p\u003e\n\u003cp\u003eC++ and Java implementations of the \u003ca href\u003d\"https://www.unicode.org/reports/tr35/tr35-messageFormat.html\"\u003eCLDR MessageFormat 2.0 specification\u003c/a\u003e have been updated to CLDR 49. Some of the API remains in technology preview.\u003c/p\u003e\n\u003cp\u003eICU 79 and CLDR 49 are major releases, including a new version of Unicode and major locale data improvements.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDetails: \u003ca href\u003d\"https://unicode-org.github.io/icu/download/79.html\"\u003eICU 79\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDownload: \u003ca href\u003d\"https://github.com/unicode-org/icu/releases/tag/release-79.1rc\"\u003ereleases/tag/release-79.1rc\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAPI docs (preliminary): follow the “Dev” links on \u003ca href\u003d\"https://unicode-org.github.io/icu-docs/\"\u003eunicode-org.github.io/icu-docs/\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePlease test this release candidate on your platforms and report bugs and regressions by Monday, 2026-oct-19, via the \u003ca href\u003d\"https://icu.unicode.org/contacts\"\u003eicu-support\u003c/a\u003e mailing list, and/or please \u003ca href\u003d\"https://icu.unicode.org/bugs\"\u003efind/submit error reports\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003ePlease do not use this release candidate in production.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eAttention: \u003ca href\u003d\"https://unicode-org.github.io/icu/download/79.html#attention-future-changes\"\u003eFuture Changes\u003c/a\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWe will phase out cross-version \u003cstrong\u003eJava serialization\u003c/strong\u003e compatibility guarantees for ICU4J starting with the ICU 80 release.\u003c/li\u003e\n\u003cli\u003eFollow the link for details and other planned changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/unicode-org/icu/commit/ddc6b66926bfac6036144ca9902992a0d6d50af9\"\u003e\u003ccode\u003eddc6b66\u003c/code\u003e\u003c/a\u003e ICU-23250 GitHub updated the images to maven 3.10, and the Sonatype publishin...\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/unicode-org/icu/commit/3fa621389fc7729775d53f4e63cfa86e4e3adb24\"\u003e\u003ccode\u003e3fa6213\u003c/code\u003e\u003c/a\u003e ICU-23569 Fix infinite loop in FCDUIterCollationIterator::previousCodePoint\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/unicode-org/icu/commit/340d9e8dfe20daf51c3cfd931529af205eadd934\"\u003e\u003ccode\u003e340d9e8\u003c/code\u003e\u003c/a\u003e ICU-23250 BRS_79_GA Update version number to 79.1 (no SNAPSHOT / rc)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/unicode-org/icu/commit/38a43edbf11f3b555db9541c23ed2a4f4d4fbe0b\"\u003e\u003ccode\u003e38a43ed\u003c/code\u003e\u003c/a\u003e ICU-23575 Guard currency name cache key against overlong locale IDs\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/unicode-org/icu/commit/eb798c615cdcfd1f26fa976ad0ad79467ef6abd4\"\u003e\u003ccode\u003eeb798c6\u003c/code\u003e\u003c/a\u003e ICU-23568 Use 64-bit CE indexes in usearch CEIBuffer\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/unicode-org/icu/commit/1729c5b0fb8cd52b46323881e244a24034901321\"\u003e\u003ccode\u003e1729c5b\u003c/code\u003e\u003c/a\u003e ICU-23490 Prevent int32_t overflow in ReorderingBuffer::resize()\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/unicode-org/icu/commit/735f4b1bb64e69603592ed2f9b332b5d428cc52c\"\u003e\u003ccode\u003e735f4b1\u003c/code\u003e\u003c/a\u003e ICU-23558 Revert: Round the lowest unit of mixed units from usage() to an int...\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/unicode-org/icu/commit/970072adea9a54d22c5224c4cc049d7021eb6d83\"\u003e\u003ccode\u003e970072a\u003c/code\u003e\u003c/a\u003e ICU-23558 Round the lowest unit of mixed units from usage() to an integer\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/unicode-org/icu/commit/0f2393df84a687bec1b9adb5191826c8e8f71080\"\u003e\u003ccode\u003e0f2393d\u003c/code\u003e\u003c/a\u003e ICU-23565 fix ICU4J PersonNameFormatter throws NullPointerException\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/unicode-org/icu/commit/e2a4ff7fa890227413bfda4b0d5130cfb7ef5176\"\u003e\u003ccode\u003ee2a4ff7\u003c/code\u003e\u003c/a\u003e ICU-23560 Added tests for French ordinals and fixed bugs in ICU4C that were p...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/unicode-org/icu/compare/release-78.3...release-79.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `org.threeten:threeten-extra` from 1.10.0 to 1.11.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/releases\"\u003eorg.threeten:threeten-extra\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.11.0\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href\u003d\"https://www.threeten.org/threeten-extra/changes-report.html\"\u003echange notes\u003c/a\u003e for more information.\u003c/p\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd LocalDateRange.from(Temporal) by \u003ca href\u003d\"https://github.com/jodastephen\"\u003e\u003ccode\u003e@​jodastephen\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/382\"\u003eThreeTen/threeten-extra#382\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd LocalDateRange.withEndInclusive(TemporalAdjuster) by \u003ca href\u003d\"https://github.com/jodastephen\"\u003e\u003ccode\u003e@​jodastephen\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/383\"\u003eThreeTen/threeten-extra#383\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eComparators for TemporalField and TemporalUnit by \u003ca href\u003d\"https://github.com/jodastephen\"\u003e\u003ccode\u003e@​jodastephen\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/388\"\u003eThreeTen/threeten-extra#388\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix date value for unreleased version 1.11.0 in release notes by \u003ca href\u003d\"https://github.com/homeworkprod\"\u003e\u003ccode\u003e@​homeworkprod\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/391\"\u003eThreeTen/threeten-extra#391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Temporal queries to obtain start/end of a date range by \u003ca href\u003d\"https://github.com/jodastephen\"\u003e\u003ccode\u003e@​jodastephen\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/392\"\u003eThreeTen/threeten-extra#392\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix InternationalFixedDate.ofEpochDay losing Year Day of leap years by \u003ca href\u003d\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/385\"\u003eThreeTen/threeten-extra#385\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDerive HalfOfYear from QuarterOfYear by \u003ca href\u003d\"https://github.com/jodastephen\"\u003e\u003ccode\u003e@​jodastephen\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/397\"\u003eThreeTen/threeten-extra#397\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump GH actions versions by \u003ca href\u003d\"https://github.com/jodastephen\"\u003e\u003ccode\u003e@​jodastephen\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/398\"\u003eThreeTen/threeten-extra#398\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump org.apache.maven.plugins:maven-jar-plugin from 3.5.0 to 3.5.1 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/361\"\u003eThreeTen/threeten-extra#361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump org.apache.maven.plugins:maven-install-plugin from 3.1.4 to 3.2.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/351\"\u003eThreeTen/threeten-extra#351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump org.apache.maven.plugins:maven-deploy-plugin from 3.1.4 to 3.2.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/350\"\u003eThreeTen/threeten-extra#350\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump guava.version from 33.6.0-jre to 33.7.2-jre by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/341\"\u003eThreeTen/threeten-extra#341\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnsure classes are validated when deserialized by \u003ca href\u003d\"https://github.com/jodastephen\"\u003e\u003ccode\u003e@​jodastephen\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/399\"\u003eThreeTen/threeten-extra#399\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/homeworkprod\"\u003e\u003ccode\u003e@​homeworkprod\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/391\"\u003eThreeTen/threeten-extra#391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dylanpulver\"\u003e\u003ccode\u003e@​dylanpulver\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/pull/385\"\u003eThreeTen/threeten-extra#385\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/compare/v1.10.0...v1.11.0\"\u003ehttps://github.com/ThreeTen/threeten-extra/compare/v1.10.0...v1.11.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/commit/fa35c0480552d93cdb5489867a183408b6bd6496\"\u003e\u003ccode\u003efa35c04\u003c/code\u003e\u003c/a\u003e [maven-release-plugin] prepare release v1.11.0\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/commit/cda176722bd7adf62af1e8593537337cbaec4c57\"\u003e\u003ccode\u003ecda1767\u003c/code\u003e\u003c/a\u003e Bump central-publishing plugin\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/commit/2e11751c6f54d2c5cec3f389c99bc70e8bb340ac\"\u003e\u003ccode\u003e2e11751\u003c/code\u003e\u003c/a\u003e Prepare for release v1.11.0\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/commit/5b0dc2a37d64e2874e7edc9c481cbc440645073f\"\u003e\u003ccode\u003e5b0dc2a\u003c/code\u003e\u003c/a\u003e Ensure classes are validated when deserialized (\u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/issues/399\"\u003e#399\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/commit/2d3e9cf74ca51af1de37f14b219fc70af044faa8\"\u003e\u003ccode\u003e2d3e9cf\u003c/code\u003e\u003c/a\u003e Bump guava.version from 33.6.0-jre to 33.7.2-jre (\u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/issues/341\"\u003e#341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/commit/1627bab6a07c23dcc8cff9f9bbbd82e22a7607e2\"\u003e\u003ccode\u003e1627bab\u003c/code\u003e\u003c/a\u003e Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.4 to 3.2.0 (\u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/issues/350\"\u003e#350\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/commit/a9db3947b6f1ba9261e86470aa5235968be10b0c\"\u003e\u003ccode\u003ea9db394\u003c/code\u003e\u003c/a\u003e Bump org.apache.maven.plugins:maven-install-plugin from 3.1.4 to 3.2.0 (\u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/issues/351\"\u003e#351\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/commit/ed78ced1cec180666a4efcfc925887679ac592ef\"\u003e\u003ccode\u003eed78ced\u003c/code\u003e\u003c/a\u003e Bump org.apache.maven.plugins:maven-jar-plugin from 3.5.0 to 3.5.1 (\u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/issues/361\"\u003e#361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/commit/918731f14bc20ba31bbdf087a0068cea95a37775\"\u003e\u003ccode\u003e918731f\u003c/code\u003e\u003c/a\u003e Bump GH actions versions (\u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/commit/db401d585bb1aa34cc174a638021302f90489c8a\"\u003e\u003ccode\u003edb401d5\u003c/code\u003e\u003c/a\u003e Derive HalfOfYear from QuarterOfYear (\u003ca href\u003d\"https://redirect.github.com/ThreeTen/threeten-extra/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/ThreeTen/threeten-extra/compare/v1.10.0...v1.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `com.google.code.gson:gson` from 2.14.0 to 2.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/google/gson/releases\"\u003ecom.google.code.gson:gson\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eGson 2.15.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cp\u003eThese are some of the more important changes\u003c/p\u003e\n\u003cp\u003eAPI addition:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd JsonReader.getCharacterOffset to track stream position by \u003ca href\u003d\"https://github.com/barakhub\"\u003e\u003ccode\u003e@​barakhub\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3102\"\u003egoogle/gson#3102\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehaviour changes and bugfixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse LinkedHashMap as the default Map. by \u003ca href\u003d\"https://github.com/eamonnmcmanus\"\u003e\u003ccode\u003e@​eamonnmcmanus\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3057\"\u003egoogle/gson#3057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eLazilyParsedNumber\u003c/code\u003e implement \u003ccode\u003eComparable\u003c/code\u003e. by \u003ca href\u003d\"https://github.com/eamonnmcmanus\"\u003e\u003ccode\u003e@​eamonnmcmanus\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3076\"\u003egoogle/gson#3076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOnly deserialize \u003ccode\u003eInetAddress\u003c/code\u003e from numeric IP addresses. by \u003ca href\u003d\"https://github.com/eamonnmcmanus\"\u003e\u003ccode\u003e@​eamonnmcmanus\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3075\"\u003egoogle/gson#3075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrect logic for BOM detection. by \u003ca href\u003d\"https://github.com/eamonnmcmanus\"\u003e\u003ccode\u003e@​eamonnmcmanus\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3137\"\u003egoogle/gson#3137\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Include location info in NumberFormatException from JsonReader by \u003ca href\u003d\"https://github.com/daguimu\"\u003e\u003ccode\u003e@​daguimu\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3000\"\u003egoogle/gson#3000\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix: peekNumber rejects some numerals like 2^64 + \u0026quot;0\u0026quot; by \u003ca href\u003d\"https://github.com/ogolberg\"\u003e\u003ccode\u003e@​ogolberg\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3034\"\u003egoogle/gson#3034\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix URI type adapter to preserve identity for non-ASCII URIs by \u003ca href\u003d\"https://github.com/anishesg\"\u003e\u003ccode\u003e@​anishesg\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3067\"\u003egoogle/gson#3067\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix JsonPrimitive.hashCode to honor the equals/hashCode contract (\u003ca href\u003d\"https://redirect.github.com/google/gson/issues/992\"\u003e#992\u003c/a\u003e) by \u003ca href\u003d\"https://github.com/earfman\"\u003e\u003ccode\u003e@​earfman\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3059\"\u003egoogle/gson#3059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject non-ASCII digits in JsonTreeReader.nextInt/nextLong by \u003ca href\u003d\"https://github.com/dong0713\"\u003e\u003ccode\u003e@​dong0713\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3063\"\u003egoogle/gson#3063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInclude location in NumberFormatException thrown by JsonTreeReader by \u003ca href\u003d\"https://github.com/dong0713\"\u003e\u003ccode\u003e@​dong0713\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3062\"\u003egoogle/gson#3062\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate JSON path after promoteNameToValue by \u003ca href\u003d\"https://github.com/tanvir-ux\"\u003e\u003ccode\u003e@​tanvir-ux\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3098\"\u003egoogle/gson#3098\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: reject unpaired surrogates in strict JSON by \u003ca href\u003d\"https://github.com/rksharma-owg\"\u003e\u003ccode\u003e@​rksharma-owg\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3116\"\u003egoogle/gson#3116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip accessibility check in BoundField once it is known to have passed by \u003ca href\u003d\"https://github.com/nileshpatil6\"\u003e\u003ccode\u003e@​nileshpatil6\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3086\"\u003egoogle/gson#3086\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid quadratic removeIf in JsonArray list views by \u003ca href\u003d\"https://github.com/ishu7w\"\u003e\u003ccode\u003e@​ishu7w\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3115\"\u003egoogle/gson#3115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse the runtime type for a wildcard element type by \u003ca href\u003d\"https://github.com/HuzaifaChaudary\"\u003e\u003ccode\u003e@​HuzaifaChaudary\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3112\"\u003egoogle/gson#3112\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/daguimu\"\u003e\u003ccode\u003e@​daguimu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3000\"\u003egoogle/gson#3000\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/anish-anantharaman\"\u003e\u003ccode\u003e@​anish-anantharaman\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3025\"\u003egoogle/gson#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/adilburaksen\"\u003e\u003ccode\u003e@​adilburaksen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3027\"\u003egoogle/gson#3027\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ogolberg\"\u003e\u003ccode\u003e@​ogolberg\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3034\"\u003egoogle/gson#3034\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/vasiliy-mikhailov\"\u003e\u003ccode\u003e@​vasiliy-mikhailov\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3038\"\u003egoogle/gson#3038\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/mayokunyusuf\"\u003e\u003ccode\u003e@​mayokunyusuf\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3061\"\u003egoogle/gson#3061\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/arpitagarwal1301\"\u003e\u003ccode\u003e@​arpitagarwal1301\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3065\"\u003egoogle/gson#3065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/anishesg\"\u003e\u003ccode\u003e@​anishesg\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3067\"\u003egoogle/gson#3067\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/earfman\"\u003e\u003ccode\u003e@​earfman\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3059\"\u003egoogle/gson#3059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/dong0713\"\u003e\u003ccode\u003e@​dong0713\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3063\"\u003egoogle/gson#3063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/nafisa1602\"\u003e\u003ccode\u003e@​nafisa1602\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3049\"\u003egoogle/gson#3049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/barakhub\"\u003e\u003ccode\u003e@​barakhub\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3102\"\u003egoogle/gson#3102\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/tanvir-ux\"\u003e\u003ccode\u003e@​tanvir-ux\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3098\"\u003egoogle/gson#3098\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/rksharma-owg\"\u003e\u003ccode\u003e@​rksharma-owg\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3116\"\u003egoogle/gson#3116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/nileshpatil6\"\u003e\u003ccode\u003e@​nileshpatil6\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3086\"\u003egoogle/gson#3086\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/lllincoln\"\u003e\u003ccode\u003e@​lllincoln\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3046\"\u003egoogle/gson#3046\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/Phhofm\"\u003e\u003ccode\u003e@​Phhofm\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/1532\"\u003egoogle/gson#1532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/ishu7w\"\u003e\u003ccode\u003e@​ishu7w\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3115\"\u003egoogle/gson#3115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/HuzaifaChaudary\"\u003e\u003ccode\u003e@​HuzaifaChaudary\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/google/gson/pull/3112\"\u003egoogle/gson#3112\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/google/gson/compare/gson-parent-2.14.0...gson-parent-2.15.0\"\u003ehttps://github.com/google/gson/compare/gson-parent-2.14.0...gson-parent-2.15.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/gson/commit/fcd416909db2bea96eb916bcfb2d0a83cb9b86c3\"\u003e\u003ccode\u003efcd4169\u003c/code\u003e\u003c/a\u003e [maven-release-plugin] prepare release gson-parent-2.15.0\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/gson/commit/828cbe0d7c5ab224c9bf441914ee391677196c0f\"\u003e\u003ccode\u003e828cbe0\u003c/code\u003e\u003c/a\u003e Update protobuf-maven-plugin dependency. (\u003ca href\u003d\"https://redirect.github.com/google/gson/issues/3153\"\u003e#3153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/gson/commit/66dd98a425c87067d90b92caeaa52c98797fac12\"\u003e\u003ccode\u003e66dd98a\u003c/code\u003e\u003c/a\u003e Disable Spotless plugin before Java 21. (\u003ca href\u003d\"https://redirect.github.com/google/gson/issues/3152\"\u003e#3152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/gson/commit/094f5003ce5f6d2fb65457bee9c78b9d53d25308\"\u003e\u003ccode\u003e094f500\u003c/code\u003e\u003c/a\u003e Fix typo in comment (\u003ca href\u003d\"https://redirect.github.com/google/gson/issues/3148\"\u003e#3148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/gson/commit/881d2b55de74dd6c2fded7b2cb307b048117af97\"\u003e\u003ccode\u003e881d2b5\u003c/code\u003e\u003c/a\u003e Consistently use \u0026quot;Gson\u0026quot; instead of \u0026quot;GSON\u0026quot; as project name (\u003ca href\u003d\"https://redirect.github.com/google/gson/issues/3150\"\u003e#3150\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/gson/commit/e2292f9c9f2e07a4791827e8eea34aa7d80545d6\"\u003e\u003ccode\u003ee2292f9\u003c/code\u003e\u003c/a\u003e Address a few static analysis findings. (\u003ca href\u003d\"https://redirect.github.com/google/gson/issues/3141\"\u003e#3141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/gson/commit/67427c40f7306276e63e09c8bb66fefb90429d86\"\u003e\u003ccode\u003e67427c4\u003c/code\u003e\u003c/a\u003e Bump the github-actions group across 1 directory with 5 updates (\u003ca href\u003d\"https://redirect.github.com/google/gson/issues/3133\"\u003e#3133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/gson/commit/845664ba1c307e6c1910d07cfed2f622e0ad8df1\"\u003e\u003ccode\u003e845664b\u003c/code\u003e\u003c/a\u003e Correct logic for BOM detection. (\u003ca href\u003d\"https://redirect.github.com/google/gson/issues/3137\"\u003e#3137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/gson/commit/216c41b6e70dc04e6856418dd76bb00c854eb6b4\"\u003e\u003ccode\u003e216c41b\u003c/code\u003e\u003c/a\u003e Bump com.fasterxml.jackson.core:jackson-databind (\u003ca href\u003d\"https://redirect.github.com/google/gson/issues/3136\"\u003e#3136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/gson/commit/854c8255b625cf1e13c701a83ea9ccb4caaa576a\"\u003e\u003ccode\u003e854c825\u003c/code\u003e\u003c/a\u003e Simplify key removal in \u003ccode\u003eLegacyProtoTypeAdapterFactoryTest\u003c/code\u003e (\u003ca href\u003d\"https://redirect.github.com/google/gson/issues/3124\"\u003e#3124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/google/gson/compare/gson-parent-2.14.0...gson-parent-2.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMost Recent Ignore Conditions Applied to This Pull Request\u003c/summary\u003e\n\n| Dependency Name | Ignore Conditions |\n| --- | --- |\n| com.google.testparameterinjector:test-parameter-injector | [\u003e\u003d 1.8.a, \u003c 1.9] |\n\u003c/details\u003e\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e\n\nFixes https://github.com/google/error-prone/pull/6271\n\nCOPYBARA_INTEGRATE_REVIEW\u003dhttps://github.com/google/error-prone/pull/6271 from google:dependabot/maven/dependencies-a38bbdc220 e78719c895bd90d5675d3b11756efc910fff9f5e\nPiperOrigin-RevId: 1011604340\n"
    },
    {
      "commit": "3cc36d5125e62d697466991771d471d5ea1b8864",
      "tree": "26ab73102273b8075d6bef02af1d8055be353d36",
      "parents": [
        "0202185311ed25f47be5f64b17a70aad32dee439"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Nov 01 14:25:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 01 14:25:31 2026"
      },
      "message": "Bump actions/setup-java from 6.0.1 to 6.1.0 in the github-actions group (#6270)\n\nBumps the github-actions group with 1 update: [actions/setup-java](https://github.com/actions/setup-java).\n\n\nUpdates `actions/setup-java` from 6.0.1 to 6.1.0\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/de7274f081f381c8f8158605e0321c36c376e2e6...b843ebf9b913146b38da2eaa7aeddf76074ae1ad)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 6.1.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "0202185311ed25f47be5f64b17a70aad32dee439",
      "tree": "2fcca3289b6d55a8773025a322a75ff12843e934",
      "parents": [
        "cdf0d9400266b7540fb1a44b6cfcf1244550e29a"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Fri Oct 30 18:27:05 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Oct 30 18:28:12 2026"
      },
      "message": "Migrate class and annotation name constants in Error Prone to `ClassName`.\n\nReplaces `VisitorState.memoize(state -\u003e state.getName(...))` and `Suppliers.typeFromString(...)` constants for class and annotation names in `ASTHelpers`, `SuppressionInfo`, `ASTHelpersSuggestions`, `UnusedMethod`, and `NullArgumentForNonNullParameter` with `ClassName`.\n\nAlso switches `NullArgumentForNonNullParameter.hasDirectAnnotation` to compare `flatName()` against `ClassName.binaryName(state)`, fixing matching of nested annotations like `@Internal.ProtoNonnullApi`.\n\nPiperOrigin-RevId: 1010663724\n"
    },
    {
      "commit": "cdf0d9400266b7540fb1a44b6cfcf1244550e29a",
      "tree": "09056da757d6f889615f27dd933681de4505b95d",
      "parents": [
        "208015e2bf3464e54037c12f244e834476355af3"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Fri Oct 30 15:20:36 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Oct 30 15:22:14 2026"
      },
      "message": "Add `ASTHelpers.overridesObjectEquals` and `overridesObjectHashCode` helpers.\n\nExtract shared helpers in `ASTHelpers` for checking whether a `TypeSymbol` declares or inherits an implementation of `Object.equals` or `Object.hashCode` other than the default implementation in `java.lang.Object`, and use them in `ValueClassEquals`, `EqualsHashCode`, and `BadAnnotationImplementation`.\n\nPiperOrigin-RevId: 1010531473\n"
    },
    {
      "commit": "208015e2bf3464e54037c12f244e834476355af3",
      "tree": "24112e71950419cb065ecdfc3f802f69957bb4ec",
      "parents": [
        "e1a8a3e49f469e52e3e7aef71566435a6537e6a3"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Fri Oct 30 10:06:01 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Oct 30 10:07:30 2026"
      },
      "message": "Update `MemoizeConstantVisitorStateLookups` to suggest `ClassName`.\n\nRewrite constant `state.getTypeFromString(\"...\")`, `state.getSymbolFromString(\"...\")`, and `state.binaryNameFromClassname(\"...\")` lookups to `private static final ClassName` constants and `.type(state)`, `.symbol(state)`, and `.binaryName(state)` accessors.\n\nPiperOrigin-RevId: 1010370903\n"
    },
    {
      "commit": "e1a8a3e49f469e52e3e7aef71566435a6537e6a3",
      "tree": "12d677139a5b7840272076750dbde139e2abd298",
      "parents": [
        "2c6baed91268145986d84332af91ae6a17fe1f60"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Fri Oct 30 08:46:55 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Oct 30 08:47:55 2026"
      },
      "message": "Add `ValueClassEquals` to require non-record concrete `value` classes to override `equals` and `hashCode`\n\nIn JEP 401, `\u003d\u003d` on value objects (and therefore inherited `Object.equals`, which is `return this \u003d\u003d obj;`, and `Object.hashCode`, which is `System.identityHashCode(this)`) tests whether two value objects have the exact same internal field values (state-wise identity), rather than logical value equality. Relying on `\u003d\u003d` or inherited `Object.equals` / `Object.hashCode` on value classes creates two main hazards:\n\n1. Silent failure on reference fields: Unlike a `value record` (whose compiler-synthesized `equals` and `hashCode` call `.equals()` and `.hashCode()` on reference components), a non-record `value class` that omits `equals` and `hashCode` compares and hashes any reference fields (such as `String`, arrays, or collections) using reference identity (`\u003d\u003d` and `System.identityHashCode`). A `value class` that starts with only primitive fields and later adds a `String` field will silently have a broken `.equals()` and `.hashCode()`.\n2. Representation leakage: Because state-wise comparison inspects all internal fields directly, any encapsulated representation details—such as defensive array copies, unnormalized representations, or cached/derived fields—leak into equality semantics if `Object.equals` is inherited or if callers compare instances with `\u003d\u003d`.\n\nTogether with `ReferenceEquality` (which flags `\u003d\u003d` on value classes so callers use `.equals()` instead of testing internal representation), `ValueClassEquals` ensures that `.equals()` and `.hashCode()` on value classes always reflect intentional value equality:\n\n- Simple transparent value carriers should use `value record`, which synthesizes component-wise `equals` and `hashCode` automatically.\n- Non-record `value class`es are used when a class requires encapsulation (private fields, normalization, defensive copies, or derived fields)—the exact cases where inheriting `Object.equals` is either broken or leaks representation details.\n- Requiring non-record concrete `value class`es to explicitly override `equals` and `hashCode` ensures authors define logical equality for encapsulated state, while still allowing explicit delegation (`return super.equals(obj);` and `return super.hashCode();`) when all fields are primitives or enums and state-wise comparison is genuinely intended.\n\nPiperOrigin-RevId: 1010327707\n"
    },
    {
      "commit": "2c6baed91268145986d84332af91ae6a17fe1f60",
      "tree": "f7a7161b5056a207618d8ecbfbb8f4736e66e266",
      "parents": [
        "1212c5ffa62661decb334d410d76cfe0216a39eb"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Fri Oct 30 08:26:41 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Oct 30 08:28:02 2026"
      },
      "message": "Handle JEP 401 `value` classes in `ValueClassIdentity` and `ReferenceEquality`\n\n- Update `ValueClassIdentity.isValueClass` to check for the JEP 401 `Modifier.VALUE` modifier on concrete value classes, in addition to `@jdk.internal.ValueBased` and the explicit list of JDK value-based classes.\n- Update `ReferenceEquality` (`definitelyUsesReferenceEquality` and `isSentinelComparison`) so that value classes and `@ValueBased` classes are not treated as using reference equality or as valid sentinels, even when they are `final` and inherit `Object.equals`.\n\nPiperOrigin-RevId: 1010317708\n"
    },
    {
      "commit": "1212c5ffa62661decb334d410d76cfe0216a39eb",
      "tree": "69fdae53700c093c25d8f9440f147f7b4ef8a0aa",
      "parents": [
        "134e0ad6e2b5539fd7386445b91275d447066897"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Fri Oct 30 07:25:30 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Oct 30 07:26:35 2026"
      },
      "message": "Add RegexMatchers for shared regex matchers and class constants.\n\nError Prone checks and helpers match regular expression `Pattern` and `Matcher` types (`java.util.regex`, `com.google.re2j`, `org.safere`) and shorthand regex methods (`String.matches`, `String.replaceFirst`, `String.replaceAll`, `String.split`, `String.splitWithDelimiters`, `Splitter.onPattern`, and `Predicates.containsPattern`) using duplicated string literals and method matchers.\n\nIntroduce `com.google.errorprone.matchers.RegexMatchers` with shared class-name constants, grouped `Pattern` and `Matcher` class sets, method matchers, and `isStringSplitFastPath` for detecting inputs that bypass `Pattern` compilation in `String.split`.\n\nPiperOrigin-RevId: 1010288056\n"
    },
    {
      "commit": "134e0ad6e2b5539fd7386445b91275d447066897",
      "tree": "c13235c1bc1a3743b0c87e99df9daedd83dc15f5",
      "parents": [
        "a5085332e3fdd7a71a01031ffab8e0395f873fd1"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Thu Oct 29 17:03:47 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Oct 29 17:05:34 2026"
      },
      "message": "Add missing bugpattern docs for `LoopToTestParameter` and `TestParametersNotInitialized`\n\nPiperOrigin-RevId: 1009769713\n"
    },
    {
      "commit": "a5085332e3fdd7a71a01031ffab8e0395f873fd1",
      "tree": "21096eee2291b496f8c3eb3c6f3591187a81b6f0",
      "parents": [
        "f379e1f48143e534de4347db4cf63d6102c9df76"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Thu Oct 29 14:40:41 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Oct 29 14:42:41 2026"
      },
      "message": "Migrate `BugChecker` class name constants in `core` to `ClassName`.\n\nReplace `Suppliers.typeFromString`, `VisitorState.memoize(s -\u003e s.getSymbolFromString(...))`, and string class name constants in `core` checks with `ClassName`.\n\nPiperOrigin-RevId: 1009679341\n"
    },
    {
      "commit": "f379e1f48143e534de4347db4cf63d6102c9df76",
      "tree": "730877726dd544589f77f429c24711f5febb2fc3",
      "parents": [
        "fe30f166b794291791190b7291976165b42c01f3"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Thu Oct 29 14:05:51 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Oct 29 14:07:26 2026"
      },
      "message": "Add `ClassName` overloads to Error Prone matchers, predicates, and helpers.\n\nAdd `ClassName` overloads to `ASTHelpers`, `TypePredicates`, `AnnotationType`, `Matchers`, `MethodMatchers`, `FieldMatchers`, `SuggestedFixes`, and `Suppliers`, and migrate shared matcher constants in `check_api` (`ProtobufMatchers`, `InjectMatchers`, `JUnitMatchers`, and `CompileTimeConstantExpressionMatcher`) to `ClassName`.\n\nPiperOrigin-RevId: 1009661222\n"
    },
    {
      "commit": "fe30f166b794291791190b7291976165b42c01f3",
      "tree": "bca347af1d9958de8a450acd18a1dcd4ec5ff0e1",
      "parents": [
        "12d98a53d888ea3e47219d43d4ea46d471f53a29"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Thu Oct 29 11:13:28 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Oct 29 11:14:33 2026"
      },
      "message": "Avoid exponential supertype traversal in ThreadSafety.getAnnotation.\n\nWhen `markerAnnotationInherited` is true, `ThreadSafety.getAnnotation` iterates over `Types.closure(classSymbol.type)` (the full transitive supertype closure) and previously called `getInheritedAnnotation` recursively on each supertype, resulting in `O(2^N)` behavior on deep type hierarchies.\n\nCheck only for direct annotations on each supertype in the closure (or superclass chain when `markerAnnotationInherited` is false), since `Types.closure` and `Types.supertype` already include all transitive supertypes with type arguments substituted. Also remove the redundant `immutableSupertype` fallback in `ImmutableChecker.getImmutableAnnotation`.\n\nPiperOrigin-RevId: 1009584459\n"
    },
    {
      "commit": "12d98a53d888ea3e47219d43d4ea46d471f53a29",
      "tree": "e00b4f0fee1a58d4d639098ccabc364e4d8674be",
      "parents": [
        "fc543c7b48af0747acee74f8787b80f753cbc363"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Thu Oct 29 00:48:17 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Oct 29 00:50:03 2026"
      },
      "message": "Delete PreferTestParameter in favor of SingleTestParameter.\n\nInstead, make `SingleTestParameter` emit `@TestParameter` directly when all enum or boolean values are exhaustively listed. `PreferTestParameter` was a strict special case of `SingleTestParameter` followed by `SimplifyTestParameter`.\n\nPiperOrigin-RevId: 1009299590\n"
    },
    {
      "commit": "fc543c7b48af0747acee74f8787b80f753cbc363",
      "tree": "16d12788f870ce45a80095a86c676d8470c8050f",
      "parents": [
        "1cc6691bfd83e6900e58eda091f4526c374dd6d8"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Wed Oct 28 23:43:24 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Oct 28 23:45:08 2026"
      },
      "message": "Make most TestParameterInjector checks `SUGGESTION`s that fire on changed lines only.\n\nThis CL also extracts shared helpers into `TestParameterInjectorUtils` for `@TestParameters` annotation extraction, repeated-annotation constants, and exhaustive enum/boolean value detection (also simplifying exhaustive enum lists in `LoopToTestParameter`).\n\nPiperOrigin-RevId: 1009265013\n"
    },
    {
      "commit": "1cc6691bfd83e6900e58eda091f4526c374dd6d8",
      "tree": "9b7825b84957355abd98c509e8719361c68167c4",
      "parents": [
        "adaa3013e28c9015d4df1bd46a6c224f1c9e12a1"
      ],
      "author": {
        "name": "Éamonn McManus",
        "email": "emcmanus@google.com",
        "time": "Wed Oct 28 21:17:49 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Oct 28 21:19:12 2026"
      },
      "message": "Add some nuance to the summary of `SingleValueTestParameter`.\n\nPiperOrigin-RevId: 1009171624\n"
    },
    {
      "commit": "adaa3013e28c9015d4df1bd46a6c224f1c9e12a1",
      "tree": "992582ea72a29d1a43906e55f3850eec5e790244",
      "parents": [
        "167b9f0f1526161f7ea96ac6ffc54b95808ccfc2"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Wed Oct 28 14:49:15 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Oct 28 14:51:10 2026"
      },
      "message": "Add `SingleValueTestParameter` check to inline single-value `@TestParameter` parameters as local variables.\n\nDetects JUnit4 `@Test` methods where `@TestParameter` parameters have only a single explicit string literal value (supporting strings, booleans, ints, longs, floats, doubles, enum constants, and `\"null\"` for reference types) and suggests removing the parameters and replacing them with local variable declarations at the start of the method body.\n\nPiperOrigin-RevId: 1008904911\n"
    },
    {
      "commit": "167b9f0f1526161f7ea96ac6ffc54b95808ccfc2",
      "tree": "43e9c799d33b9a99a56bc1023aa1289745a4c7d7",
      "parents": [
        "6bbeb80a38704d49af3ab25b4eb5f011e45daf91"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Wed Oct 28 14:07:52 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Oct 28 14:11:09 2026"
      },
      "message": "Add AlmostExhaustiveTestParameter check for enum @TestParameter lists.\n\nListing almost every constant of an enum in `@TestParameter({...})` to skip a single sentinel value silently omits new constants added to the enum in the future, whereas an implicit `@TestParameter` paired with an assumption documents the exclusion directly and automatically covers new constants.\n\n`AlmostExhaustiveTestParameter` flags `@Test` method parameters of enum types when `@TestParameter` explicitly lists at least 4 constants covering all constants except one (or except `UNRECOGNIZED` and one other constant, as is common for proto3 enums), replacing the explicit list with `@TestParameter` and inserting a `TruthJUnit.assume()` statement at the start of the method body.\n\nPiperOrigin-RevId: 1008882091\n"
    },
    {
      "commit": "6bbeb80a38704d49af3ab25b4eb5f011e45daf91",
      "tree": "ae63be489720e5ca15dc3a22df3b0fa214f22bc8",
      "parents": [
        "5e1fa92ead187b99da3612826922cf22a40eecf8"
      ],
      "author": {
        "name": "Error Prone Team",
        "email": "java-team-github-bot@google.com",
        "time": "Tue Oct 27 18:24:37 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 27 18:25:43 2026"
      },
      "message": "Treat fields accessed only through VarHandles or field updaters as used in UnusedVariable.\n\n`UnusedVariable` only recognises a field as used when it sees a direct identifier or member-select reference to it. Fields in lock-free code are often accessed exclusively through a `VarHandle` obtained from `MethodHandles.Lookup.findVarHandle(Foo.class, \"bar\", ...)` (or an `Atomic*FieldUpdater`), where the only mention of the field is its name in a string literal. Such fields were reported as \"never read\", producing false positives on private fields and on fields of private nested classes.\n\nWhen scanning for usages, recognise invocations of the `MethodHandles.Lookup` field accessors (`findVarHandle`, `findStaticVarHandle`, `findGetter`, `findSetter`, `findStaticGetter`, `findStaticSetter`) and `Atomic{Integer,Long,Reference}FieldUpdater.newUpdater`, resolve the class literal and string constant arguments to the named field, and treat that field as used. Lookups with a non-constant name or non-literal class are ignored, so the field remains subject to the check.\n\nPiperOrigin-RevId: 1008249188\n"
    },
    {
      "commit": "5e1fa92ead187b99da3612826922cf22a40eecf8",
      "tree": "68b2d609a5be4abbfbef3fbd90112bfd55c32349",
      "parents": [
        "b9eef5a3899f7f4ff08aa7c96186b1ee47331c35"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Tue Oct 27 11:56:37 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 27 11:57:52 2026"
      },
      "message": "Allow passing `any()`, etc. multiple times in DistinctVarargsChecker.\n\nThe fuller, more correct fix would be something like unknown commit, but this CL\u0027s approach should handle the common cases with minimal effort.\n\n(hopefully mostly addresses https://github.com/google/error-prone/issues/6240 in practice)\n\nPiperOrigin-RevId: 1008009957\n"
    },
    {
      "commit": "b9eef5a3899f7f4ff08aa7c96186b1ee47331c35",
      "tree": "aa13f9d61e8bec5c4e05945e72925f24139e5980",
      "parents": [
        "c8d735fd7db3727e991b27cd0b76a033e0628bd4"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Tue Oct 27 09:01:07 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 27 09:02:33 2026"
      },
      "message": "Introduce `com.google.errorprone.ClassName`.\n\n`ClassName` encapsulates a qualified class name (accepting both canonical `.`-separated and binary `$`-separated forms) and caches its resolved `ClassSymbol`, `Type`, and binary `Name` across a compilation.\n\nAlso cache per-compilation-unit symbol lookups in `VisitorState.SharedState` so repeated negative lookups within a single file do not re-query `Symtab`, and add a fallback in `VisitorState.getSymbolFromName` that completes enclosing classes when resolving a nested class whose outer class has not yet been completed.\n\nPiperOrigin-RevId: 1007921385\n"
    },
    {
      "commit": "c8d735fd7db3727e991b27cd0b76a033e0628bd4",
      "tree": "f2cd8cff0e4ef60adcf75ade643034abc31074aa",
      "parents": [
        "001cf4b3b80e96e6e7e38dc69a04833d38c04d6f"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Mon Oct 26 20:32:33 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 26 20:33:56 2026"
      },
      "message": "[RefactorSwitch] align dead code deletion after a `return switch` with javac\u0027s dead code semantics\n\nPiperOrigin-RevId: 1007512554\n"
    },
    {
      "commit": "001cf4b3b80e96e6e7e38dc69a04833d38c04d6f",
      "tree": "d66bf209bc62873022d30b6553965ee89ef6ddba",
      "parents": [
        "e47069a1d02b7698b9cba4c6d03438fb4b0da970"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Mon Oct 26 20:05:03 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 26 20:06:39 2026"
      },
      "message": "[RefactorSwitch] add tests showing that dead-code deletion after a `return switch` can sometimes be incorrect\n\nPiperOrigin-RevId: 1007490835\n"
    },
    {
      "commit": "e47069a1d02b7698b9cba4c6d03438fb4b0da970",
      "tree": "05d8bf3d1abc886fc17f1e80737b5a0b81f20a48",
      "parents": [
        "df3ec33e7bd26712e219b4e344eff47ac6365976"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Mon Oct 26 19:06:40 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 26 19:08:02 2026"
      },
      "message": "Cache types for `byte[]`, and encourage caching more generally.\n\n(prompted by the array checks in `validateClassName` in unknown commit)\n\nPiperOrigin-RevId: 1007448897\n"
    },
    {
      "commit": "df3ec33e7bd26712e219b4e344eff47ac6365976",
      "tree": "3f417fd8a174e9b8c69a057c72888997afc17bb8",
      "parents": [
        "15088177648c1e686f602b63f9ca1ebf04f20f35"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 26 15:49:45 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 26 15:51:20 2026"
      },
      "message": "Bump the dependencies group with 2 updates\n\n[//]: # (dependabot-start)\n⚠️  **Dependabot is rebasing this PR** ⚠️\n\nRebasing might not happen immediately, so don\u0027t worry if this takes some time.\n\nNote: if you make any changes to this PR yourself, they will take precedence over the rebase.\n\n---\n\n[//]: # (dependabot-end)\n\nBumps the dependencies group with 2 updates: [com.google.testing.compile:compile-testing](https://github.com/google/compile-testing) and [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework).\n\nUpdates `com.google.testing.compile:compile-testing` from 0.23.0 to 0.24.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/google/compile-testing/releases\"\u003ecom.google.testing.compile:compile-testing\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.24.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed Java 8 build configuration to work for downstream users of Maven 3.10.0. (63b2b79)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/compile-testing/commit/52534e3c6a554e0496f95397303812592de42469\"\u003e\u003ccode\u003e52534e3\u003c/code\u003e\u003c/a\u003e Set version number for compile-testing to 0.24.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/compile-testing/commit/63b2b794f03bc6eb26c2f73ac7710c4aeace223f\"\u003e\u003ccode\u003e63b2b79\u003c/code\u003e\u003c/a\u003e Fix issue for downstream users of Maven 3.10.0, and clean up obsolete profile.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/compile-testing/commit/bd7fa05b0d6347abd4cf259b763c085e294ddf07\"\u003e\u003ccode\u003ebd7fa05\u003c/code\u003e\u003c/a\u003e Bump actions/setup-java from 6.0.0 to 6.0.1 in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/compile-testing/commit/e52ff3db09c97ca6f514591a1cc89846f27856c1\"\u003e\u003ccode\u003ee52ff3d\u003c/code\u003e\u003c/a\u003e Bump Guava to 33.7.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/compile-testing/commit/f16e0868f6e1524a6e981ab7537d050b94ce0556\"\u003e\u003ccode\u003ef16e086\u003c/code\u003e\u003c/a\u003e Format some Markdown.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/compile-testing/commit/fb0fe9c9bb848c5a6f5aad1697067e5b74ca9078\"\u003e\u003ccode\u003efb0fe9c\u003c/code\u003e\u003c/a\u003e Bump the dependencies group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/compile-testing/commit/f4f9176363198344b6d25ada3df3d12f71a814f1\"\u003e\u003ccode\u003ef4f9176\u003c/code\u003e\u003c/a\u003e Bump actions/setup-java from 5.6.0 to 6.0.0 in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/compile-testing/commit/2e1523abae2b617ff49764f31a0b7651c4326eea\"\u003e\u003ccode\u003e2e1523a\u003c/code\u003e\u003c/a\u003e Bump Guava to 33.7.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/compile-testing/commit/05fb3dda38cd175039e2604c4f92726439e3c057\"\u003e\u003ccode\u003e05fb3dd\u003c/code\u003e\u003c/a\u003e Bump Guava to 33.7.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/compile-testing/commit/add841bee5341e9dc18f52a30fbd8d8c4bcdaa58\"\u003e\u003ccode\u003eadd841b\u003c/code\u003e\u003c/a\u003e Update links from the legacy search.maven.org to the new central.sonatype.com.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/google/compile-testing/compare/v0.23.0...v0.24.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `org.checkerframework:checker-qual` from 4.3.0 to 4.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/typetools/checker-framework/releases\"\u003eorg.checkerframework:checker-qual\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eChecker Framework 4.3.1\u003c/h2\u003e\n\u003ch2\u003eVersion 4.3.1 (2026-10-08)\u003c/h2\u003e\n\u003ch3\u003eClosed issues\u003c/h3\u003e\n\u003cp\u003e\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8325\"\u003e#8325\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md\"\u003eorg.checkerframework:checker-qual\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 4.3.1 (2026-10-08)\u003c/h2\u003e\n\u003ch3\u003eClosed issues\u003c/h3\u003e\n\u003cp\u003e\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8325\"\u003e#8325\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/8987859683707cb82337d65c43ac313eef41d9b7\"\u003e\u003ccode\u003e8987859\u003c/code\u003e\u003c/a\u003e new release 4.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/8f6281cdd1577d9008857ff2d9756c2e5e6dca15\"\u003e\u003ccode\u003e8f6281c\u003c/code\u003e\u003c/a\u003e Prep for release.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/cd777e558432eb4740f5bd322dbf8b664a64adca\"\u003e\u003ccode\u003ecd777e5\u003c/code\u003e\u003c/a\u003e Test case for issue \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8325\"\u003e#8325\u003c/a\u003e (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8326\"\u003e#8326\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/0091b160928cda73f8c3dff4cd871fada0a7518e\"\u003e\u003ccode\u003e0091b16\u003c/code\u003e\u003c/a\u003e Suppress JDK 27 \u0026quot;removal\u0026quot; warnings for SourcePositions methods (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8318\"\u003e#8318\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/4b4b053f6683df9563b7153843d3fa4712c138c0\"\u003e\u003ccode\u003e4b4b053\u003c/code\u003e\u003c/a\u003e Update cimg/base Docker tag to v2026.10 (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8313\"\u003e#8313\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/31c0700340cfba824bc9847ec663734ff8b55949\"\u003e\u003ccode\u003e31c0700\u003c/code\u003e\u003c/a\u003e Nullness: handle nullable results in typeinference8 (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8311\"\u003e#8311\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/c456c70a4545335239ca7d922de2fcce057fee70\"\u003e\u003ccode\u003ec456c70\u003c/code\u003e\u003c/a\u003e Nullness: fix initialization errors in typeinference8 (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8310\"\u003e#8310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/19e755bf38cd5356a6a4e73b564085eefa8adf1a\"\u003e\u003ccode\u003e19e755b\u003c/code\u003e\u003c/a\u003e Nullness: access bound maps in typeinference8 through accessors (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8306\"\u003e#8306\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/338df427897d14ebc46199bc3071d52c08841015\"\u003e\u003ccode\u003e338df42\u003c/code\u003e\u003c/a\u003e Nullness: fix KeyFor and method-reference errors in typeinference8 (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8309\"\u003e#8309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/6c07868110794c72a89a6f9c974b1ebec557e788\"\u003e\u003ccode\u003e6c07868\u003c/code\u003e\u003c/a\u003e Nullness: annotate typeinference8 parameters and fields that may be null (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8307\"\u003e#8307\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/typetools/checker-framework/compare/checker-framework-4.3.0...checker-framework-4.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e\n\nFixes https://github.com/google/error-prone/pull/6209\n\nCOPYBARA_INTEGRATE_REVIEW\u003dhttps://github.com/google/error-prone/pull/6209 from google:dependabot/maven/dependencies-712796f035 704cc4a47eb6d7c4ed4cd7b7afd0a243eaaaf6c3\nPiperOrigin-RevId: 1007310923\n"
    },
    {
      "commit": "15088177648c1e686f602b63f9ca1ebf04f20f35",
      "tree": "6961065cb52211bf4ef4f22ade315df282155446",
      "parents": [
        "f659ef2f2d1a5c01d2145dba06be33417145fd69"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Mon Oct 26 15:13:21 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 26 15:14:16 2026"
      },
      "message": "Add SingleTestParameter check for @TestParameters with one parameter.\n\nAnnotating a test method or constructor with `@TestParameters` YAML mappings is unnecessarily verbose when there is only a single test parameter.\n\nAdd the `SingleTestParameter` check at `WARNING` severity in `com.google.errorprone.bugpatterns.testparameterinjector` to simplify single-parameter `@TestParameters` mappings into `@TestParameter` directly on the parameter. Add `org.yaml:snakeyaml` to `error_prone_core` (and its shaded jar) to parse single-key YAML scalar mappings via `SafeConstructor`.\n\nPiperOrigin-RevId: 1007288698\n"
    },
    {
      "commit": "f659ef2f2d1a5c01d2145dba06be33417145fd69",
      "tree": "55ad3b12471228484b4b4caccf1443fc913c2ff7",
      "parents": [
        "e0875d47031f430479df1b42a63f0647fd86b295"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Mon Oct 26 13:43:41 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 26 13:45:00 2026"
      },
      "message": "Allow duplicate args to `Iterables.concat`.\n\nSee https://github.com/google/error-prone/issues/6239\n\nPiperOrigin-RevId: 1007240749\n"
    },
    {
      "commit": "e0875d47031f430479df1b42a63f0647fd86b295",
      "tree": "d513ad48fcf80103c94377d6b13cfcb50aa1e292",
      "parents": [
        "579ee4f54e6bd6a27de0526d93ae9b9cbd791c00"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Fri Oct 23 19:50:00 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Oct 23 19:51:25 2026"
      },
      "message": "Expand the definition of \"compile-time constant\" to include record+interface fields and `compileTimeConstant.compileTimeConstantField`.\n\nPiperOrigin-RevId: 1005796914\n"
    },
    {
      "commit": "579ee4f54e6bd6a27de0526d93ae9b9cbd791c00",
      "tree": "8707e3b5ec1c9756ae816eb3fb999be6d93d1ec7",
      "parents": [
        "afaa20bea1f82ca7061a28f90862809ad9a50abf"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Fri Oct 23 19:32:13 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Oct 23 19:33:26 2026"
      },
      "message": "Refactor `StringBuffer` to `StringBuilder` even when used with `Matcher.appendReplacement` and `appendTail`.\n\nPlus, guard Android refactoring based on `minSdkVersion`.\n\nAlso, extend `Matcher` logic to cover SafeRE and RE2J (https://github.com/google/re2j/pull/44).\n\nPiperOrigin-RevId: 1005784723\n"
    },
    {
      "commit": "afaa20bea1f82ca7061a28f90862809ad9a50abf",
      "tree": "3e477b42620d1cd7f0189cf1a59bb67f4479f4b4",
      "parents": [
        "e5aac42137a69d8392cb80bec4ebe86396fcd11d"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Fri Oct 23 12:50:35 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Oct 23 12:52:00 2026"
      },
      "message": "Extract shared TestParameterInjector check helpers.\n\nMultiple checks in `com.google.errorprone.bugpatterns.testparameterinjector` duplicate `TestParameterInjector` type names, boolean and enum type predicates, and `@TestParameter` value-parsing helpers.\n\nConsolidate these shared constants and helper methods into package-private `TestParameterInjectorUtils` for reuse across existing and upcoming `TestParameterInjector` checks, and register `TestParameterInjectorUtils` in `non_checker_srcs`.\n\nPiperOrigin-RevId: 1005532597\n"
    },
    {
      "commit": "e5aac42137a69d8392cb80bec4ebe86396fcd11d",
      "tree": "2a51e4296e52b49d9b3021a01fe0e6c9b374ec4d",
      "parents": [
        "4d7d3c0bdddcc73fb57e148c830619aeb14a625f"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Thu Oct 22 18:26:17 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Oct 22 18:28:23 2026"
      },
      "message": "Refactor Error Prone bug patterns to use annotation mirrors and AnnotationNames\n\nAvoids reflective class-literal-based annotation lookups (`getAnnotation(Class\u003cT\u003e)`) in Error Prone bug patterns by reading `AnnotationMirror` and using `MoreAnnotations` helpers.\n\nReplaces duplicate string literal occurrences across bug patterns with `AnnotationNames` constants.\n\nKey changes:\n- `DoNotCallChecker`: updated `getDoNotCallValue` to use `MoreAnnotations.getStringValue(symbol, DO_NOT_CALL_ANNOTATION)`.\n- `IncompatibleModifiersChecker` \u0026 `RequiredModifiersChecker`: updated to use `MoreAnnotations.getEnumValues(symbol, ...)`.\n- `GuardedByUtils`: updated `getGuardValues` to use `sym.getAnnotationMirrors()` and `MoreAnnotations.getStrings`.\n- `UnnecessaryAssignment`: updated `isOptionalInject` to use `MoreAnnotations.getBooleanValue`.\n- `AbstractMockChecker`, `FieldCanBeFinal`, `ThreadSafety`, `AssistedParameters`: migrated to `AnnotationMirror` and `MoreAnnotations.asElement`.\n- `BadImport`, `DifferentNameButSame`, `NullableOnContainingClass`, `QualifierWithTypeUse`, `InvalidTargetingOnScopingAnnotation`, `RecordComponentAccessorAnnotationConflict`, `NullablePrimitiveArray`, `FieldCanBeLocal`: updated to use `MoreAnnotations.targetsElement` / `MoreAnnotations.getTargetElementTypes` / `MoreAnnotations.isTypeAnnotation`.\n- `ElementPredicates`, `MissingRuntimeRetention`: updated to use `MoreAnnotations.hasRuntimeRetention` / `MoreAnnotations.getRetentionPolicy` / `ASTHelpers.hasAnnotation`.\n- `NonOverridingEquals`, `BanClassLoader`: updated to use `ASTHelpers.hasAnnotation` with string literal.\n- `IncompatibleArgumentType`: updated to use `MoreAnnotations.getStringValue(symbol, ...)`.\n- `InlineMeData`, `Inliner`: updated to use `MoreAnnotations.getAnnotationWithSimpleName` and `MoreAnnotations.getStrings`.\n- `RestrictedApiChecker`: updated to use `MoreAnnotations.getTypeValue`, `MoreAnnotations.getTypes`, and `MoreAnnotations.getBooleanValue`.\n- Replaced annotation string literals with `AnnotationNames` constants across bug patterns.\n\nPiperOrigin-RevId: 1004922280\n"
    },
    {
      "commit": "4d7d3c0bdddcc73fb57e148c830619aeb14a625f",
      "tree": "48bf58c3d1242c313208f2960199a4d2c74845f9",
      "parents": [
        "4f83ec377cc37c4a0d0967779aa422c9f6fe124a"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Thu Oct 22 13:58:58 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Oct 22 14:00:40 2026"
      },
      "message": "Rip out `NonRuntimeAnnotation:AdditionalApis`.\n\nPiperOrigin-RevId: 1004742452\n"
    },
    {
      "commit": "4f83ec377cc37c4a0d0967779aa422c9f6fe124a",
      "tree": "5307b2dd2792b4f4c89e126791e9aabb3cb75738",
      "parents": [
        "47eb5be1fe42c30d73b62cf0af272488ffbdebe1"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Thu Oct 22 08:32:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 08:32:19 2026"
      },
      "message": "Add Maven 3.9.16 setup to release workflow\n\nAdded setup step for Maven 3.9.16 in the release workflow.\r\n\r\nSee also https://github.com/google/turbine/pull/524"
    },
    {
      "commit": "47eb5be1fe42c30d73b62cf0af272488ffbdebe1",
      "tree": "7f439b082683079d70039771515bcbf3afb40252",
      "parents": [
        "7e2efead12b4c099310fc5d7bb3456e6bd834ead"
      ],
      "author": {
        "name": "Error Prone Team",
        "email": "java-team-github-bot@google.com",
        "time": "Tue Oct 20 20:21:47 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 20 20:23:45 2026"
      },
      "message": "Exempt Apache Beam DoFn method annotations in WellKnownKeep\n\nAdd all Beam DoFn callback and lifecycle annotations to WellKnownKeep\u0027s EXEMPTING_METHOD_ANNOTATIONS list:\n- Timer callbacks: @OnTimer, @OnTimerFamily\n- Lifecycle methods: @Setup, @Teardown, @OnWindowExpiration\n- Execution constraints: @RequiresStableInput, @RequiresTimeSortedInput\n- Splittable DoFn methods: @GetInitialRestriction, @SplitRestriction, @TruncateRestriction, @GetRestrictionCoder, @NewTracker, @GetSize, @GetInitialWatermarkEstimatorState, @GetWatermarkEstimatorStateCoder, @NewWatermarkEstimator\n\nPreviously only ProcessElement, StartBundle, and FinishBundle were recognized, leading to false positives in UnusedMethod and EffectivelyPrivate on methods invoked reflectively or dynamically by the Beam runner.\n\nPiperOrigin-RevId: 1003345994\n"
    },
    {
      "commit": "7e2efead12b4c099310fc5d7bb3456e6bd834ead",
      "tree": "2169eda065f7a44d91e810de832aa85d80611534",
      "parents": [
        "0a9708634f5683865cfc30e08c1ebaf694c8c0ba"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Tue Oct 20 14:36:40 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 20 14:38:29 2026"
      },
      "message": "[IfChainToSwitch] Lower the minimum if-chain length from `5` to `4`\n\nPiperOrigin-RevId: 1003093819\n"
    },
    {
      "commit": "0a9708634f5683865cfc30e08c1ebaf694c8c0ba",
      "tree": "37f99af59fdb4c8012db8b76780506eb1f74f36e",
      "parents": [
        "f61d405aafd46662fbb5a69374f5333197b55e22"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Mon Oct 19 19:33:38 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 19 19:35:15 2026"
      },
      "message": "[IfChainToSwitch] address issue where deleting trailing code can cause compilation failure\n\nPiperOrigin-RevId: 1002518241\n"
    },
    {
      "commit": "f61d405aafd46662fbb5a69374f5333197b55e22",
      "tree": "3a84e9301f3cc7489bdb409d0679bb372ca949f0",
      "parents": [
        "854665b6924534eb866aa5cf5e65a3e42a506718"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Mon Oct 19 17:36:04 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 19 17:38:17 2026"
      },
      "message": "[Reachability] drop `skipLabel` from `visitContinue`\n\nPiperOrigin-RevId: 1002438466\n"
    },
    {
      "commit": "854665b6924534eb866aa5cf5e65a3e42a506718",
      "tree": "a8d95b9a80a6c2196861b8fb9e4af9521de96931",
      "parents": [
        "35884331592899a49c692bd5d0b3aca518869f34"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Thu Oct 15 08:13:48 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Oct 15 08:15:23 2026"
      },
      "message": "Collapse duplicated package prefixes in `_javac` source jar paths.\n\nPiperOrigin-RevId: 999944366\n"
    },
    {
      "commit": "35884331592899a49c692bd5d0b3aca518869f34",
      "tree": "f317ffcd11ae376904b7bf52b1c908f15aa1c486",
      "parents": [
        "b8a8390ac9938b9ec59530166525f0ef01f0b78d"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Wed Oct 14 16:02:46 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Oct 14 16:04:39 2026"
      },
      "message": "Introduce `-XepOpt:Nullness:LikelyPublicApiOnly\u003dtrue` for annotating only APIs that are likely to be accessible to users outside the package.\n\n(It\u0027s possible to \"trick\" the check by having a `private` or package-private class that is extended by a more visible class. But the point here is just to identify cases that are very _likely_ to be \"public API.\")\n\nPiperOrigin-RevId: 999407550\n"
    },
    {
      "commit": "b8a8390ac9938b9ec59530166525f0ef01f0b78d",
      "tree": "f1a39629235261af4f138c7734129dd093b5a8b5",
      "parents": [
        "59f98c3d9c0cb42a82f93a2661a54ba98d40803f"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Tue Oct 13 23:32:38 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 13 23:34:11 2026"
      },
      "message": "Merge CollectionUndefinedEquality and ArrayAsKeyOfSetOrMap into UndefinedEquals.\n\n`UndefinedEquals`, `CollectionUndefinedEquality`, and `ArrayAsKeyOfSetOrMap` all report code that relies on `equals` or `hashCode` of types where those methods aren\u0027t meaningful, but each covered a different subset of use sites: direct equality, collection containment, and hash-based container creation.\n\nAdd `AbstractEqualsHashCodeUsageChecker`, which finds the places where code relies on `equals` and `hashCode`, either explicitly or implicitly through collections, and lets each check decide which types are a problem for each kind of use. Rebuild `UndefinedEquals` on top of it, absorbing the other two checks and keeping their names as `altNames` so existing suppressions and `-Xep` flags keep working.\n\nPiperOrigin-RevId: 998967393\n"
    },
    {
      "commit": "59f98c3d9c0cb42a82f93a2661a54ba98d40803f",
      "tree": "7f31cd84c01c2561fa30428850da7510e526b46f",
      "parents": [
        "08e222c543214942594fae201f6746685aaf3c12"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Tue Oct 13 21:15:53 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 13 21:19:39 2026"
      },
      "message": "Allow `\u003d\u003d` comparisons on `Tree` instances.\n\nNone of javac\u0027s `Tree` implementations override `Object.equals`, so reference equality behaves identically to `equals` while avoiding verbosity and `NullPointerException`.\n\n(This came up again in unknown commit and maybe another time previously?)\n\nPiperOrigin-RevId: 998886008\n"
    },
    {
      "commit": "08e222c543214942594fae201f6746685aaf3c12",
      "tree": "f2093c9cbf6e350bcb4881e1d45c06198b46871d",
      "parents": [
        "245ddd2936ee85b0e3971449f3bd751493d0aa7a"
      ],
      "author": {
        "name": "Error Prone Team",
        "email": "java-team-github-bot@google.com",
        "time": "Tue Oct 13 19:20:12 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 13 19:21:22 2026"
      },
      "message": "Resolve canonical owner of static imports to the most general accessible supertype.\n\n`StaticImports.tryCreate` previously resolved the canonical owner of an imported static member directly to `member.owner` without verifying whether that declaring type is accessible from the package of the importing compilation unit. When a public type inherits constants from a package-private supertype or super-interface (such as protobuf `large_enum \u003d true` shard interfaces), `NonCanonicalStaticMemberImport` suggested importing from the inaccessible package-private type outside its package.\n\nWalk `types.closure(baseType.type)` in `canonicalOwner` to select the most general supertype that is a subtype of `member.owner` and whose type (and any enclosing types) is accessible from the importing package, and only treat a single imported `ClassSymbol` as a canonical type import when it is similarly accessible from the importing package.\n\nPiperOrigin-RevId: 998810316\n"
    },
    {
      "commit": "245ddd2936ee85b0e3971449f3bd751493d0aa7a",
      "tree": "cf73de93dcfcbdab62ad059d600a03a2a92960c8",
      "parents": [
        "9360a0a9423f0e4be68f3683dcfa080460ed0827"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Tue Oct 13 19:05:39 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 13 19:09:20 2026"
      },
      "message": "[Reachability] count a labeled `break` only against the labeled statement\n\nPiperOrigin-RevId: 998800813\n"
    },
    {
      "commit": "9360a0a9423f0e4be68f3683dcfa080460ed0827",
      "tree": "7be5cd338ab269645cc5289308b21b120d4c3176",
      "parents": [
        "f61f6fa20c2b609d9f7daa9bb7c6a2fb0c1b4a16"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Tue Oct 13 17:59:06 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 13 18:00:38 2026"
      },
      "message": "Don\u0027t suggest adding `@Nullable` to `Class\u003cVoid\u003e` or `TypeToken\u003cVoid\u003e`.\n\nWe consider both of those classes to require non-null type arguments, since there would be no difference between `Class\u003c@NonNull Void\u003e` and `Class\u003c@Nullable Void\u003e` except that nullness checkers would complain if you tried to mix them.\n\nPiperOrigin-RevId: 998751332\n"
    },
    {
      "commit": "f61f6fa20c2b609d9f7daa9bb7c6a2fb0c1b4a16",
      "tree": "3a56d762ca1f7bf85a69e94915fb3b735099d56e",
      "parents": [
        "d5b3014bd3003baeb0a4b086758c8f04032a6285"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Tue Oct 13 15:27:51 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 13 15:29:42 2026"
      },
      "message": "[Reachability] add tests showing that a labeled `break` is counted against the statement it labels\n\nPiperOrigin-RevId: 998653845\n"
    },
    {
      "commit": "d5b3014bd3003baeb0a4b086758c8f04032a6285",
      "tree": "dc86bfab56f4738939995fc266abb4a163a9dc69",
      "parents": [
        "3feb303747e79b195fb4bb05a4168248a0ed7e48"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Tue Oct 13 07:57:17 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Tue Oct 13 07:58:20 2026"
      },
      "message": "Check enclosing classes when applying `RefasterRule` to a subtree `TreePath`\n\nCheck ancestor trees in `RefasterScanner.scan(TreePath, Context)` so `isSuppressed` and the self-application check still take effect on subtree paths, and revert the blanket skip of `@BeforeTemplate` and `@Placeholder` methods in `RefasterScanner.visitMethod` so other Refaster rules can match inside `@BeforeTemplate` methods (see https://github.com/google/error-prone/pull/6195#issuecomment-6127694134).\n\nPiperOrigin-RevId: 998444201\n"
    },
    {
      "commit": "3feb303747e79b195fb4bb05a4168248a0ed7e48",
      "tree": "bf09e27d4cf6f58da5f9d3c47473802f698eb0a0",
      "parents": [
        "077fe54b34a51f770d677d71d0bbdc70a7c0f27d"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Mon Oct 12 14:54:57 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 12 14:55:56 2026"
      },
      "message": "[IfChainToSwitch] document where deleting code is incorrect\n\nPiperOrigin-RevId: 997919134\n"
    },
    {
      "commit": "077fe54b34a51f770d677d71d0bbdc70a7c0f27d",
      "tree": "ab1661e8e9812725b0c6e8117eb7015981ca3b3c",
      "parents": [
        "05b284038356134e8284e0cbfc0398d41ea61469"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Mon Oct 12 12:18:25 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 12 12:19:57 2026"
      },
      "message": "Migrate from `@RestrictedApi` `allowedOnPath` to `allowedPaths`\n\nPiperOrigin-RevId: 997852193\n"
    },
    {
      "commit": "05b284038356134e8284e0cbfc0398d41ea61469",
      "tree": "43b35525cf8e7ad00d9badb020bc4826120efec9",
      "parents": [
        "6bfe989150b4ac39b1f0d56fed17d8171a6e603c"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Mon Oct 12 09:01:21 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Mon Oct 12 09:03:08 2026"
      },
      "message": "Skip `@BeforeTemplate` and `@Placeholder` methods in `RefasterScanner`.\n\nPreviously, `RefasterScanner` only skipped the template class defining the rule currently being scanned, so other Refaster rules would still match patterns inside `@BeforeTemplate` and `@Placeholder` methods.\n\nPiperOrigin-RevId: 997769712\n"
    },
    {
      "commit": "6bfe989150b4ac39b1f0d56fed17d8171a6e603c",
      "tree": "cb1f0c3beabd70cf82cf5a00d6b73034183c5e2e",
      "parents": [
        "216a1d80954c970638a9c2dc1bbe73f70835135a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Oct 11 15:45:24 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Sun Oct 11 15:47:09 2026"
      },
      "message": "Bump the dependencies group with 7 updates\n\nBumps the dependencies group with 7 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [com.google.guava:guava-testlib](https://github.com/google/guava) | `33.7.1-jre` | `33.7.2-jre` |\n| [com.google.guava:guava](https://github.com/google/guava) | `33.7.1-jre` | `33.7.2-jre` |\n| com.google.testparameterinjector:test-parameter-injector | `1.23` | `1.24` |\n| [org.safere:safere](https://github.com/eaftan/safere) | `0.11.0` | `1.0.0` |\n| [com.google.googlejavaformat:google-java-format](https://github.com/google/google-java-format) | `1.36.1` | `1.37.0` |\n| [joda-time:joda-time](https://github.com/JodaOrg/joda-time) | `2.14.4` | `2.15.0` |\n| [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework) | `4.2.3` | `4.3.0` |\n\nUpdates `com.google.guava:guava-testlib` from 33.7.1-jre to 33.7.2-jre\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/google/guava/releases\"\u003ecom.google.guava:guava-testlib\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e33.7.2\u003c/h2\u003e\n\u003ch3\u003eMaven\u003c/h3\u003e\n\u003cpre lang\u003d\"xml\"\u003e\u003ccode\u003e\u0026lt;dependency\u0026gt;\n  \u0026lt;groupId\u0026gt;com.google.guava\u0026lt;/groupId\u0026gt;\n  \u0026lt;artifactId\u0026gt;guava\u0026lt;/artifactId\u0026gt;\n  \u0026lt;version\u0026gt;33.7.2-jre\u0026lt;/version\u0026gt;\n  \u0026lt;!-- or, for Android: --\u0026gt;\n  \u0026lt;version\u0026gt;33.7.2-android\u0026lt;/version\u0026gt;\n\u0026lt;/dependency\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eJar files\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://repo1.maven.org/maven2/com/google/guava/guava/33.7.2-jre/guava-33.7.2-jre.jar\"\u003e33.7.2-jre.jar\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://repo1.maven.org/maven2/com/google/guava/guava/33.7.2-android/guava-33.7.2-android.jar\"\u003e33.7.2-android.jar\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eGuava requires\n\u003ca href\u003d\"https://github.com/google/guava/wiki/UseGuavaInYourBuild#what-about-guavas-own-dependencies\"\u003eone runtime dependency\u003c/a\u003e,\nwhich you can download here:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://repo1.maven.org/maven2/com/google/guava/failureaccess/1.0.3/failureaccess-1.0.3.jar\"\u003efailureaccess-1.0.3.jar\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eJavadoc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-jre/api/docs/\"\u003e33.7.2-jre\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-android/api/docs/\"\u003e33.7.2-android\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eJDiff\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-jre/api/diffs/\"\u003e33.7.2-jre vs. 33.7.1-jre\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-android/api/diffs/\"\u003e33.7.2-android vs. 33.7.1-android\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-android/api/androiddiffs/\"\u003e33.7.2-android vs. 33.7.2-jre\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChangelog\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecollect\u003c/code\u003e: Changed \u003ccode\u003eMapMaker\u003c/code\u003e, \u003ccode\u003eCompactHashMap\u003c/code\u003e, and \u003ccode\u003eCompactHashSet\u003c/code\u003e deserialization to \u003ca href\u003d\"https://github.com/google/guava/security/advisories/GHSA-xxph-c9ww-hj94\"\u003eavoid eagerly allocating as much memory as a serialization payload requests\u003c/a\u003e (\u003ca href\u003d\"https://www.cve.org/CVERecord?id\u003dCVE-2026-102554\"\u003eCVE-2026-102554\u003c/a\u003e). (a0d0c36432)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/google/guava/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `com.google.guava:guava` from 33.7.1-jre to 33.7.2-jre\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/google/guava/releases\"\u003ecom.google.guava:guava\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e33.7.2\u003c/h2\u003e\n\u003ch3\u003eMaven\u003c/h3\u003e\n\u003cpre lang\u003d\"xml\"\u003e\u003ccode\u003e\u0026lt;dependency\u0026gt;\n  \u0026lt;groupId\u0026gt;com.google.guava\u0026lt;/groupId\u0026gt;\n  \u0026lt;artifactId\u0026gt;guava\u0026lt;/artifactId\u0026gt;\n  \u0026lt;version\u0026gt;33.7.2-jre\u0026lt;/version\u0026gt;\n  \u0026lt;!-- or, for Android: --\u0026gt;\n  \u0026lt;version\u0026gt;33.7.2-android\u0026lt;/version\u0026gt;\n\u0026lt;/dependency\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eJar files\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://repo1.maven.org/maven2/com/google/guava/guava/33.7.2-jre/guava-33.7.2-jre.jar\"\u003e33.7.2-jre.jar\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://repo1.maven.org/maven2/com/google/guava/guava/33.7.2-android/guava-33.7.2-android.jar\"\u003e33.7.2-android.jar\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eGuava requires\n\u003ca href\u003d\"https://github.com/google/guava/wiki/UseGuavaInYourBuild#what-about-guavas-own-dependencies\"\u003eone runtime dependency\u003c/a\u003e,\nwhich you can download here:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://repo1.maven.org/maven2/com/google/guava/failureaccess/1.0.3/failureaccess-1.0.3.jar\"\u003efailureaccess-1.0.3.jar\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eJavadoc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-jre/api/docs/\"\u003e33.7.2-jre\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-android/api/docs/\"\u003e33.7.2-android\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eJDiff\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-jre/api/diffs/\"\u003e33.7.2-jre vs. 33.7.1-jre\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-android/api/diffs/\"\u003e33.7.2-android vs. 33.7.1-android\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-android/api/androiddiffs/\"\u003e33.7.2-android vs. 33.7.2-jre\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChangelog\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecollect\u003c/code\u003e: Changed \u003ccode\u003eMapMaker\u003c/code\u003e, \u003ccode\u003eCompactHashMap\u003c/code\u003e, and \u003ccode\u003eCompactHashSet\u003c/code\u003e deserialization to \u003ca href\u003d\"https://github.com/google/guava/security/advisories/GHSA-xxph-c9ww-hj94\"\u003eavoid eagerly allocating as much memory as a serialization payload requests\u003c/a\u003e (\u003ca href\u003d\"https://www.cve.org/CVERecord?id\u003dCVE-2026-102554\"\u003eCVE-2026-102554\u003c/a\u003e). (a0d0c36432)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/google/guava/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `com.google.testparameterinjector:test-parameter-injector` from 1.23 to 1.24\n\nUpdates `org.safere:safere` from 0.11.0 to 1.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/eaftan/safere/releases\"\u003eorg.safere:safere\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSafeRE 1.0.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eSafeRE 1.0.0 is the first major release of SafeRE: linear-time regular expressions for Java, with \u003ccode\u003ejava.util.regex\u003c/code\u003e-compatible behavior within that constraint and direct UTF-8 matching. This release improves Unicode grapheme handling, fixes matching and capture edge cases, and speeds up literal searches and DFA-heavy workloads. Java 21 or later is required.\u003c/p\u003e\n\u003ch2\u003eMigration from 0.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe retired multi-anchor gap executor and its public diagnostics enum constant, \u003ccode\u003eMatchStrategy.MULTI_ANCHOR\u003c/code\u003e, have been removed. Update any references or exhaustive switches over that constant; matching continues through the remaining engines and accelerators. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/865\"\u003e#865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSafeRE\u0027s supported syntax and documented compatibility boundaries still apply. Backreferences, lookaround, atomic groups, \u003ccode\u003e\\G\u003c/code\u003e, and consuming possessive quantifiers remain unsupported; see the \u003ca href\u003d\"https://github.com/eaftan/safere/blob/v1.0.0/docs/SYNTAX.md\"\u003esyntax guide\u003c/a\u003e and \u003ca href\u003d\"https://github.com/eaftan/safere/blob/v1.0.0/INTENTIONAL_DIVERGENCES.md\"\u003eintentional divergences\u003c/a\u003e when migrating from \u003ccode\u003ejava.util.regex\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eCompatibility and correctness\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAlign \u003ccode\u003e\\X\u003c/code\u003e grapheme segmentation with Unicode 17 data, including format controls, extenders, spacing marks, prepend characters, and Indic conjuncts. Grapheme tables now come from pinned public Unicode data. Preserve Unicode segmentation for unassigned code points instead of treating all unassigned code points as grapheme controls, and document the intentional JDK difference. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/932\"\u003e#932\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake Unicode case equivalence symmetric. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/870\"\u003e#870\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix deferred capture coordinates in opaque matcher regions and reverse DFA searches starting inside surrogate pairs. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/887\"\u003e#887\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/930\"\u003e#930\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve consuming branches after deferred DFA matches, refresh DFA storage references after allocation, and restrict start acceleration to unanchored forward states. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/859\"\u003e#859\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/886\"\u003e#886\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix case-insensitive UTF-8 prefix scan bounds at logical slice ends. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/885\"\u003e#885\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocument intentional differences in quoting inside comments and matcher state after a terminal empty \u003ccode\u003efind()\u003c/code\u003e, with regression and differential coverage. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/860\"\u003e#860\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/933\"\u003e#933\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePerformance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImprove literal selection and String searches with rare-character anchors, single-character search kernels, and bounded fallback when candidate density makes acceleration unproductive. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/876\"\u003e#876\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/883\"\u003e#883\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/901\"\u003e#901\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/905\"\u003e#905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccelerate exact-case and Unicode-case-insensitive UTF-8 literal searches and literal-prefix filtering, while bounding verification work across retries and repeated finds. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/919\"\u003e#919\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/920\"\u003e#920\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/924\"\u003e#924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFlush and rebuild productive DFA caches on state-budget exhaustion, with backoff and recovery for unproductive workloads. The reported Rebar bounded-repeat workload improved by about 3× across String, UTF-8, and vector configurations. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/908\"\u003e#908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReduce capture speculation, resolve variable-offset start candidates against leading character classes, verify nullable leading expansions at the inner match, and base accelerator backoff on actual skipped work. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/878\"\u003e#878\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/906\"\u003e#906\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/915\"\u003e#915\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/896\"\u003e#896\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rejection prefilters and fast-reject non-matching start-anchored replacements. The reported Rebar Ruff workload improved by about 2.4× on the String path through single-character class rejection. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/910\"\u003e#910\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/922\"\u003e#922\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/927\"\u003e#927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDispatch experimental vector scans according to each search window and strengthen dispatch auditing. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/861\"\u003e#861\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/862\"\u003e#862\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/909\"\u003e#909\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eOther changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePublish development snapshots after successful \u003ccode\u003emain\u003c/code\u003e CI and correct SCM URLs in published Maven POMs. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/897\"\u003e#897\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/877\"\u003e#877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand randomized UTF-8, capture-bound, repeated-find, and scan-boundary coverage; add Rebar benchmark results and additional native benchmark workloads. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/875\"\u003e#875\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/907\"\u003e#907\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/918\"\u003e#918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReorganize the documentation and refresh the README with a new SafeRE logo. (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/942\"\u003e#942\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/eaftan/safere/pull/943\"\u003e#943\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eThanks to \u003ca href\u003d\"https://github.com/cushon\"\u003e\u003ccode\u003e@​cushon\u003c/code\u003e\u003c/a\u003e for search acceleration, DFA cache recovery, Unicode grapheme work, and stronger differential and dispatch coverage, and \u003ca href\u003d\"https://github.com/wendigo\"\u003e\u003ccode\u003e@​wendigo\u003c/code\u003e\u003c/a\u003e for correcting published Maven SCM metadata. Thanks also to \u003ca href\u003d\"https://github.com/eaftan\"\u003e\u003ccode\u003e@​eaftan\u003c/code\u003e\u003c/a\u003e for compatibility fixes, UTF-8 search improvements, release infrastructure, and documentation.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href\u003d\"https://github.com/eaftan/safere/compare/v0.11.0...v1.0.0\"\u003ehttps://github.com/eaftan/safere/compare/v0.11.0...v1.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eaftan/safere/commit/09c4812d41221294f3dc4958ca41c7490b27bc06\"\u003e\u003ccode\u003e09c4812\u003c/code\u003e\u003c/a\u003e Prepare installation examples for SafeRE 1.0.0 (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/issues/953\"\u003e#953\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eaftan/safere/commit/38a051623c6c9ad0fb295b3e4046cc444922efed\"\u003e\u003ccode\u003e38a0516\u003c/code\u003e\u003c/a\u003e Exclude unsupported previous-match anchor and atomic groups in fuzz compiler ...\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eaftan/safere/commit/86066ee271cf887a68e5b51d5eed258c3f42a37a\"\u003e\u003ccode\u003e86066ee\u003c/code\u003e\u003c/a\u003e Reorganize documentation and refresh the SafeRE README (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/issues/942\"\u003e#942\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eaftan/safere/commit/30ae754981ab2b3529e8b5214da628230218a6c4\"\u003e\u003ccode\u003e30ae754\u003c/code\u003e\u003c/a\u003e Add SafeRE logo to README (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/issues/943\"\u003e#943\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eaftan/safere/commit/5bfcec92acda26fcde50fc8bc510f3a4afe855ea\"\u003e\u003ccode\u003e5bfcec9\u003c/code\u003e\u003c/a\u003e Preserve unassigned grapheme semantics and document JDK divergence (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/issues/932\"\u003e#932\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eaftan/safere/commit/f63b00212573e7d2467dc0803481b85a82a75a68\"\u003e\u003ccode\u003ef63b002\u003c/code\u003e\u003c/a\u003e Discourage dependencies on JDK internals (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/issues/941\"\u003e#941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eaftan/safere/commit/39565b2dc2af4b5b1c980e5cafd78066e6cdb55d\"\u003e\u003ccode\u003e39565b2\u003c/code\u003e\u003c/a\u003e Document and test intentional exhausted matcher state divergence (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/issues/933\"\u003e#933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eaftan/safere/commit/a9f90efb5910399b81f2ce509bc233b338476743\"\u003e\u003ccode\u003ea9f90ef\u003c/code\u003e\u003c/a\u003e Bump org.codehaus.mojo:build-helper-maven-plugin (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/issues/937\"\u003e#937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eaftan/safere/commit/848d0597dd34330ffd3218d8504fd2ab657888c3\"\u003e\u003ccode\u003e848d059\u003c/code\u003e\u003c/a\u003e Keep reverse DFA search within surrogate-interior start (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/issues/930\"\u003e#930\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eaftan/safere/commit/6eea37ab5aa081cac2a9483b82a15711540949d2\"\u003e\u003ccode\u003e6eea37a\u003c/code\u003e\u003c/a\u003e Streamline agent guidance and scope local validation (\u003ca href\u003d\"https://redirect.github.com/eaftan/safere/issues/934\"\u003e#934\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/eaftan/safere/compare/v0.11.0...v1.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `com.google.googlejavaformat:google-java-format` from 1.36.1 to 1.37.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/google/google-java-format/releases\"\u003ecom.google.googlejavaformat:google-java-format\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.37.0\u003c/h2\u003e\n\u003cp\u003eChanges:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a \u003ccode\u003e--max-line-length\u003c/code\u003e flag (\u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMarkdown javadoc formatting improvements (c51d6916518ab4dfffbb086449fa00f7160ae468, ecba4fb24fd064a64d2918c5fdb45546d08e3063)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--google-style\u003c/code\u003e and \u003ccode\u003e--style\u003dgoogle|aosp\u003c/code\u003e flags for easier switching between Google and AOSP style (\u003ca href\u003d\"https://redirect.github.com/google/google-java-format/issues/1415\"\u003e#1415\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFull Changelog: \u003ca href\u003d\"https://github.com/google/google-java-format/compare/v1.36.1...v1.37.0\"\u003ehttps://github.com/google/google-java-format/compare/v1.36.1...v1.37.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/d34669338e718f197048a54e2cff152b919de40c\"\u003e\u003ccode\u003ed346693\u003c/code\u003e\u003c/a\u003e Release google-java-format 1.37.0\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/f70f5e1b8738352f81f9275a1353c78ccf3c7f9c\"\u003e\u003ccode\u003ef70f5e1\u003c/code\u003e\u003c/a\u003e Cache indentation spaces lazily in JavaOutput.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/6b868494b55eb91f322abd1af41deb434fbe133d\"\u003e\u003ccode\u003e6b86849\u003c/code\u003e\u003c/a\u003e Add --max-line-length and --style options, and programmatic tab support, to g...\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/4c732b859307820bd8aa420cf0a202a7c6fe8327\"\u003e\u003ccode\u003e4c732b8\u003c/code\u003e\u003c/a\u003e Rewrite code so it doesn\u0027t use negative lookahead in a regex.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/81650924a7e3cb10bc156f822018417642f1fe31\"\u003e\u003ccode\u003e8165092\u003c/code\u003e\u003c/a\u003e Add --google-style to select Google Style\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/ed872072f70c5956bbe1eafc4c5834830309be23\"\u003e\u003ccode\u003eed87207\u003c/code\u003e\u003c/a\u003e Use inherited EMPTY_RANGE in JavaOutput to eliminate Formatter dependency.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/4b088d248c524fcb93c23d174e271b69824f1c7b\"\u003e\u003ccode\u003e4b088d2\u003c/code\u003e\u003c/a\u003e Replace calls to \u003ccode\u003eRunnables.doNothing()\u003c/code\u003e with a do-nothing lambda, \u003ccode\u003e() -\u0026gt; {}\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/b291d957157c737ee6ac9574c1ea9c8c0ec077c2\"\u003e\u003ccode\u003eb291d95\u003c/code\u003e\u003c/a\u003e Fix duplicate blank lines before \u003ccode\u003eM O E\u003c/code\u003e end strip comment tag\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/c6c150d775215ac01f96107b707eb59ddc6f6a1d\"\u003e\u003ccode\u003ec6c150d\u003c/code\u003e\u003c/a\u003e Move google-java-format settings page to Tools section.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/google/google-java-format/commit/4b3d373162c10973a87e4ecde19830ae6d22d34c\"\u003e\u003ccode\u003e4b3d373\u003c/code\u003e\u003c/a\u003e Bump the dependencies group across 1 directory with 2 updates\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/google/google-java-format/compare/v1.36.1...v1.37.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `com.google.guava:guava` from 33.7.1-jre to 33.7.2-jre\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/google/guava/releases\"\u003ecom.google.guava:guava\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e33.7.2\u003c/h2\u003e\n\u003ch3\u003eMaven\u003c/h3\u003e\n\u003cpre lang\u003d\"xml\"\u003e\u003ccode\u003e\u0026lt;dependency\u0026gt;\n  \u0026lt;groupId\u0026gt;com.google.guava\u0026lt;/groupId\u0026gt;\n  \u0026lt;artifactId\u0026gt;guava\u0026lt;/artifactId\u0026gt;\n  \u0026lt;version\u0026gt;33.7.2-jre\u0026lt;/version\u0026gt;\n  \u0026lt;!-- or, for Android: --\u0026gt;\n  \u0026lt;version\u0026gt;33.7.2-android\u0026lt;/version\u0026gt;\n\u0026lt;/dependency\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eJar files\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://repo1.maven.org/maven2/com/google/guava/guava/33.7.2-jre/guava-33.7.2-jre.jar\"\u003e33.7.2-jre.jar\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://repo1.maven.org/maven2/com/google/guava/guava/33.7.2-android/guava-33.7.2-android.jar\"\u003e33.7.2-android.jar\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eGuava requires\n\u003ca href\u003d\"https://github.com/google/guava/wiki/UseGuavaInYourBuild#what-about-guavas-own-dependencies\"\u003eone runtime dependency\u003c/a\u003e,\nwhich you can download here:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://repo1.maven.org/maven2/com/google/guava/failureaccess/1.0.3/failureaccess-1.0.3.jar\"\u003efailureaccess-1.0.3.jar\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eJavadoc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-jre/api/docs/\"\u003e33.7.2-jre\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-android/api/docs/\"\u003e33.7.2-android\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eJDiff\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-jre/api/diffs/\"\u003e33.7.2-jre vs. 33.7.1-jre\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-android/api/diffs/\"\u003e33.7.2-android vs. 33.7.1-android\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://guava.dev/releases/33.7.2-android/api/androiddiffs/\"\u003e33.7.2-android vs. 33.7.2-jre\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChangelog\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecollect\u003c/code\u003e: Changed \u003ccode\u003eMapMaker\u003c/code\u003e, \u003ccode\u003eCompactHashMap\u003c/code\u003e, and \u003ccode\u003eCompactHashSet\u003c/code\u003e deserialization to \u003ca href\u003d\"https://github.com/google/guava/security/advisories/GHSA-xxph-c9ww-hj94\"\u003eavoid eagerly allocating as much memory as a serialization payload requests\u003c/a\u003e (\u003ca href\u003d\"https://www.cve.org/CVERecord?id\u003dCVE-2026-102554\"\u003eCVE-2026-102554\u003c/a\u003e). (a0d0c36432)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/google/guava/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `joda-time:joda-time` from 2.14.4 to 2.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/JodaOrg/joda-time/releases\"\u003ejoda-time:joda-time\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v2.15.0\u003c/h2\u003e\n\u003cp\u003eSee the \u003ca href\u003d\"https://www.joda.org/joda-time/changes-report.html#a2.15.0\"\u003echange notes\u003c/a\u003e for more information.\u003c/p\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix DelegatedDurationField by \u003ca href\u003d\"https://github.com/jodastephen\"\u003e\u003ccode\u003e@​jodastephen\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/JodaOrg/joda-time/pull/838\"\u003eJodaOrg/joda-time#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate time zone data to 2026egtz by \u003ca href\u003d\"https://github.com/jodastephen\"\u003e\u003ccode\u003e@​jodastephen\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/JodaOrg/joda-time/pull/841\"\u003eJodaOrg/joda-time#841\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/JodaOrg/joda-time/compare/v2.14.4...v2.15.0\"\u003ehttps://github.com/JodaOrg/joda-time/compare/v2.14.4...v2.15.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/JodaOrg/joda-time/commit/5ffcf3c2bce34c95207ef2746229a40a932afeee\"\u003e\u003ccode\u003e5ffcf3c\u003c/code\u003e\u003c/a\u003e Release v2.15.0\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/JodaOrg/joda-time/commit/d6135ac0ba1d2ec4193cfc8cf93a9fc6159e1844\"\u003e\u003ccode\u003ed6135ac\u003c/code\u003e\u003c/a\u003e Update time zone data to 2026egtz (\u003ca href\u003d\"https://redirect.github.com/JodaOrg/joda-time/issues/841\"\u003e#841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/JodaOrg/joda-time/commit/4b7867a245ad7f3327f6dd09c36fbb913d234feb\"\u003e\u003ccode\u003e4b7867a\u003c/code\u003e\u003c/a\u003e Fix DelegatedDurationField (\u003ca href\u003d\"https://redirect.github.com/JodaOrg/joda-time/issues/838\"\u003e#838\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/JodaOrg/joda-time/commit/9c34f03b79ea70cd63ddf8ab88723805c872d7a1\"\u003e\u003ccode\u003e9c34f03\u003c/code\u003e\u003c/a\u003e Fix changes.xml\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/JodaOrg/joda-time/compare/v2.14.4...v2.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `org.checkerframework:checker-qual` from 4.2.3 to 4.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/typetools/checker-framework/releases\"\u003eorg.checkerframework:checker-qual\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eChecker Framework 4.3.0\u003c/h2\u003e\n\u003ch2\u003eVersion 4.3.0 (2026-10-01)\u003c/h2\u003e\n\u003ch3\u003eUser-visible changes\u003c/h3\u003e\n\u003cp\u003eThe new Modifiability Checker warns when a program might throw \u003ccode\u003eUnsupportedOperationException\u003c/code\u003e at run time because it calls a mutating method on a collection that does not support the method.\u003c/p\u003e\n\u003cp\u003eThe new \u003ccode\u003ewpi2.sh\u003c/code\u003e script does whole-program inference, but requires buildfile edits.\u003c/p\u003e\n\u003cp\u003ePurity Checker:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRenamed message keys \u003ccode\u003epurity.not.deterministic.X\u003c/code\u003e, \u003ccode\u003epurity.not.sideeffectfree.X\u003c/code\u003e, and \u003ccode\u003epurity.not.deterministic.not.sideeffectfree.X\u003c/code\u003e to \u003ccode\u003epurity.X\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-AcheckPurityAnnotations\u003c/code\u003e issues warnings that it missed previously.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe Checker Framework runs under JDK 27 -- that is, it runs on a version 27 JVM.\u003c/p\u003e\n\u003cp\u003eThe Checker Framework runs noticeably faster, due to performance tuning.\u003c/p\u003e\n\u003cp\u003eThe HTML version of the manual has a new look.  In addition to the single-page version, there is a \u003ca href\u003d\"https://checkerframework.org/manual/manual-multipage.html\"\u003emulti-page version\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eChanges for type system implementers\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eJavaParserUtil\u003c/code\u003e: moved \u003ccode\u003eDEFAULT_LANGUAGE_LEVEL\u003c/code\u003e, \u003ccode\u003eparseCompilationUnit()\u003c/code\u003e, \u003ccode\u003eparseStubUnit()\u003c/code\u003e, and \u003ccode\u003eparseExpression()\u003c/code\u003e into new class \u003ccode\u003eStaticJavaParserUtil\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eRenamed \u003ccode\u003eAnnotatedTypes.innerMostType()\u003c/code\u003e to \u003ccode\u003einnermostComponentType()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eRemoved the unused method\n\u003ccode\u003eWholeProgramInferenceScenesStorage.updateAnnotationSetInScene()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eMethods that used to return (or accept) an \u003ccode\u003eIPair\u003c/code\u003e now use a record with meaningful component names.\u003c/p\u003e\n\u003ch3\u003eClosed issues\u003c/h3\u003e\n\u003cp\u003e\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/294\"\u003e#294\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1170\"\u003e#1170\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1184\"\u003e#1184\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1256\"\u003e#1256\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1440\"\u003e#1440\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1444\"\u003e#1444\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1669\"\u003e#1669\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2090\"\u003e#2090\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2172\"\u003e#2172\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2429\"\u003e#2429\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2448\"\u003e#2448\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2561\"\u003e#2561\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2637\"\u003e#2637\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2704\"\u003e#2704\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2722\"\u003e#2722\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2770\"\u003e#2770\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2896\"\u003e#2896\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2995\"\u003e#2995\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3015\"\u003e#3015\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3025\"\u003e#3025\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3027\"\u003e#3027\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3146\"\u003e#3146\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3281\"\u003e#3281\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3624\"\u003e#3624\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/4690\"\u003e#4690\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/4708\"\u003e#4708\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/4754\"\u003e#4754\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/5064\"\u003e#5064\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/5201\"\u003e#5201\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6038\"\u003e#6038\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6716\"\u003e#6716\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6741\"\u003e#6741\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6748\"\u003e#6748\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6756\"\u003e#6756\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6768\"\u003e#6768\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6832\"\u003e#6832\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6881\"\u003e#6881\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/7023\"\u003e#7023\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/7049\"\u003e#7049\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/7064\"\u003e#7064\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/7311\"\u003e#7311\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/7683\"\u003e#7683\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8053\"\u003e#8053\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8054\"\u003e#8054\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8055\"\u003e#8055\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8167\"\u003e#8167\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8168\"\u003e#8168\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8169\"\u003e#8169\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8238\"\u003e#8238\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8261\"\u003e#8261\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8284\"\u003e#8284\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md\"\u003eorg.checkerframework:checker-qual\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 4.3.0 (2026-10-01)\u003c/h2\u003e\n\u003ch3\u003eUser-visible changes\u003c/h3\u003e\n\u003cp\u003eThe new Modifiability Checker warns when a program might throw\n\u003ccode\u003eUnsupportedOperationException\u003c/code\u003e at run time because it calls a mutating method on\na collection that does not support the method.\u003c/p\u003e\n\u003cp\u003eThe new \u003ccode\u003ewpi2.sh\u003c/code\u003e script does whole-program inference, but requires buildfile edits.\u003c/p\u003e\n\u003cp\u003ePurity Checker:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRenamed message keys \u003ccode\u003epurity.not.deterministic.X\u003c/code\u003e,\n\u003ccode\u003epurity.not.sideeffectfree.X\u003c/code\u003e, and\n\u003ccode\u003epurity.not.deterministic.not.sideeffectfree.X\u003c/code\u003e to \u003ccode\u003epurity.X\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-AcheckPurityAnnotations\u003c/code\u003e issues warnings that it missed previously.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe Checker Framework runs under JDK 27 -- that is, it runs on a version 27 JVM.\u003c/p\u003e\n\u003cp\u003eThe Checker Framework runs noticeably faster, due to performance tuning.\u003c/p\u003e\n\u003cp\u003eThe HTML version of the manual has a new look.  In addition to the\nsingle-page version, there is a\n\u003ca href\u003d\"https://checkerframework.org/manual/manual-multipage.html\"\u003emulti-page version\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eChanges for type system implementers\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eJavaParserUtil\u003c/code\u003e: moved \u003ccode\u003eDEFAULT_LANGUAGE_LEVEL\u003c/code\u003e, \u003ccode\u003eparseCompilationUnit()\u003c/code\u003e,\n\u003ccode\u003eparseStubUnit()\u003c/code\u003e, and \u003ccode\u003eparseExpression()\u003c/code\u003e into new class \u003ccode\u003eStaticJavaParserUtil\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eRenamed \u003ccode\u003eAnnotatedTypes.innerMostType()\u003c/code\u003e to \u003ccode\u003einnermostComponentType()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eRemoved the unused method\n\u003ccode\u003eWholeProgramInferenceScenesStorage.updateAnnotationSetInScene()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eMethods that used to return (or accept) an \u003ccode\u003eIPair\u003c/code\u003e now use a record with\nmeaningful component names.\u003c/p\u003e\n\u003ch3\u003eClosed issues\u003c/h3\u003e\n\u003cp\u003e\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/294\"\u003e#294\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1170\"\u003e#1170\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1184\"\u003e#1184\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1256\"\u003e#1256\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1440\"\u003e#1440\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1444\"\u003e#1444\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/1669\"\u003e#1669\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2090\"\u003e#2090\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2172\"\u003e#2172\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2429\"\u003e#2429\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2448\"\u003e#2448\u003c/a\u003e,\n\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2561\"\u003e#2561\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2637\"\u003e#2637\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2704\"\u003e#2704\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2722\"\u003e#2722\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2770\"\u003e#2770\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2896\"\u003e#2896\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/2995\"\u003e#2995\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3015\"\u003e#3015\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3025\"\u003e#3025\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3027\"\u003e#3027\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3146\"\u003e#3146\u003c/a\u003e,\n\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3281\"\u003e#3281\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/3624\"\u003e#3624\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/4690\"\u003e#4690\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/4708\"\u003e#4708\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/4754\"\u003e#4754\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/5064\"\u003e#5064\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/5201\"\u003e#5201\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6038\"\u003e#6038\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6716\"\u003e#6716\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6741\"\u003e#6741\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6748\"\u003e#6748\u003c/a\u003e,\n\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6756\"\u003e#6756\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6768\"\u003e#6768\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6832\"\u003e#6832\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/6881\"\u003e#6881\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/7023\"\u003e#7023\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/7049\"\u003e#7049\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/7064\"\u003e#7064\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/7311\"\u003e#7311\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/7683\"\u003e#7683\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8053\"\u003e#8053\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8054\"\u003e#8054\u003c/a\u003e,\n\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8055\"\u003e#8055\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8167\"\u003e#8167\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8168\"\u003e#8168\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8169\"\u003e#8169\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8238\"\u003e#8238\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8261\"\u003e#8261\u003c/a\u003e, \u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8284\"\u003e#8284\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/a850bea0dea81f29f8b11c1d566e36b67a28c6f3\"\u003e\u003ccode\u003ea850bea\u003c/code\u003e\u003c/a\u003e new release 4.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/2df7db6146bb2caff79a376dc893b0ac6b86c31e\"\u003e\u003ccode\u003e2df7db6\u003c/code\u003e\u003c/a\u003e Fix the module in links to Collections Javadoc\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/c714cde38316db5780f27b68ef8daa0e00bfdcf0\"\u003e\u003ccode\u003ec714cde\u003c/code\u003e\u003c/a\u003e Fix broken links in the lwarp-generated manuals (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8312\"\u003e#8312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/1014d08ed22948b442b6f5e5f1dcad4be169a46a\"\u003e\u003ccode\u003e1014d08\u003c/code\u003e\u003c/a\u003e Add the Modifiability Checker (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8234\"\u003e#8234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/3c6e9307c793cc4a3a954e128b89e72373c34946\"\u003e\u003ccode\u003e3c6e930\u003c/code\u003e\u003c/a\u003e Don\u0027t bound a fresh capture type variable by unresolved inference variables (...\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/cd86e5d99dbe09479c69c73817ecf12c9b21f4ac\"\u003e\u003ccode\u003ecd86e5d\u003c/code\u003e\u003c/a\u003e Prep for the release.\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/0195f646c4b18b9f00f16a2f9d966fc147f9aacc\"\u003e\u003ccode\u003e0195f64\u003c/code\u003e\u003c/a\u003e Check a constructor\u0027s purity against its class\u0027s instance initializers  (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8113\"\u003e#8113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/93d602301e3132c44a35f955de1df576ff8c4fa1\"\u003e\u003ccode\u003e93d6023\u003c/code\u003e\u003c/a\u003e Add test cases for issues that are already fixed (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8303\"\u003e#8303\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/9e0f60645f34ead037a13056685a411a1feb8fb3\"\u003e\u003ccode\u003e9e0f606\u003c/code\u003e\u003c/a\u003e Add test cases for issues that are already fixed (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8302\"\u003e#8302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/typetools/checker-framework/commit/8a1a3aa1dd2aebc2c3db89275e438c98cce7b2af\"\u003e\u003ccode\u003e8a1a3aa\u003c/code\u003e\u003c/a\u003e Don\u0027t let an inference bound that ignores annotations override one that (\u003ca href\u003d\"https://redirect.github.com/typetools/checker-framework/issues/8285\"\u003e#8285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/typetools/checker-framework/compare/checker-framework-4.2.3...checker-framework-4.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMost Recent Ignore Conditions Applied to This Pull Request\u003c/summary\u003e\n\n| Dependency Name | Ignore Conditions |\n| --- | --- |\n| com.google.testparameterinjector:test-parameter-injector | [\u003e\u003d 1.8.a, \u003c 1.9] |\n\u003c/details\u003e\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e\n\nFixes https://github.com/google/error-prone/pull/6193\n\nCOPYBARA_INTEGRATE_REVIEW\u003dhttps://github.com/google/error-prone/pull/6193 from google:dependabot/maven/dependencies-6cba56e4d0 44cac4bf3ed66f748d14d1d4082d879e56c79e21\nPiperOrigin-RevId: 997472080\n"
    },
    {
      "commit": "216a1d80954c970638a9c2dc1bbe73f70835135a",
      "tree": "dab997a0ca265ed41d0e830f79e04bd44ac98dc9",
      "parents": [
        "dc411bbefaa1bd7095d7cc91fa90a7c4b2ae443e"
      ],
      "author": {
        "name": "markbrady",
        "email": "markbrady@google.com",
        "time": "Fri Oct 09 16:17:42 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Fri Oct 09 16:19:04 2026"
      },
      "message": "[Reachability] support specification of subtrees whose return values are patched, yet are still inspected\n\nPiperOrigin-RevId: 996573467\n"
    },
    {
      "commit": "dc411bbefaa1bd7095d7cc91fa90a7c4b2ae443e",
      "tree": "8a20ed07a1c91d467209446abb675756316391d1",
      "parents": [
        "0e805f9b38fdfbd5c32f1a5e0abfeff590ceb331"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Thu Oct 08 20:40:28 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Thu Oct 08 20:43:11 2026"
      },
      "message": "Deduplicate `KINDS_CONVERTIBLE_WITHOUT_BRACES` and `getHandledEnumValues` into `SwitchUtils`.\n\nPiperOrigin-RevId: 996042966\n"
    },
    {
      "commit": "0e805f9b38fdfbd5c32f1a5e0abfeff590ceb331",
      "tree": "39763d2458557c858236d81e89a6014e40f0e728",
      "parents": [
        "637f000f7f6a670703aa8920ea06fc9d9207be72"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Wed Oct 07 16:24:48 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Oct 07 16:26:41 2026"
      },
      "message": "Rip out `TypeCompatibility:AdditionalTypes`.\n\nPiperOrigin-RevId: 995158051\n"
    },
    {
      "commit": "637f000f7f6a670703aa8920ea06fc9d9207be72",
      "tree": "784dd8617f31efcb54572f33051bf5f48d5612b8",
      "parents": [
        "cb5f95567450362b85055b16ed0177fc64b19202"
      ],
      "author": {
        "name": "Liam Miller-Cushon",
        "email": "cushon@google.com",
        "time": "Wed Oct 07 09:10:31 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Oct 07 09:12:25 2026"
      },
      "message": "Validate `allowedPaths` and `allowedOnPath` in `Restriction` and tighten `SourcePathMatcher` validation\n\nValidate `allowedPaths` (`SourcePathMatcher.create`) and `allowedOnPath` (`Pattern.compile`) at annotation declaration sites in `Restriction.validateAnnotation`.\n\nPiperOrigin-RevId: 994953147\n"
    },
    {
      "commit": "cb5f95567450362b85055b16ed0177fc64b19202",
      "tree": "b47f09c6b753cc79e22ee260b496a3249c52fa4b",
      "parents": [
        "5e905a34e3926151af6673ec8d3949c22f807147"
      ],
      "author": {
        "name": "cpovirk",
        "email": "cpovirk@google.com",
        "time": "Wed Oct 07 08:32:55 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Oct 07 08:34:34 2026"
      },
      "message": "Extend NonRuntimeAnnotation to cover more APIs.\n\nPiperOrigin-RevId: 994933706\n"
    },
    {
      "commit": "5e905a34e3926151af6673ec8d3949c22f807147",
      "tree": "d7565306286c075511f9f0791cc51e6d2eed73fe",
      "parents": [
        "dcf3dbea9b89f9d07a3df5419776d0dac796601a"
      ],
      "author": {
        "name": "Error Prone Team",
        "email": "java-team-github-bot@google.com",
        "time": "Wed Oct 07 05:15:46 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Oct 07 05:17:30 2026"
      },
      "message": "Replace redundant casts with existing instanceof pattern bindings.\n\nPreviously, `PatternMatchingInstanceof` ignored `instanceof` expressions that already introduced a pattern variable. However, code within the scope of a pattern-matching `instanceof` may still contain redundant casts of the tested expression to the same type, such as when only some usages in a block were migrated to use the pattern variable. Extending the check to replace these remaining casts with the existing binding eliminates the redundant casts when the pattern variable is not reassigned.\n\nPiperOrigin-RevId: 994845970\n"
    },
    {
      "commit": "dcf3dbea9b89f9d07a3df5419776d0dac796601a",
      "tree": "491ed1991b12a3f835e7af05c3b26d881d2208c9",
      "parents": [
        "74bbd03061f05ab7754dd4c3b44875b48b5f1e0e"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Wed Oct 07 01:28:00 2026"
      },
      "committer": {
        "name": "Error Prone Team",
        "email": "error-prone-team+copybara@google.com",
        "time": "Wed Oct 07 01:29:32 2026"
      },
      "message": "Add a[] for redundant casts with existing instanceof pattern bindings.\n\nCurrently, `PatternMatchingInstanceof` ignores `instanceof` expressions that already introduce a pattern variable, leaving redundant casts of the tested expression to the same type within the scope of the pattern binding unflagged.\n\nPiperOrigin-RevId: 994756247\n"
    }
  ],
  "next": "74bbd03061f05ab7754dd4c3b44875b48b5f1e0e"
}
