Migrate JavaToolchainTest cases to Starlark analysis tests.

PiperOrigin-RevId: 877933571
Change-Id: I271712beef84d4d0b1e5b1b2646f5d375b5ae7b7
diff --git a/MODULE.bazel b/MODULE.bazel
index de8fe11..204b8e8 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -131,9 +131,9 @@
 bazel_dep(name = "rules_testing", dev_dependency = True)
 archive_override(
     module_name = "rules_testing",
-    integrity = "sha256-TqwTCQnzt/hRKQtdJ7d8ebtZ8+I8IMgmWiEjOKvo6mI=",
-    strip_prefix = "rules_testing-f8e869d452507fa4a59748c9d69cfab63ec9385a",
-    urls = ["https://github.com/bazelbuild/rules_testing/archive/f8e869d452507fa4a59748c9d69cfab63ec9385a.tar.gz"],
+    integrity = "sha256-d/94Ix5IoGXk9rP1HjYKxPMH8ccwX5b1Qxs8BKg4WRg=",
+    strip_prefix = "rules_testing-ac97ba507116056cd489161b5e99dd8014685adc",
+    urls = ["https://github.com/bazelbuild/rules_testing/archive/ac97ba507116056cd489161b5e99dd8014685adc.tar.gz"],
 )
 
 test_repositories = use_extension("//test:repositories.bzl", "test_repositories_ext", dev_dependency = True)
diff --git a/test/java/testutil/javac_action_subject.bzl b/test/java/testutil/javac_action_subject.bzl
index 28d1916..ed6e9fa 100644
--- a/test/java/testutil/javac_action_subject.bzl
+++ b/test/java/testutil/javac_action_subject.bzl
@@ -20,9 +20,7 @@
 
     public = struct(
         direct_dependencies = lambda: _create_subject_for_flag("--direct_dependencies", self.parsed_flags, self.meta),
-        source = lambda: _create_subject_for_flag("-source", self.parsed_flags, self.meta),
-        target = lambda: _create_subject_for_flag("-target", self.parsed_flags, self.meta),
-        xmaxerrs = lambda: _create_subject_for_flag("-Xmaxerrs", self.parsed_flags, self.meta),
+        javacopts = lambda: _create_subject_for_flag("--javacopts", self.parsed_flags, self.meta),
         jar = lambda: _create_subject_for_flag("-jar", self.parsed_flags, self.meta),
         sources = lambda: _create_subject_for_flag("--sources", self.parsed_flags, self.meta),
         executable_file_name = lambda: subjects.str(action_subject.actual.argv[0], self.meta),
@@ -37,7 +35,12 @@
     for idx, arg in enumerate(argv):
         if idx == 0:
             continue  # java command
-        if arg.startswith("-"):
+
+        if current_flag_name == "--javacopts" and arg == "--":
+            current_flag_name = None
+            continue
+
+        if arg.startswith("-") and current_flag_name != "--javacopts":
             if "=" in arg:
                 parts = arg.split("=", 1)
                 flag_values.setdefault(parts[0], []).append(parts[1])
diff --git a/test/java/testutil/javac_action_subject_tests.bzl b/test/java/testutil/javac_action_subject_tests.bzl
index eba3f76..c1e577b 100644
--- a/test/java/testutil/javac_action_subject_tests.bzl
+++ b/test/java/testutil/javac_action_subject_tests.bzl
@@ -18,6 +18,7 @@
         "JavaBuilder_deploy.jar",
         "--output",
         "blaze-out/k8/bin/pkg/libfoo.jar",
+        "--javacopts",
         "-source",
         "21",
         "-target",
@@ -49,13 +50,18 @@
         ],
         "-jar": ["JavaBuilder_deploy.jar"],
         "--output": ["blaze-out/k8/bin/pkg/libfoo.jar"],
-        "-source": ["21"],
-        "-target": ["17"],
-        "-g": [],
-        "-parameters": [],
-        "-sourcepath": [":"],
-        "-Xmaxerrs": ["123"],
-        "--": [],
+        "--javacopts": [
+            "-source",
+            "21",
+            "-target",
+            "17",
+            "-g",
+            "-parameters",
+            "-sourcepath",
+            ":",
+            "-Xmaxerrs",
+            "123",
+        ],
         "--strict_java_deps": ["ERROR"],
         "--classpath": ["pkg/bar-hjar.jar", "other/pkg/baz.jar"],
     }, flags)
diff --git a/test/java/toolchains/java_toolchain_tests.bzl b/test/java/toolchains/java_toolchain_tests.bzl
index 3019a66..f685fdd 100644
--- a/test/java/toolchains/java_toolchain_tests.bzl
+++ b/test/java/toolchains/java_toolchain_tests.bzl
@@ -1,10 +1,11 @@
 """Tests for the java_toolchain rule"""
 
 load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite")
-load("@rules_testing//lib:truth.bzl", "matching")
+load("@rules_testing//lib:truth.bzl", "matching", "subjects")
 load("@rules_testing//lib:util.bzl", "util")
 load("//java:java_binary.bzl", "java_binary")
 load("//java:java_library.bzl", "java_library")
+load("//java:java_plugin.bzl", "java_plugin")
 load("//java/common:java_semantics.bzl", "semantics")
 load("//java/toolchains:java_runtime.bzl", "java_runtime")
 load("//java/toolchains:java_toolchain.bzl", "java_toolchain")
@@ -83,15 +84,19 @@
 
 def _test_javac_gets_options_impl(env, targets):
     assert_javac_action = javac_action_subject.of(env, targets.a, "{package}/lib{name}.jar")
