summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
author Ulyana Trafimovich <skvadrik@google.com> 2020-10-07 09:18:02 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2020-10-07 09:18:02 +0000
commit9f701fa348964b6863a83589957cc32e7f99657e (patch)
treecc4e64e02dc680c65e6c9597ddcc24eb297753bb /java
parent3c72ce8696d83466d7ef815a5cdd18df4fd1a59a (diff)
parenta54d33be7712a357914ea6b6d19327c2355f9c8a (diff)
Merge changes from topic "uses-libs-24"
* changes: Fail the build if dexpreopt cannot find path to a <uses-library>. Add dependency on implementation <uses-library> for modules that depend on component libraries.
Diffstat (limited to 'java')
-rw-r--r--java/app_test.go21
-rw-r--r--java/java.go14
-rw-r--r--java/sdk_library.go9
3 files changed, 23 insertions, 21 deletions
diff --git a/java/app_test.go b/java/app_test.go
index 4347db8b1..31b422c64 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -2754,19 +2754,6 @@ func TestUsesLibraries(t *testing.T) {
android_app {
name: "app",
srcs: ["a.java"],
- libs: ["qux", "quuz"],
- static_libs: ["static-runtime-helper"],
- uses_libs: ["foo"],
- sdk_version: "current",
- optional_uses_libs: [
- "bar",
- "baz",
- ],
- }
-
- android_app {
- name: "app_with_stub_deps",
- srcs: ["a.java"],
libs: ["qux", "quuz.stubs"],
static_libs: ["static-runtime-helper"],
uses_libs: ["foo"],
@@ -2797,7 +2784,6 @@ func TestUsesLibraries(t *testing.T) {
run(t, ctx, config)
app := ctx.ModuleForTests("app", "android_common")
- appWithStubDeps := ctx.ModuleForTests("app_with_stub_deps", "android_common")
prebuilt := ctx.ModuleForTests("prebuilt", "android_common")
// Test that implicit dependencies on java_sdk_library instances are passed to the manifest.
@@ -2828,7 +2814,7 @@ func TestUsesLibraries(t *testing.T) {
t.Errorf("wanted %q in %q", w, cmd)
}
- // Test that all present libraries are preopted, including implicit SDK dependencies
+ // Test that all present libraries are preopted, including implicit SDK dependencies, possibly stubs
cmd = app.Rule("dexpreopt").RuleParams.Command
w := `--target-classpath-for-sdk any` +
` /system/framework/foo.jar` +
@@ -2840,11 +2826,6 @@ func TestUsesLibraries(t *testing.T) {
t.Errorf("wanted %q in %q", w, cmd)
}
- // TODO(skvadrik) fix dexpreopt for stub libraries for which the implementation is present
- if appWithStubDeps.MaybeRule("dexpreopt").RuleParams.Command != "" {
- t.Errorf("dexpreopt should be disabled for apps with dependencies on stub libraries")
- }
-
cmd = prebuilt.Rule("dexpreopt").RuleParams.Command
if w := `--target-classpath-for-sdk any /system/framework/foo.jar:/system/framework/bar.jar`; !strings.Contains(cmd, w) {
t.Errorf("wanted %q in %q", w, cmd)
diff --git a/java/java.go b/java/java.go
index 1d7eaa771..1200e2731 100644
--- a/java/java.go
+++ b/java/java.go
@@ -735,9 +735,21 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) {
return ret
}
- ctx.AddVariationDependencies(nil, libTag, rewriteSyspropLibs(j.properties.Libs, "libs")...)
+ libDeps := ctx.AddVariationDependencies(nil, libTag, rewriteSyspropLibs(j.properties.Libs, "libs")...)
ctx.AddVariationDependencies(nil, staticLibTag, rewriteSyspropLibs(j.properties.Static_libs, "static_libs")...)
+ // For library dependencies that are component libraries (like stubs), add the implementation
+ // as a dependency (dexpreopt needs to be against the implementation library, not stubs).
+ for _, dep := range libDeps {
+ if dep != nil {
+ if component, ok := dep.(SdkLibraryComponentDependency); ok {
+ if lib := component.OptionalSdkLibraryImplementation(); lib != nil {
+ ctx.AddVariationDependencies(nil, usesLibTag, *lib)
+ }
+ }
+ }
+ }
+
ctx.AddFarVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), pluginTag, j.properties.Plugins...)
ctx.AddFarVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), exportedPluginTag, j.properties.Exported_plugins...)
diff --git a/java/sdk_library.go b/java/sdk_library.go
index 60924a662..9caa97a0a 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -870,6 +870,12 @@ func (e *EmbeddableSdkLibraryComponent) OptionalImplicitSdkLibrary() *string {
return e.sdkLibraryComponentProperties.SdkLibraryToImplicitlyTrack
}
+// to satisfy SdkLibraryComponentDependency
+func (e *EmbeddableSdkLibraryComponent) OptionalSdkLibraryImplementation() *string {
+ // Currently implementation library name is the same as the SDK library name.
+ return e.sdkLibraryComponentProperties.SdkLibraryToImplicitlyTrack
+}
+
// Implemented by modules that are (or possibly could be) a component of a java_sdk_library
// (including the java_sdk_library) itself.
type SdkLibraryComponentDependency interface {
@@ -880,6 +886,9 @@ type SdkLibraryComponentDependency interface {
//
// Returns the name of the optional implicit SDK library or nil, if there isn't one.
OptionalImplicitSdkLibrary() *string
+
+ // The name of the implementation library for the optional SDK library or nil, if there isn't one.
+ OptionalSdkLibraryImplementation() *string
}
// Make sure that all the module types that are components of java_sdk_library/_import