Allow Bazel's own build to use Java 11 language features

Fixes https://github.com/bazelbuild/bazel/issues/14592

PiperOrigin-RevId: 422562457
diff --git a/.bazelrc b/.bazelrc
index cb59636..0225533 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -35,5 +35,13 @@
 build:bzlmod --crosstool_top=@rules_cc.0.0.1.cc_configure.local_config_cc//:toolchain
 build:bzlmod --xcode_version_config=@rules_cc.0.0.1.cc_configure.local_config_xcode//:host_xcodes
 
+# Enable Java 11 language features (https://github.com/bazelbuild/bazel/issues/14592)
+# Toolchain resolution configuration for Bazel >= 5
+build --java_language_version=11
+build --tool_java_language_version=11
+# Legacy configuration for Bazel <= 4
+build --java_toolchain=@bazel_tools//tools/jdk:toolchain_java11
+build --host_java_toolchain=@bazel_tools//tools/jdk:toolchain_java11
+
 # User-specific .bazelrc
 try-import user.bazelrc
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD
index 2d80d14..d2fbb4b 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/BUILD
@@ -52,6 +52,14 @@
         ["javac/*.java"],
         exclude = JAVAC_OPTIONS_SRCS + JAVAC_TEST_SRCS,
     ),
+    javacopts = [
+        "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
+    ],
     deps = [
         ":invalid_command_line_exception",
         ":javac_options",
@@ -60,7 +68,6 @@
         "//third_party:auto_value",
         "//third_party:guava",
         "//third_party:jsr305",
-        "//third_party/java/jdk/langtools:javac",
         "//third_party/protobuf:protobuf_java",
     ],
 )
