Add a test for `java_binary` with inner main class.

(ignore-relnotes)

PiperOrigin-RevId: 957013088
Change-Id: I35dc02128002d12fc41213703159d108233daa0b
diff --git a/test/java/common/rules/common_launcher_java_binary_tests.bzl b/test/java/common/rules/common_launcher_java_binary_tests.bzl
index b2cc206..ac4baac 100644
--- a/test/java/common/rules/common_launcher_java_binary_tests.bzl
+++ b/test/java/common/rules/common_launcher_java_binary_tests.bzl
@@ -272,6 +272,29 @@
                 "${{JAVA_RUNFILES}}/{workspace}/_solib_{cpu}/_//{package}:{test_name}/jni.so___{package}",
             ])
 
+# Regression test for bug 2774317: Problems with inner classes as main class.
+def _test_java_binary_inner_class(name):
+    util.helper_target(
+        java_binary,
+        name = name + "/inner",
+        srcs = ["Main.java"],
+        main_class = "Main$Inner",
+    )
+
+    analysis_test(
+        name = name,
+        attrs = {"_windows_constraints": attr.label_list(default = ["@platforms//os:windows"])},
+        impl = _test_java_binary_inner_class_impl,
+        target = name + "/inner",
+    )
+
+def _test_java_binary_inner_class_impl(env, target):
+    if helper.is_target_platform_windows(env.ctx):
+        expected = "Main$Inner"  # unquoted on windows
+    else:
+        expected = "'Main$Inner'"  # shell-quoted
+    expect_that_executable.of_target(env, target).java_start_class().equals(expected)
+
 def java_binary_launcher_tests(name):
     test_suite(
         name = name,
@@ -286,5 +309,6 @@
             _test_java_test_main_class_with_dot,
             _test_java_test_has_assertions_enabled,
             _test_java_binary_native_library_path_includes_transitive_deps,
+            _test_java_binary_inner_class,
         ],
     )