java_sdk_library: Only expose impl jars when they are built am: daaa332827
Change-Id: I18f5be5e66fca6c1185b5c3f92d790a2fee8b3c2
diff --git a/java/java_test.go b/java/java_test.go
index ab6d88e..e03e57b 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -19,6 +19,7 @@
"os"
"path/filepath"
"reflect"
+ "regexp"
"sort"
"strconv"
"strings"
@@ -1261,6 +1262,31 @@
}
}
+func TestJavaSdkLibrary_DoNotAccessImplWhenItIsNotBuilt(t *testing.T) {
+ ctx, _ := testJava(t, `
+ java_sdk_library {
+ name: "foo",
+ srcs: ["a.java"],
+ api_only: true,
+ public: {
+ enabled: true,
+ },
+ }
+
+ java_library {
+ name: "bar",
+ srcs: ["b.java"],
+ libs: ["foo"],
+ }
+ `)
+
+ // The bar library should depend on the stubs jar.
+ barLibrary := ctx.ModuleForTests("bar", "android_common").Rule("javac")
+ if expected, actual := `^-classpath .*:/[^:]*/turbine-combined/foo\.stubs\.jar$`, barLibrary.Args["classpath"]; !regexp.MustCompile(expected).MatchString(actual) {
+ t.Errorf("expected %q, found %#q", expected, actual)
+ }
+}
+
func TestJavaSdkLibrary_UseSourcesFromAnotherSdkLibrary(t *testing.T) {
testJava(t, `
java_sdk_library {
diff --git a/java/sdk_library.go b/java/sdk_library.go
index 8231278..27bbc0c 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -1295,15 +1295,18 @@
func (module *SdkLibrary) sdkJars(ctx android.BaseModuleContext, sdkVersion sdkSpec, headerJars bool) android.Paths {
- // Check any special cases for java_sdk_library.
- //
- // Only allow access to the implementation library in the following condition:
- // * No sdk_version specified on the referencing module.
- if sdkVersion.kind == sdkPrivate {
- if headerJars {
- return module.HeaderJars()
- } else {
- return module.ImplementationJars()
+ // Only provide access to the implementation library if it is actually built.
+ if module.requiresRuntimeImplementationLibrary() {
+ // Check any special cases for java_sdk_library.
+ //
+ // Only allow access to the implementation library in the following condition:
+ // * No sdk_version specified on the referencing module.
+ if sdkVersion.kind == sdkPrivate {
+ if headerJars {
+ return module.HeaderJars()
+ } else {
+ return module.ImplementationJars()
+ }
}
}