Add resources class jar to compile time classpath for direct dependencies of aar_import targets

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

RELNOTES: Added support for compiling against fully qualified R classes from aar_import dependencies.
PiperOrigin-RevId: 244946625
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
index 58e9011..77aff83 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
@@ -158,6 +158,10 @@
         new JavaCompilationArtifacts.Builder()
             .addRuntimeJar(mergedJar)
             .addCompileTimeJarAsFullJar(mergedJar)
+            // Allow direct dependents to compile against un-merged R classes
+            .addCompileTimeJarAsFullJar(
+                ruleContext.getImplicitOutputArtifact(
+                    AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR))
             .setCompileTimeDependencies(jdepsArtifact)
             .build());
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
index bc71088..e37d41c 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AarImportTest.java
@@ -32,6 +32,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
+import com.google.devtools.build.lib.rules.java.JavaCompilationInfoProvider;
 import com.google.devtools.build.lib.rules.java.JavaConfiguration.ImportDepsCheckingLevel;
 import com.google.devtools.build.lib.rules.java.JavaInfo;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
@@ -253,9 +254,9 @@
     ensureArgumentsHaveClassEntryOptionWithSuffix(
         arguments, "/intermediate/classes_and_libs_merged.jar");
     assertThat(arguments.stream().filter(arg -> "--classpath_entry".equals(arg)).count())
-        .isEqualTo(5); // transitive classpath
+        .isEqualTo(9); // transitive classpath
     assertThat(arguments.stream().filter(arg -> "--directdep".equals(arg)).count())
-        .isEqualTo(1); // 1 declared dep
+        .isEqualTo(2); // 1 declared dep
   }
 
   @Test
@@ -530,4 +531,17 @@
             Label.parseAbsolute("//a:foo", ImmutableMap.of()),
             Label.parseAbsolute("//java:baz", ImmutableMap.of()));
   }
+
+  @Test
+  public void testRClassFromAarImportInCompileClasspath() throws Exception {
+    NestedSet<Artifact> compilationClasspath =
+        JavaInfo.getProvider(JavaCompilationInfoProvider.class, getConfiguredTarget("//a:library"))
+            .getCompilationClasspath();
+
+    assertThat(
+            compilationClasspath.toList().stream()
+                .filter(artifact -> artifact.getFilename().equalsIgnoreCase("foo_resources.jar"))
+                .count())
+        .isEqualTo(1);
+  }
 }