-    assert_javac_action.source().contains_exactly(["6"])
-    assert_javac_action.target().contains_exactly(["6"])
-    assert_javac_action.xmaxerrs().contains_exactly(["500"])
+    assert_javac_action.javacopts().contains_at_least([
+        "-source",
+        "6",
+        "-target",
+        "6",
+        "-Xlint:toto",
+        "-Xmaxerrs",
+        "500",
+    ])
     assert_javac_action.jar().contains_exactly(["{package}/JavaBuilder_deploy.jar"])
     assert_javac_action.inputs().contains("{package}/rt.jar")
 
-    assert_argv = assert_javac_action.argv()
-    assert_argv.contains("-Xlint:toto")
-    assert_argv.not_contains("-g")
+    assert_javac_action.javacopts().not_contains("-g")
 
     assert_header_action = javac_action_subject.of(env, targets.b, "{package}/lib{name}-hjar.jar")
     assert_header_action.argv().contains("{package}/turbine_direct")
@@ -415,6 +420,113 @@
         matching.contains("must produce a single file"),
     )
 
+def _test_java_compile_action_target_gets_javacopts_from_toolchain(name):
+    _declare_java_toolchain(
+        name = name,
+        javacopts = ["-XDtoolchainJavacFlag"],
+    )
+    util.helper_target(
+        java_library,
+        name = name + "/lib",
+        srcs = ["a.java"],
+    )
+    analysis_test(
+        name = name,
+        impl = _test_java_compile_action_target_gets_javacopts_from_toolchain_impl,
+        target = name + "/lib",
+        config_settings = {
+            "//command_line_option:extra_toolchains": [Label(name + "/toolchain")],
+            "//command_line_option:javacopt": ["-XDcommandLineJavacFlag"],
+            "//command_line_option:host_javacopt": ["-XDhostCommandLineJavacFlag"],
+        },
+    )
+
+def _test_java_compile_action_target_gets_javacopts_from_toolchain_impl(env, target):
+    assert_javacopts = javac_action_subject.of(env, target, "{package}/lib{name}.jar").javacopts()
+    assert_javacopts.contains_exactly([
+        "-source",
+        "6",
+        "-target",
+        "6",
+        "-Xlint:toto",
+        "-XDtoolchainJavacFlag",
+        "-XDcommandLineJavacFlag",
+    ])
+
+def _test_java_compile_action_exec_gets_javacopts_from_toolchain(name):
+    _declare_java_toolchain(
+        name = name,
+        javacopts = ["-XDtoolchainJavacFlag"],
+    )
+    util.helper_target(
+        java_library,
+        name = name + "/lib",
+        srcs = ["a.java"],
+    )
+    util.helper_target(
+        util.force_exec_config,
+        name = name + "/exec_lib",
+        tools = [name + "/lib"],
+    )
+    analysis_test(
+        name = name,
+        impl = _test_java_compile_action_exec_gets_javacopts_from_toolchain_impl,
+        target = name + "/exec_lib",
+        config_settings = {
+            "//command_line_option:extra_toolchains": [Label(name + "/toolchain")],
+            "//command_line_option:javacopt": ["-XDcommandLineJavacFlag"],
+            "//command_line_option:host_javacopt": ["-XDhostCommandLineJavacFlag"],
+        },
+    )
+
+def _test_java_compile_action_exec_gets_javacopts_from_toolchain_impl(env, target):
+    lib = env.expect.that_target(target).attr("tools", factory = subjects.collection).actual[0]
+    assert_javacopts = javac_action_subject.of(env, lib, "{package}/lib{name}.jar").javacopts()
+    assert_javacopts.contains_exactly([
+        "-source",
+        "6",
+        "-target",
+        "6",
+        "-Xlint:toto",
+        "-XDtoolchainJavacFlag",
+        "-XDhostCommandLineJavacFlag",
+    ])
+
+def _test_java_compile_action_uses_tool_specific_jvm_opts(name):
+    _declare_java_toolchain(
+        name = name,
+        jvm_opts = ["-Xbase"],
+        javabuilder_jvm_opts = ["-DjavabuilderFlag=1"],
+        turbine_jvm_opts = ["-DturbineFlag=1"],
+    )
+    util.helper_target(
+        java_plugin,
+        name = name + "/plugin",
+        processor_class = "Proc",
+        generates_api = True,
+    )
+    util.helper_target(
+        java_library,
+        name = name + "/lib",
+        srcs = ["a.java"],
+        plugins = [name + "/plugin"],
+    )
+    analysis_test(
+        name = name,
+        impl = _test_java_compile_action_uses_tool_specific_jvm_opts_impl,
+        target = name + "/lib",
+        config_settings = {
+            "//command_line_option:extra_toolchains": [Label(name + "/toolchain")],
+        },
+    )
+
+def _test_java_compile_action_uses_tool_specific_jvm_opts_impl(env, target):
+    javac_action = javac_action_subject.of(env, target, "{package}/lib{name}.jar")
+    javac_action.argv().contains("-DjavabuilderFlag=1")
+
+    header_action = env.expect.that_target(target).action_generating("{package}/lib{name}-hjar.jar")
+    header_action.argv().contains("-DturbineFlag=1")
+
 def java_toolchain_tests(name):
     test_suite(
         name = name,
@@ -434,5 +546,8 @@
             _test_location_expansion_in_jvm_opts,
             _test_location_expansion_with_multiple_artifacts_fails,
             _test_timezone_data_with_multiple_artifacts_fails,
+            _test_java_compile_action_target_gets_javacopts_from_toolchain,
+            _test_java_compile_action_exec_gets_javacopts_from_toolchain,
+            _test_java_compile_action_uses_tool_specific_jvm_opts,
         ],
     )