@@ -212,6 +219,11 @@
 java_test(
     name = "BootClassPathCachingFileManagerTest",
     srcs = ["javac/BootClassPathCachingFileManagerTest.java"],
+    javacopts = [
+        "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
+    ],
     deps = [
         ":javac",
         "//third_party:guava",
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/BUILD b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/BUILD
index ba50689..bfa5768 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/BUILD
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/BUILD
@@ -9,17 +9,29 @@
 java_library(
     name = "plugins",
     srcs = ["BlazeJavaCompilerPlugin.java"],
+    javacopts = [
+        "--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+    ],
     deps = [
         "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar:invalid_command_line_exception",
         "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics",
         "//third_party:guava",
-        "//third_party/java/jdk/langtools:javac",
     ],
 )
 
 java_library(
     name = "dependency",
     srcs = glob(["dependency/*.java"]),
+    javacopts = [
+        "--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+    ],
     deps = [
         ":plugins",
         "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar:JarOwner",
@@ -28,31 +40,39 @@
         "//third_party:auto_value",
         "//third_party:guava",
         "//third_party:tomcat_annotations_api",
-        "//third_party/java/jdk/langtools:javac",
     ],
 )
 
 java_library(
     name = "errorprone",
     srcs = glob(["errorprone/*.java"]),
+    javacopts = [
+        "--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+    ],
     deps = [
         ":plugins",
         "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar:invalid_command_line_exception",
         "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics",
         "//third_party:error_prone",
         "//third_party:guava",
-        "//third_party/java/jdk/langtools:javac",
     ],
 )
 
 java_library(
     name = "processing",
     srcs = glob(["processing/*.java"]),
+    javacopts = [
+        "--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+    ],
     deps = [
         ":plugins",
         "//src/main/protobuf:java_compilation_java_proto",
         "//third_party:guava",
-        "//third_party/java/jdk/langtools:javac",
     ],
 )
 
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics/BUILD b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics/BUILD
index 5c06bc2..6e3d7d5 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics/BUILD
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/statistics/BUILD
@@ -5,11 +5,13 @@
 java_library(
     name = "statistics",
     srcs = ["BlazeJavacStatistics.java"],
+    javacopts = [
+        "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+    ],
     deps = [
         "//third_party:auto_value",
         "//third_party:caffeine",
         "//third_party:guava",
-        "//third_party/java/jdk/langtools:javac",
     ],
 )
 
diff --git a/src/test/java/com/google/devtools/build/android/desugar/BUILD b/src/test/java/com/google/devtools/build/android/desugar/BUILD
index 28b10a3..b079a15 100644
--- a/src/test/java/com/google/devtools/build/android/desugar/BUILD
+++ b/src/test/java/com/google/devtools/build/android/desugar/BUILD
@@ -320,6 +320,7 @@
     srcs = [
         "DesugarCoreLibraryFunctionalTest.java",
     ],
+    javacopts = ["-source 8 -target 8"],
     jvm_flags = [
         # TODO (b/72181101): -Xbootclasspath/p is removed in JDK 9.
         "-XX:+IgnoreUnrecognizedVMOptions",
@@ -693,7 +694,10 @@
 java_library(
     name = "testdata",
     srcs = glob(["testdata/*.java"]),
-    javacopts = ["-Xep:SelfAssignment:OFF"],
+    javacopts = [
+        "-Xep:SelfAssignment:OFF",
+        "-source 8 -target 8",
+    ],
     resources = ["testdata/testresource.txt"],
     deps = [
         ":separate",
@@ -707,7 +711,10 @@
         "testdata/*.java",
         "testdata/java8/**/*.java",
     ]),
-    javacopts = ["-Xep:SelfAssignment:OFF"],
+    javacopts = [
+        "-Xep:SelfAssignment:OFF",
+        "-source 8 -target 8",
+    ],
     resources = ["testdata/testresource.txt"],
     deps = [
         ":separate",
@@ -721,6 +728,7 @@
     srcs = glob([
         "testdata/core_library/**/*.java",
     ]),
+    javacopts = ["-source 8 -target 8"],
     resources = ["testdata/testresource.txt"],
     deps = [
         "//third_party:error_prone",
@@ -741,7 +749,10 @@
 java_library(
     name = "testdata_like_in_android_studio",
     srcs = glob(["testdata/*.java"]),
-    javacopts = ["-Xep:SelfAssignment:OFF"],
+    javacopts = [
+        "-Xep:SelfAssignment:OFF",
+        "-source 8 -target 8",
+    ],
     resources = ["testdata/testresource.txt"],
     deps = [
         ":libseparate.jar",  # puts full Jar instead of header Jar on the classpath
@@ -755,7 +766,10 @@
         "testdata/*.java",
         "testdata/java8/**/*.java",
     ]),
-    javacopts = ["-Xep:SelfAssignment:OFF"],
+    javacopts = [
+        "-Xep:SelfAssignment:OFF",
+        "-source 8 -target 8",
+    ],
     resources = ["testdata/testresource.txt"],
     deps = [
         ":libseparate.jar",  # puts full Jar instead of header Jar on the classpath
diff --git a/src/tools/android/java/com/google/devtools/build/android/BUILD b/src/tools/android/java/com/google/devtools/build/android/BUILD
index 10801bb..4774619 100644
--- a/src/tools/android/java/com/google/devtools/build/android/BUILD
+++ b/src/tools/android/java/com/google/devtools/build/android/BUILD
@@ -64,6 +64,9 @@
         ],
         exclude = ["DependencyInfo.java"],
     ),
+    javacopts = [
+        "--add-exports=java.xml/com.sun.org.apache.xerces.internal.dom=ALL-UNNAMED",
+    ],
     exports = [
         # Separated out to avoid a dependency cycle with resources/, but it logically belongs here.
         ":dependency_info",
diff --git a/third_party/ijar/test/BUILD b/third_party/ijar/test/BUILD
index 5b10341..bed1af6 100644
--- a/third_party/ijar/test/BUILD
+++ b/third_party/ijar/test/BUILD
@@ -209,6 +209,7 @@
 java_library(
     name = "local_and_anonymous_lib",
     srcs = ["LocalAndAnonymous.java"],
+    javacopts = ["-source 8 -target 8"],
 )
 
 genrule(