From 9b2de0dadb3ffe36c35423a90138340bd54c235c Mon Sep 17 00:00:00 2001 From: Colin Alworth Date: Mon, 8 Jun 2026 13:09:17 -0500 Subject: [PATCH 1/4] Raise Java language level to 17, update errorprone --- .github/workflows/full-check.yml | 2 +- .github/workflows/quick-check.yml | 2 +- common.ant.xml | 7 ++++--- dev/core/test/com/google/gwt/dev/GwtVersionTest.java | 1 + .../com/google/gwt/dev/javac/CompilationStateTestBase.java | 4 ++-- dev/core/test/com/google/gwt/dev/util/StringKeyTest.java | 2 ++ .../org/apache/commons/collections/AbstractTestObject.java | 1 + .../com/google/gwt/resources/rg/CssResourceGenerator.java | 3 ++- .../com/google/gwt/resources/rg/GssResourceGenerator.java | 3 ++- user/src/com/google/gwt/uibinder/rebind/BundleWriter.java | 3 ++- user/test/com/google/gwt/core/interop/JsExportTest.java | 1 + user/test/com/google/gwt/dev/jjs/test/JsoTest.java | 1 + user/test/com/google/gwt/dev/jjs/test/NativeLongTest.java | 1 + .../gwt/emultest/java/lang/CompilerConstantStringTest.java | 1 + .../test/com/google/gwt/emultest/java/util/TestObject.java | 1 + .../com/google/gwt/emultest/java8/lang/StringTest.java | 1 + user/test/com/google/gwt/junit/client/GWTTestCaseTest.java | 4 ++++ .../com/google/gwt/storage/client/MapInterfaceTest.java | 2 ++ 18 files changed, 30 insertions(+), 10 deletions(-) diff --git a/.github/workflows/full-check.yml b/.github/workflows/full-check.yml index a20411227d4..b3fa4b4ea51 100644 --- a/.github/workflows/full-check.yml +++ b/.github/workflows/full-check.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java-version: [ '11', '17', '21', '22' ] + java-version: [ '17', '21', '25' ] steps: - name: Checkout GWT itself into one directory uses: actions/checkout@v6 diff --git a/.github/workflows/quick-check.yml b/.github/workflows/quick-check.yml index e87cc11e973..b75fc198dcc 100644 --- a/.github/workflows/quick-check.yml +++ b/.github/workflows/quick-check.yml @@ -9,7 +9,7 @@ jobs: strategy: fail-fast: false matrix: - java-version: ['11', '17', '21', '22'] + java-version: ['17', '21', '25'] steps: - name: Checkout GWT itself into one directory uses: actions/checkout@v6 diff --git a/common.ant.xml b/common.ant.xml index d5e03123423..d2f2d06f981 100755 --- a/common.ant.xml +++ b/common.ant.xml @@ -54,13 +54,13 @@ - + - - + + @@ -187,6 +187,7 @@ + diff --git a/dev/core/test/com/google/gwt/dev/GwtVersionTest.java b/dev/core/test/com/google/gwt/dev/GwtVersionTest.java index 283cbfd27a5..e6c40eedcb9 100644 --- a/dev/core/test/com/google/gwt/dev/GwtVersionTest.java +++ b/dev/core/test/com/google/gwt/dev/GwtVersionTest.java @@ -78,6 +78,7 @@ public void testCompareTo() { /** * Test that GwtVersion.compareTo produced expected results. */ + @SuppressWarnings("SelfAssertion") public void testEquals() { GwtVersion v1 = new GwtVersion("0.0.0"); assertEquals(v1, v1); diff --git a/dev/core/test/com/google/gwt/dev/javac/CompilationStateTestBase.java b/dev/core/test/com/google/gwt/dev/javac/CompilationStateTestBase.java index 3a0834ac226..6a5cc93e840 100644 --- a/dev/core/test/com/google/gwt/dev/javac/CompilationStateTestBase.java +++ b/dev/core/test/com/google/gwt/dev/javac/CompilationStateTestBase.java @@ -170,12 +170,12 @@ protected void validateCompilationState(String... generatedTypeNames) { // Not always true due to caching! A source unit for FOO can b // identical to the generated FOO and already be cached. // assertTrue(unit.isGenerated()); - assertNotNull(generatedTypes.remove(className)); + assertTrue(generatedTypes.remove(className)); } else { String partialPath = className.replace('.', '/') + ".java"; assertTrue(resourcePathNames.contains(partialPath)); // TODO: Validate the source file matches the resource. - assertNotNull(resourcePathNames.remove(partialPath)); + assertTrue(resourcePathNames.remove(partialPath)); } } // The mutable sets should be empty now. diff --git a/dev/core/test/com/google/gwt/dev/util/StringKeyTest.java b/dev/core/test/com/google/gwt/dev/util/StringKeyTest.java index 10e4fb42361..91312064583 100644 --- a/dev/core/test/com/google/gwt/dev/util/StringKeyTest.java +++ b/dev/core/test/com/google/gwt/dev/util/StringKeyTest.java @@ -48,6 +48,7 @@ private static > void assertLT(T a, T b) { assertTrue(a.compareTo(b) < 0); } + @SuppressWarnings("SelfAssertion") public void test() { StringKey a = new KeyA("hello"); StringKey b = new KeyB("world"); @@ -64,6 +65,7 @@ public void test() { assertGT(b, a); } + @SuppressWarnings("SelfAssertion") public void testNull() { StringKey a = new KeyA(null); StringKey b = new KeyB(null); diff --git a/dev/core/test/org/apache/commons/collections/AbstractTestObject.java b/dev/core/test/org/apache/commons/collections/AbstractTestObject.java index 4bc2e948a9d..640b66b7d13 100644 --- a/dev/core/test/org/apache/commons/collections/AbstractTestObject.java +++ b/dev/core/test/org/apache/commons/collections/AbstractTestObject.java @@ -105,6 +105,7 @@ public boolean isEqualsCheckable() { } //----------------------------------------------------------------------- + @SuppressWarnings("SelfAssertion") public void testObjectEqualsSelf() { Object obj = makeObject(); assertEquals("A Object should equal itself", obj, obj); diff --git a/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java b/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java index e8376f22443..4ed93e7859f 100644 --- a/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java +++ b/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java @@ -90,6 +90,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.SortedSet; import java.util.TreeMap; @@ -931,7 +932,7 @@ private void initReplacements(TreeLogger logger, ResourceContext context, * be be worth the effort to simplify this. */ - if (context.getCachedData(KEY_HAS_CACHED_DATA, Boolean.class) != Boolean.TRUE) { + if (!Objects.equals(context.getCachedData(KEY_HAS_CACHED_DATA, Boolean.class), Boolean.TRUE)) { ConfigurationProperty prop; TreeSet reservedPrefixes = new TreeSet(); diff --git a/user/src/com/google/gwt/resources/rg/GssResourceGenerator.java b/user/src/com/google/gwt/resources/rg/GssResourceGenerator.java index bfd787ff8d1..d5a88c43a94 100644 --- a/user/src/com/google/gwt/resources/rg/GssResourceGenerator.java +++ b/user/src/com/google/gwt/resources/rg/GssResourceGenerator.java @@ -140,6 +140,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -695,7 +696,7 @@ public void init(TreeLogger logger, ResourceContext context) throws UnableToComp @SuppressWarnings("unchecked") private void initReplacement(ResourceContext context) { - if (context.getCachedData(KEY_HAS_CACHED_DATA, Boolean.class) != Boolean.TRUE) { + if (!Objects.equals(context.getCachedData(KEY_HAS_CACHED_DATA, Boolean.class), Boolean.TRUE)) { context.putCachedData(KEY_SHARED_METHODS, new IdentityHashMap()); context.putCachedData(KEY_BY_CLASS_AND_METHOD, new IdentityHashMap 0L); diff --git a/user/test/com/google/gwt/emultest/java/lang/CompilerConstantStringTest.java b/user/test/com/google/gwt/emultest/java/lang/CompilerConstantStringTest.java index 80763a0b4f4..43fa0e9f572 100644 --- a/user/test/com/google/gwt/emultest/java/lang/CompilerConstantStringTest.java +++ b/user/test/com/google/gwt/emultest/java/lang/CompilerConstantStringTest.java @@ -38,6 +38,7 @@ public void testCharAt() { assertEquals('b', "abc".charAt(1)); } + @SuppressWarnings("SelfAssertion") public void testConcat() { assertEquals("abcdef", "abc" + "def"); assertEquals("abcdef", "abc".concat("def")); diff --git a/user/test/com/google/gwt/emultest/java/util/TestObject.java b/user/test/com/google/gwt/emultest/java/util/TestObject.java index 63ce3e42a59..60d5dfa7677 100644 --- a/user/test/com/google/gwt/emultest/java/util/TestObject.java +++ b/user/test/com/google/gwt/emultest/java/util/TestObject.java @@ -47,6 +47,7 @@ public int getCompatibilityVersion() { /** Return a new, empty {@link Object} to used for testing. */ public abstract Object makeObject(); + @SuppressWarnings("SelfAssertion") public void testObjectEqualsSelf() { Object obj = makeObject(); assertEquals("A Object should equal itself", obj, obj); diff --git a/user/test/com/google/gwt/emultest/java8/lang/StringTest.java b/user/test/com/google/gwt/emultest/java8/lang/StringTest.java index 67dace4100d..11f4fd757cb 100644 --- a/user/test/com/google/gwt/emultest/java8/lang/StringTest.java +++ b/user/test/com/google/gwt/emultest/java8/lang/StringTest.java @@ -29,6 +29,7 @@ public String getModuleName() { return "com.google.gwt.emultest.EmulSuite"; } + @SuppressWarnings("StringJoin") public void testJoin() { assertEquals("", String.join("", "")); assertEquals("", String.join(",", "")); diff --git a/user/test/com/google/gwt/junit/client/GWTTestCaseTest.java b/user/test/com/google/gwt/junit/client/GWTTestCaseTest.java index 44681379679..ec527522a4f 100644 --- a/user/test/com/google/gwt/junit/client/GWTTestCaseTest.java +++ b/user/test/com/google/gwt/junit/client/GWTTestCaseTest.java @@ -117,6 +117,7 @@ public void testThrowsNonSerializableException_hasMetaData() throws Throwable { } + @SuppressWarnings("SelfAssertion") public void testAssertEqualsDouble() { assertEquals(0.0, 0.0, 0.0); assertEquals(1.1, 1.1, 0.0); @@ -134,6 +135,7 @@ public void testAssertEqualsDouble() { assertNotEquals(-2.0, -1.0, 0.1); } + @SuppressWarnings("SelfAssertion") public void testAssertEqualsFloat() { assertEquals(0.0f, 0.0f, 0.0f); assertEquals(1.1f, 1.1f, 0.0f); @@ -151,6 +153,7 @@ public void testAssertEqualsFloat() { assertNotEquals(-2.0f, -1.0f, 0.1f); } + @SuppressWarnings("SelfAssertion") public void testAssertEqualsIntInt() { assertEquals(5, 5); assertEquals("msg", 5, 5); @@ -166,6 +169,7 @@ public void testAssertEqualsIntIntFailWithMessage() { assertEquals("msg", 5, 4); } + @SuppressWarnings("SelfAssertion") public void testAssertEqualsObjectObject() { assertEquals(obj1, obj1Equal); assertEquals("msg", obj1, obj1); diff --git a/user/test/com/google/gwt/storage/client/MapInterfaceTest.java b/user/test/com/google/gwt/storage/client/MapInterfaceTest.java index bb866bb92a0..3fdd4d1c3f5 100644 --- a/user/test/com/google/gwt/storage/client/MapInterfaceTest.java +++ b/user/test/com/google/gwt/storage/client/MapInterfaceTest.java @@ -782,6 +782,7 @@ public void testEntrySetSetValueSameValue() { assertInvariants(map); } + @SuppressWarnings("SelfAssertion") public void testEqualsForEqualMap() { final Map map; try { @@ -841,6 +842,7 @@ public void disabled_testEqualsForSmallerMap() { assertFalse(map.equals(smallerMap)); } + @SuppressWarnings("SelfAssertion") public void testEqualsForEmptyMap() { final Map map; try { From 1458a5d2216e1b28c91e2bfdafa7f26667e25c3f Mon Sep 17 00:00:00 2001 From: Colin Alworth Date: Mon, 8 Jun 2026 13:30:21 -0500 Subject: [PATCH 2/4] temporarily use tools branch --- .github/workflows/full-check.yml | 3 ++- .github/workflows/quick-check.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/full-check.yml b/.github/workflows/full-check.yml index b3fa4b4ea51..58282a9e90e 100644 --- a/.github/workflows/full-check.yml +++ b/.github/workflows/full-check.yml @@ -33,7 +33,8 @@ jobs: - name: Checkout GWT tools into a sibling directory uses: actions/checkout@v6 with: - repository: 'gwtproject/tools' + repository: 'Vertispan/tools' + ref: 'errorprone-2.42' path: 'tools' - name: Set up JDK ${{ matrix.java-version }} # GWT requires Java 11+ to build diff --git a/.github/workflows/quick-check.yml b/.github/workflows/quick-check.yml index b75fc198dcc..52add851053 100644 --- a/.github/workflows/quick-check.yml +++ b/.github/workflows/quick-check.yml @@ -20,7 +20,8 @@ jobs: - name: Checkout GWT tools into a sibling directory uses: actions/checkout@v6 with: - repository: 'gwtproject/tools' + repository: 'Vertispan/tools' + ref: 'errorprone-2.42' path: 'tools' - name: Set up JDK ${{ matrix.java-version }} # GWT presently requires Java 11+ to build From 6bf72333d1717f931f02f22e7fba477b816d4ac0 Mon Sep 17 00:00:00 2001 From: Colin Alworth Date: Mon, 8 Jun 2026 14:22:59 -0500 Subject: [PATCH 3/4] new apis to triage --- .../doctool/custom/missing/charseq.properties | 1 + .../doctool/custom/missing/comparator.properties | 2 ++ .../google/doctool/custom/missing/math.properties | 14 ++++++++++++++ .../doctool/custom/missing/oflazy.properties | 2 ++ .../doctool/custom/missing/reader.properties | 3 +++ .../google/doctool/custom/missing/rootn.properties | 2 ++ .../doctool/custom/missing/string.properties | 3 +++ 7 files changed, 27 insertions(+) create mode 100644 build_tools/doctool/src/com/google/doctool/custom/missing/charseq.properties create mode 100644 build_tools/doctool/src/com/google/doctool/custom/missing/comparator.properties create mode 100644 build_tools/doctool/src/com/google/doctool/custom/missing/math.properties create mode 100644 build_tools/doctool/src/com/google/doctool/custom/missing/oflazy.properties create mode 100644 build_tools/doctool/src/com/google/doctool/custom/missing/reader.properties create mode 100644 build_tools/doctool/src/com/google/doctool/custom/missing/rootn.properties create mode 100644 build_tools/doctool/src/com/google/doctool/custom/missing/string.properties diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/charseq.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/charseq.properties new file mode 100644 index 00000000000..40e1a619f0d --- /dev/null +++ b/build_tools/doctool/src/com/google/doctool/custom/missing/charseq.properties @@ -0,0 +1 @@ +members=java.lang.CharSequence#getChars(int, int, char[], int) diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/comparator.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/comparator.properties new file mode 100644 index 00000000000..d2e5d4aea0c --- /dev/null +++ b/build_tools/doctool/src/com/google/doctool/custom/missing/comparator.properties @@ -0,0 +1,2 @@ +members=java.util.Comparator#min(Object, Object)\ +java.util.Comparator#max(Object, Object) diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/math.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/math.properties new file mode 100644 index 00000000000..3db156e1ac5 --- /dev/null +++ b/build_tools/doctool/src/com/google/doctool/custom/missing/math.properties @@ -0,0 +1,14 @@ +members=java.lang.Math#unsignedMultiplyExact(int, int)\ +java.lang.Math#unsignedMultiplyExact(long, long)\ +java.lang.Math#unsignedMultiplyExact(long, int)\ +java.lang.Math#powExact(int, int)\ +java.lang.Math#powExact(long, int)\ +java.lang.Math#unsignedPowExact(long, int)\ +java.lang.Math#unsignedPowExact(int, int)\ +java.lang.StrictMath#unsignedMultiplyExact(long, int)\ +java.lang.StrictMath#unsignedMultiplyExact(long, long)\ +java.lang.StrictMath#unsignedMultiplyExact(int, int)\ +java.lang.StrictMath#powExact(long, int)\ +java.lang.StrictMath#powExact(int, int)\ +java.lang.StrictMath#unsignedPowExact(long, int)\ +java.lang.StrictMath#unsignedPowExact(int, int) diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/oflazy.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/oflazy.properties new file mode 100644 index 00000000000..ac65eb59b51 --- /dev/null +++ b/build_tools/doctool/src/com/google/doctool/custom/missing/oflazy.properties @@ -0,0 +1,2 @@ +members=java.util.List#ofLazy(int, IntFunction)\ +java.util.Map#ofLazy(Set, Function) diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/reader.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/reader.properties new file mode 100644 index 00000000000..2988c0c918f --- /dev/null +++ b/build_tools/doctool/src/com/google/doctool/custom/missing/reader.properties @@ -0,0 +1,3 @@ +members=java.io.Reader#of(CharSequence)\ +java.io.Reader#readAllLines()\ +java.io.Reader#readAllAsString() diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/rootn.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/rootn.properties new file mode 100644 index 00000000000..f644db36295 --- /dev/null +++ b/build_tools/doctool/src/com/google/doctool/custom/missing/rootn.properties @@ -0,0 +1,2 @@ +members=java.math.BigInteger#rootn(int)\ +java.math.BigInteger#rootnAndRemainder(int) diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/string.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/string.properties new file mode 100644 index 00000000000..106d8693e27 --- /dev/null +++ b/build_tools/doctool/src/com/google/doctool/custom/missing/string.properties @@ -0,0 +1,3 @@ +members=java.lang.String#equalsFoldCase(String)\ +java.lang.String#compareToFoldCase(String)\ +java.lang.String#UNICODE_CASEFOLD_ORDER From 52acf3ae039689c9d34bdd8dbaae9a6356bdd7af Mon Sep 17 00:00:00 2001 From: Colin Alworth Date: Mon, 8 Jun 2026 21:36:28 -0500 Subject: [PATCH 4/4] Rename missing emul files --- .../src/com/google/doctool/custom/missing/gh10337.properties | 3 +++ .../missing/{comparator.properties => gh10338.properties} | 0 .../custom/missing/{charseq.properties => gh10339.properties} | 0 .../custom/missing/{math.properties => gh10340.properties} | 0 .../custom/missing/{reader.properties => gh10341.properties} | 0 .../custom/missing/{rootn.properties => gh10342.properties} | 0 .../custom/missing/{string.properties => gh10343.properties} | 0 .../src/com/google/doctool/custom/missing/oflazy.properties | 2 -- 8 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 build_tools/doctool/src/com/google/doctool/custom/missing/gh10337.properties rename build_tools/doctool/src/com/google/doctool/custom/missing/{comparator.properties => gh10338.properties} (100%) rename build_tools/doctool/src/com/google/doctool/custom/missing/{charseq.properties => gh10339.properties} (100%) rename build_tools/doctool/src/com/google/doctool/custom/missing/{math.properties => gh10340.properties} (100%) rename build_tools/doctool/src/com/google/doctool/custom/missing/{reader.properties => gh10341.properties} (100%) rename build_tools/doctool/src/com/google/doctool/custom/missing/{rootn.properties => gh10342.properties} (100%) rename build_tools/doctool/src/com/google/doctool/custom/missing/{string.properties => gh10343.properties} (100%) delete mode 100644 build_tools/doctool/src/com/google/doctool/custom/missing/oflazy.properties diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/gh10337.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/gh10337.properties new file mode 100644 index 00000000000..303cec80cdd --- /dev/null +++ b/build_tools/doctool/src/com/google/doctool/custom/missing/gh10337.properties @@ -0,0 +1,3 @@ +description=This is the wrong issue, but these methods are still preview, and we need an issue. +members=java.util.List#ofLazy(int, IntFunction)\ +java.util.Map#ofLazy(Set, Function) diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/comparator.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/gh10338.properties similarity index 100% rename from build_tools/doctool/src/com/google/doctool/custom/missing/comparator.properties rename to build_tools/doctool/src/com/google/doctool/custom/missing/gh10338.properties diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/charseq.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/gh10339.properties similarity index 100% rename from build_tools/doctool/src/com/google/doctool/custom/missing/charseq.properties rename to build_tools/doctool/src/com/google/doctool/custom/missing/gh10339.properties diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/math.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/gh10340.properties similarity index 100% rename from build_tools/doctool/src/com/google/doctool/custom/missing/math.properties rename to build_tools/doctool/src/com/google/doctool/custom/missing/gh10340.properties diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/reader.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/gh10341.properties similarity index 100% rename from build_tools/doctool/src/com/google/doctool/custom/missing/reader.properties rename to build_tools/doctool/src/com/google/doctool/custom/missing/gh10341.properties diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/rootn.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/gh10342.properties similarity index 100% rename from build_tools/doctool/src/com/google/doctool/custom/missing/rootn.properties rename to build_tools/doctool/src/com/google/doctool/custom/missing/gh10342.properties diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/string.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/gh10343.properties similarity index 100% rename from build_tools/doctool/src/com/google/doctool/custom/missing/string.properties rename to build_tools/doctool/src/com/google/doctool/custom/missing/gh10343.properties diff --git a/build_tools/doctool/src/com/google/doctool/custom/missing/oflazy.properties b/build_tools/doctool/src/com/google/doctool/custom/missing/oflazy.properties deleted file mode 100644 index ac65eb59b51..00000000000 --- a/build_tools/doctool/src/com/google/doctool/custom/missing/oflazy.properties +++ /dev/null @@ -1,2 +0,0 @@ -members=java.util.List#ofLazy(int, IntFunction)\ -java.util.Map#ofLazy(Set, Function)