diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 27513fef6f..8b98a73850 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -39,13 +39,13 @@ jobs:
# When we specify multiple JDKs, the final one becomes the default, which is used to execute Maven itself.
# Our Maven configuration then specifies different JDKs to use for some of the steps:
# - 11 (sometimes) to *download* to support anyone who runs JDiff or our Gradle integration tests (including our doc snapshots and our Java 11 CI test run) but not to use directly
- # - 26 for running Javadoc and javac (to help people who build Guava locally and might not use a recent JDK to run Maven)
+ # - 27 for running Javadoc and javac (to help people who build Guava locally and might not use a recent JDK to run Maven)
- name: 'Set up JDKs'
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
java-version: |
${{ matrix.java }}
- 26
+ 27
distribution: 'temurin'
cache: 'maven'
- name: 'Install'
@@ -71,12 +71,12 @@ jobs:
- name: 'Set up JDKs'
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
# For the usage of the JDK 11+17, see util/gradle_integration_tests.sh
- # And 26 is for running javac (as configured in the Maven build), as usual.
+ # And 27 is for running javac (as configured in the Maven build), as usual.
with:
java-version: |
11
17
- 26
+ 27
distribution: 'temurin'
cache: 'maven'
- name: 'Set up Gradle'
@@ -100,7 +100,7 @@ jobs:
with:
# For discussion, see the first setup-java block.
# The publish-snapshot workflow doesn't run tests, so we don't have to care which version Maven would select for that step.
- java-version: 26
+ java-version: 27
distribution: 'temurin'
cache: 'maven'
server-id: central
@@ -132,7 +132,7 @@ jobs:
# But we need Java 11 for JDiff.
java-version: |
11
- 26
+ 27
distribution: 'temurin'
cache: 'maven'
- name: 'Generate latest docs'
diff --git a/android/guava-tests/test/com/google/common/base/PreconditionsTest.java b/android/guava-tests/test/com/google/common/base/PreconditionsTest.java
index 4f7dad4ce7..f13f72c02c 100644
--- a/android/guava-tests/test/com/google/common/base/PreconditionsTest.java
+++ b/android/guava-tests/test/com/google/common/base/PreconditionsTest.java
@@ -427,7 +427,7 @@ public class PreconditionsTest extends TestCase {
// 'test' to demonstrate some potentially ambiguous overloads. This 'test' is kind of strange,
// but essentially each line will be a call to a Preconditions method that, but for a documented
// change would be a compiler error.
- // See https://docs.oracle.com/javase/specs/jls/se26/html/jls-15.html#jls-15.12.2 for the spec on
+ // See https://docs.oracle.com/javase/specs/jls/se27/html/jls-15.html#jls-15.12.2 for the spec on
// how javac selects overloads
@SuppressWarnings("null")
public void overloadSelection() {
diff --git a/android/guava-tests/test/com/google/common/collect/FluentIterableTest.java b/android/guava-tests/test/com/google/common/collect/FluentIterableTest.java
index cbd141f542..b839bfc56c 100644
--- a/android/guava-tests/test/com/google/common/collect/FluentIterableTest.java
+++ b/android/guava-tests/test/com/google/common/collect/FluentIterableTest.java
@@ -166,7 +166,7 @@ public class FluentIterableTest extends TestCase {
* This test passes if the {@code concat(…).filter(…).filter(…)} statement at the end compiles.
* That statement compiles only if {@link FluentIterable#concat concat(aIterable, bIterable)}
* returns a {@link FluentIterable} of elements of an anonymous type whose supertypes are the intersection
+ * href="https://docs.oracle.com/javase/specs/jls/se27/html/jls-4.html#jls-4.9">intersection
* of the supertypes of {@code A} and the supertypes of {@code B}.
*/
public void testConcatIntersectionType() {
diff --git a/android/guava-tests/test/com/google/common/collect/LockHeldAssertingSet.java b/android/guava-tests/test/com/google/common/collect/LockHeldAssertingSet.java
index 90ce704a66..3b8b48e4cc 100644
--- a/android/guava-tests/test/com/google/common/collect/LockHeldAssertingSet.java
+++ b/android/guava-tests/test/com/google/common/collect/LockHeldAssertingSet.java
@@ -103,7 +103,7 @@ class LockHeldAssertingSet extends ForwardingSet implements Serializable {
* We don't assert that the lock is held during calls to iterator(), stream(), and spliterator:
* `Synchronized` doesn't guarantee that it will hold the mutex for those calls because callers
* are responsible for taking the mutex themselves:
- * https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/util/Collections.html#synchronizedCollection(java.util.Collection)
+ * https://docs.oracle.com/en/java/javase/27/docs/api/java.base/java/util/Collections.html#synchronizedCollection(java.util.Collection)
*
* Similarly, we avoid having those methods *implemented* in terms of *other* TestSet methods
* that will perform holdsLock assertions:
diff --git a/android/guava-tests/test/com/google/common/collect/MyInteger.java b/android/guava-tests/test/com/google/common/collect/MyInteger.java
index d0f07fbb7d..5baeaec0e9 100644
--- a/android/guava-tests/test/com/google/common/collect/MyInteger.java
+++ b/android/guava-tests/test/com/google/common/collect/MyInteger.java
@@ -25,7 +25,7 @@ import org.jspecify.annotations.Nullable;
/**
* A trivial class {@code int} wrapper that is not a value-based
+ * href="https://docs.oracle.com/en/java/javase/27/docs/api/java.base/java/lang/doc-files/ValueBased.html">value-based
* class like {@link Integer}. That allows us to have different equivalent instances.
*/
@NullMarked
diff --git a/android/guava-tests/test/com/google/common/hash/MacHashFunctionTest.java b/android/guava-tests/test/com/google/common/hash/MacHashFunctionTest.java
index a5ec3ae479..9a642f3c3f 100644
--- a/android/guava-tests/test/com/google/common/hash/MacHashFunctionTest.java
+++ b/android/guava-tests/test/com/google/common/hash/MacHashFunctionTest.java
@@ -63,7 +63,7 @@ public class MacHashFunctionTest extends TestCase {
// From https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#Mac
// TODO(cpovirk): Evaluate newer list:
- // https://docs.oracle.com/en/java/javase/26/docs/specs/security/standard-names.html#mac-algorithms
+ // https://docs.oracle.com/en/java/javase/27/docs/specs/security/standard-names.html#mac-algorithms
private static final ImmutableTable ALGORITHMS =
new ImmutableTable.Builder()
.put("HmacMD5", MD5_KEY, hmacMd5(MD5_KEY))
diff --git a/android/guava/pom.xml b/android/guava/pom.xml
index 88885f58dd..0c6454463e 100644
--- a/android/guava/pom.xml
+++ b/android/guava/pom.xml
@@ -190,7 +190,7 @@
-
+
false
@@ -204,7 +204,7 @@
- https://docs.oracle.com/en/java/javase/26/docs/api/
+ https://docs.oracle.com/en/java/javase/27/docs/api/
https://jspecify.dev/docs/api/
../../overview.html
diff --git a/android/guava/src/com/google/common/math/IntMath.java b/android/guava/src/com/google/common/math/IntMath.java
index 32d0a984b3..8277109c1d 100644
--- a/android/guava/src/com/google/common/math/IntMath.java
+++ b/android/guava/src/com/google/common/math/IntMath.java
@@ -383,7 +383,7 @@ public final class IntMath {
* }
*
* @throws ArithmeticException if {@code m <= 0}
- * @see
+ * @see
* Remainder Operator
*/
public static int mod(int x, int m) {
diff --git a/android/guava/src/com/google/common/math/LongMath.java b/android/guava/src/com/google/common/math/LongMath.java
index ddab4a446f..45fbe5cef7 100644
--- a/android/guava/src/com/google/common/math/LongMath.java
+++ b/android/guava/src/com/google/common/math/LongMath.java
@@ -449,7 +449,7 @@ public final class LongMath {
* }
*
* @throws ArithmeticException if {@code m <= 0}
- * @see
+ * @see
* Remainder Operator
*/
@GwtIncompatible // TODO
@@ -473,7 +473,7 @@ public final class LongMath {
* }
*
* @throws ArithmeticException if {@code m <= 0}
- * @see
+ * @see
* Remainder Operator
*/
@GwtIncompatible // TODO
diff --git a/android/guava/src/com/google/common/reflect/ClassPath.java b/android/guava/src/com/google/common/reflect/ClassPath.java
index a0a02a4b57..f170f02a34 100644
--- a/android/guava/src/com/google/common/reflect/ClassPath.java
+++ b/android/guava/src/com/google/common/reflect/ClassPath.java
@@ -570,7 +570,7 @@ public final class ClassPath {
/**
* Returns the class path URIs specified by the {@code Class-Path} manifest attribute, according
* to JAR
+ * href="https://docs.oracle.com/en/java/javase/27/docs/specs/jar/jar.html#main-attributes">JAR
* File Specification. If {@code manifest} is null, it means the jar file has no manifest, and
* an empty set will be returned.
*/
@@ -652,7 +652,7 @@ public final class ClassPath {
/**
* Returns the absolute uri of the Class-Path entry value as specified in JAR
+ * href="https://docs.oracle.com/en/java/javase/27/docs/specs/jar/jar.html#main-attributes">JAR
* File Specification. Even though the specification only talks about relative urls, absolute
* urls are actually supported too (for example, in Maven surefire plugin).
*/
diff --git a/android/guava/src/com/google/common/reflect/TypeToken.java b/android/guava/src/com/google/common/reflect/TypeToken.java
index f7fa9026fe..2606d4b73d 100644
--- a/android/guava/src/com/google/common/reflect/TypeToken.java
+++ b/android/guava/src/com/google/common/reflect/TypeToken.java
@@ -454,7 +454,7 @@ public abstract class TypeToken extends TypeCapture implements Serializabl
/**
* Returns true if this type is a supertype of the given {@code type}. "Supertype" is defined
* according to the rules for
+ * href="https://docs.oracle.com/javase/specs/jls/se27/html/jls-4.html#jls-4.5.1">the rules for
* type arguments introduced with Java generics.
*
* @since 19.0
@@ -466,7 +466,7 @@ public abstract class TypeToken extends TypeCapture implements Serializabl
/**
* Returns true if this type is a supertype of the given {@code type}. "Supertype" is defined
* according to the rules for
+ * href="https://docs.oracle.com/javase/specs/jls/se27/html/jls-4.html#jls-4.5.1">the rules for
* type arguments introduced with Java generics.
*
* @since 19.0
@@ -478,7 +478,7 @@ public abstract class TypeToken extends TypeCapture implements Serializabl
/**
* Returns true if this type is a subtype of the given {@code type}. "Subtype" is defined
* according to the rules for
+ * href="https://docs.oracle.com/javase/specs/jls/se27/html/jls-4.html#jls-4.5.1">the rules for
* type arguments introduced with Java generics.
*
* @since 19.0
@@ -490,7 +490,7 @@ public abstract class TypeToken extends TypeCapture implements Serializabl
/**
* Returns true if this type is a subtype of the given {@code type}. "Subtype" is defined
* according to the rules for
+ * href="https://docs.oracle.com/javase/specs/jls/se27/html/jls-4.html#jls-4.5.1">the rules for
* type arguments introduced with Java generics.
*
* @since 19.0
diff --git a/android/guava/src/com/google/common/util/concurrent/ListenableFuture.java b/android/guava/src/com/google/common/util/concurrent/ListenableFuture.java
index bb41dd9ef4..46f7f5f95a 100644
--- a/android/guava/src/com/google/common/util/concurrent/ListenableFuture.java
+++ b/android/guava/src/com/google/common/util/concurrent/ListenableFuture.java
@@ -147,7 +147,7 @@ public interface ListenableFuture extends Future
* Futures#addCallback addCallback()}.
*
*
Guava implementations of {@code ListenableFuture} promptly release references to listeners
diff --git a/guava-tests/test/com/google/common/base/PreconditionsTest.java b/guava-tests/test/com/google/common/base/PreconditionsTest.java
index 4f7dad4ce7..f13f72c02c 100644
--- a/guava-tests/test/com/google/common/base/PreconditionsTest.java
+++ b/guava-tests/test/com/google/common/base/PreconditionsTest.java
@@ -427,7 +427,7 @@ public class PreconditionsTest extends TestCase {
// 'test' to demonstrate some potentially ambiguous overloads. This 'test' is kind of strange,
// but essentially each line will be a call to a Preconditions method that, but for a documented
// change would be a compiler error.
- // See https://docs.oracle.com/javase/specs/jls/se26/html/jls-15.html#jls-15.12.2 for the spec on
+ // See https://docs.oracle.com/javase/specs/jls/se27/html/jls-15.html#jls-15.12.2 for the spec on
// how javac selects overloads
@SuppressWarnings("null")
public void overloadSelection() {
diff --git a/guava-tests/test/com/google/common/collect/FluentIterableTest.java b/guava-tests/test/com/google/common/collect/FluentIterableTest.java
index a4c284eccb..f5fdee6718 100644
--- a/guava-tests/test/com/google/common/collect/FluentIterableTest.java
+++ b/guava-tests/test/com/google/common/collect/FluentIterableTest.java
@@ -166,7 +166,7 @@ public class FluentIterableTest extends TestCase {
* This test passes if the {@code concat(…).filter(…).filter(…)} statement at the end compiles.
* That statement compiles only if {@link FluentIterable#concat concat(aIterable, bIterable)}
* returns a {@link FluentIterable} of elements of an anonymous type whose supertypes are the intersection
+ * href="https://docs.oracle.com/javase/specs/jls/se27/html/jls-4.html#jls-4.9">intersection
* of the supertypes of {@code A} and the supertypes of {@code B}.
*/
public void testConcatIntersectionType() {
diff --git a/guava-tests/test/com/google/common/collect/LockHeldAssertingSet.java b/guava-tests/test/com/google/common/collect/LockHeldAssertingSet.java
index 09ebb271d4..63eb0a2b84 100644
--- a/guava-tests/test/com/google/common/collect/LockHeldAssertingSet.java
+++ b/guava-tests/test/com/google/common/collect/LockHeldAssertingSet.java
@@ -105,7 +105,7 @@ class LockHeldAssertingSet extends ForwardingSet implements Serializable {
* We don't assert that the lock is held during calls to iterator(), stream(), and spliterator:
* `Synchronized` doesn't guarantee that it will hold the mutex for those calls because callers
* are responsible for taking the mutex themselves:
- * https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/util/Collections.html#synchronizedCollection(java.util.Collection)
+ * https://docs.oracle.com/en/java/javase/27/docs/api/java.base/java/util/Collections.html#synchronizedCollection(java.util.Collection)
*
* Similarly, we avoid having those methods *implemented* in terms of *other* TestSet methods
* that will perform holdsLock assertions:
diff --git a/guava-tests/test/com/google/common/collect/MyInteger.java b/guava-tests/test/com/google/common/collect/MyInteger.java
index d0f07fbb7d..5baeaec0e9 100644
--- a/guava-tests/test/com/google/common/collect/MyInteger.java
+++ b/guava-tests/test/com/google/common/collect/MyInteger.java
@@ -25,7 +25,7 @@ import org.jspecify.annotations.Nullable;
/**
* A trivial class {@code int} wrapper that is not a value-based
+ * href="https://docs.oracle.com/en/java/javase/27/docs/api/java.base/java/lang/doc-files/ValueBased.html">value-based
* class like {@link Integer}. That allows us to have different equivalent instances.
*/
@NullMarked
diff --git a/guava-tests/test/com/google/common/hash/MacHashFunctionTest.java b/guava-tests/test/com/google/common/hash/MacHashFunctionTest.java
index a5ec3ae479..9a642f3c3f 100644
--- a/guava-tests/test/com/google/common/hash/MacHashFunctionTest.java
+++ b/guava-tests/test/com/google/common/hash/MacHashFunctionTest.java
@@ -63,7 +63,7 @@ public class MacHashFunctionTest extends TestCase {
// From https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#Mac
// TODO(cpovirk): Evaluate newer list:
- // https://docs.oracle.com/en/java/javase/26/docs/specs/security/standard-names.html#mac-algorithms
+ // https://docs.oracle.com/en/java/javase/27/docs/specs/security/standard-names.html#mac-algorithms
private static final ImmutableTable ALGORITHMS =
new ImmutableTable.Builder()
.put("HmacMD5", MD5_KEY, hmacMd5(MD5_KEY))
diff --git a/guava/pom.xml b/guava/pom.xml
index b4fe0f9406..4431f1839c 100644
--- a/guava/pom.xml
+++ b/guava/pom.xml
@@ -183,7 +183,7 @@
-
+
false
@@ -197,7 +197,7 @@
- https://docs.oracle.com/en/java/javase/26/docs/api/
+ https://docs.oracle.com/en/java/javase/27/docs/api/
https://jspecify.dev/docs/api/
../overview.html
diff --git a/guava/src/com/google/common/math/IntMath.java b/guava/src/com/google/common/math/IntMath.java
index 32d0a984b3..8277109c1d 100644
--- a/guava/src/com/google/common/math/IntMath.java
+++ b/guava/src/com/google/common/math/IntMath.java
@@ -383,7 +383,7 @@ public final class IntMath {
* }
*
* @throws ArithmeticException if {@code m <= 0}
- * @see
+ * @see
* Remainder Operator
*/
public static int mod(int x, int m) {
diff --git a/guava/src/com/google/common/math/LongMath.java b/guava/src/com/google/common/math/LongMath.java
index ddab4a446f..45fbe5cef7 100644
--- a/guava/src/com/google/common/math/LongMath.java
+++ b/guava/src/com/google/common/math/LongMath.java
@@ -449,7 +449,7 @@ public final class LongMath {
* }
*
* @throws ArithmeticException if {@code m <= 0}
- * @see
+ * @see
* Remainder Operator
*/
@GwtIncompatible // TODO
@@ -473,7 +473,7 @@ public final class LongMath {
* }
*
* @throws ArithmeticException if {@code m <= 0}
- * @see
+ * @see
* Remainder Operator
*/
@GwtIncompatible // TODO
diff --git a/guava/src/com/google/common/reflect/ClassPath.java b/guava/src/com/google/common/reflect/ClassPath.java
index a0a02a4b57..f170f02a34 100644
--- a/guava/src/com/google/common/reflect/ClassPath.java
+++ b/guava/src/com/google/common/reflect/ClassPath.java
@@ -570,7 +570,7 @@ public final class ClassPath {
/**
* Returns the class path URIs specified by the {@code Class-Path} manifest attribute, according
* to JAR
+ * href="https://docs.oracle.com/en/java/javase/27/docs/specs/jar/jar.html#main-attributes">JAR
* File Specification. If {@code manifest} is null, it means the jar file has no manifest, and
* an empty set will be returned.
*/
@@ -652,7 +652,7 @@ public final class ClassPath {
/**
* Returns the absolute uri of the Class-Path entry value as specified in JAR
+ * href="https://docs.oracle.com/en/java/javase/27/docs/specs/jar/jar.html#main-attributes">JAR
* File Specification. Even though the specification only talks about relative urls, absolute
* urls are actually supported too (for example, in Maven surefire plugin).
*/
diff --git a/guava/src/com/google/common/reflect/TypeToken.java b/guava/src/com/google/common/reflect/TypeToken.java
index f7fa9026fe..2606d4b73d 100644
--- a/guava/src/com/google/common/reflect/TypeToken.java
+++ b/guava/src/com/google/common/reflect/TypeToken.java
@@ -454,7 +454,7 @@ public abstract class TypeToken extends TypeCapture implements Serializabl
/**
* Returns true if this type is a supertype of the given {@code type}. "Supertype" is defined
* according to the rules for
+ * href="https://docs.oracle.com/javase/specs/jls/se27/html/jls-4.html#jls-4.5.1">the rules for
* type arguments introduced with Java generics.
*
* @since 19.0
@@ -466,7 +466,7 @@ public abstract class TypeToken extends TypeCapture implements Serializabl
/**
* Returns true if this type is a supertype of the given {@code type}. "Supertype" is defined
* according to the rules for
+ * href="https://docs.oracle.com/javase/specs/jls/se27/html/jls-4.html#jls-4.5.1">the rules for
* type arguments introduced with Java generics.
*
* @since 19.0
@@ -478,7 +478,7 @@ public abstract class TypeToken extends TypeCapture implements Serializabl
/**
* Returns true if this type is a subtype of the given {@code type}. "Subtype" is defined
* according to the rules for
+ * href="https://docs.oracle.com/javase/specs/jls/se27/html/jls-4.html#jls-4.5.1">the rules for
* type arguments introduced with Java generics.
*
* @since 19.0
@@ -490,7 +490,7 @@ public abstract class TypeToken extends TypeCapture implements Serializabl
/**
* Returns true if this type is a subtype of the given {@code type}. "Subtype" is defined
* according to the rules for
+ * href="https://docs.oracle.com/javase/specs/jls/se27/html/jls-4.html#jls-4.5.1">the rules for
* type arguments introduced with Java generics.
*
* @since 19.0
diff --git a/guava/src/com/google/common/util/concurrent/ListenableFuture.java b/guava/src/com/google/common/util/concurrent/ListenableFuture.java
index bb41dd9ef4..46f7f5f95a 100644
--- a/guava/src/com/google/common/util/concurrent/ListenableFuture.java
+++ b/guava/src/com/google/common/util/concurrent/ListenableFuture.java
@@ -147,7 +147,7 @@ public interface ListenableFuture extends Future
* Futures#addCallback addCallback()}.
*
*