Merge "Do not allow duplicate deapexer dependencies." into sc-dev
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 4829029..7b01b94 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -6568,6 +6568,73 @@
return result.TestContext
}
+func TestDuplicateDeapexeresFromPrebuiltApexes(t *testing.T) {
+ preparers := android.GroupFixturePreparers(
+ java.PrepareForTestWithJavaDefaultModules,
+ PrepareForTestWithApexBuildComponents,
+ ).
+ ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
+ `Ambiguous duplicate deapexer module dependencies "com.android.myapex.deapexer" and "com.mycompany.android.myapex.deapexer"`))
+
+ bpBase := `
+ apex_set {
+ name: "com.android.myapex",
+ exported_bootclasspath_fragments: ["my-bootclasspath-fragment"],
+ set: "myapex.apks",
+ }
+
+ apex_set {
+ name: "com.mycompany.android.myapex",
+ apex_name: "com.android.myapex",
+ exported_bootclasspath_fragments: ["my-bootclasspath-fragment"],
+ set: "company-myapex.apks",
+ }
+
+ prebuilt_bootclasspath_fragment {
+ name: "my-bootclasspath-fragment",
+ apex_available: ["com.android.myapex"],
+ %s
+ }
+ `
+
+ t.Run("java_import", func(t *testing.T) {
+ _ = preparers.RunTestWithBp(t, fmt.Sprintf(bpBase, `contents: ["libfoo"]`)+`
+ java_import {
+ name: "libfoo",
+ jars: ["libfoo.jar"],
+ apex_available: ["com.android.myapex"],
+ }
+ `)
+ })
+
+ t.Run("java_sdk_library_import", func(t *testing.T) {
+ _ = preparers.RunTestWithBp(t, fmt.Sprintf(bpBase, `contents: ["libfoo"]`)+`
+ java_sdk_library_import {
+ name: "libfoo",
+ public: {
+ jars: ["libbar.jar"],
+ },
+ apex_available: ["com.android.myapex"],
+ }
+ `)
+ })
+
+ t.Run("prebuilt_bootclasspath_fragment", func(t *testing.T) {
+ _ = preparers.RunTestWithBp(t, fmt.Sprintf(bpBase, `
+ image_name: "art",
+ contents: ["libfoo"],
+ `)+`
+ java_sdk_library_import {
+ name: "libfoo",
+ public: {
+ jars: ["libbar.jar"],
+ },
+ apex_available: ["com.android.myapex"],
+ }
+ `)
+ })
+}
+
func TestUpdatable_should_set_min_sdk_version(t *testing.T) {
testApexError(t, `"myapex" .*: updatable: updatable APEXes should set min_sdk_version`, `
apex {
diff --git a/java/bootclasspath_fragment.go b/java/bootclasspath_fragment.go
index 358c72b..a039964 100644
--- a/java/bootclasspath_fragment.go
+++ b/java/bootclasspath_fragment.go
@@ -907,11 +907,15 @@
}
var deapexerModule android.Module
- ctx.VisitDirectDeps(func(module android.Module) {
- tag := ctx.OtherModuleDependencyTag(module)
+ ctx.VisitDirectDeps(func(to android.Module) {
+ tag := ctx.OtherModuleDependencyTag(to)
// Save away the `deapexer` module on which this depends, if any.
if tag == android.DeapexerTag {
- deapexerModule = module
+ if deapexerModule != nil {
+ ctx.ModuleErrorf("Ambiguous duplicate deapexer module dependencies %q and %q",
+ deapexerModule.Name(), to.Name())
+ }
+ deapexerModule = to
}
})
diff --git a/java/java.go b/java/java.go
index 71c1b33..ca63782 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1283,6 +1283,10 @@
// Save away the `deapexer` module on which this depends, if any.
if tag == android.DeapexerTag {
+ if deapexerModule != nil {
+ ctx.ModuleErrorf("Ambiguous duplicate deapexer module dependencies %q and %q",
+ deapexerModule.Name(), module.Name())
+ }
deapexerModule = module
}
})
diff --git a/java/sdk_library.go b/java/sdk_library.go
index d7f53ec..f2d0c59 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -2160,6 +2160,10 @@
// Save away the `deapexer` module on which this depends, if any.
if tag == android.DeapexerTag {
+ if deapexerModule != nil {
+ ctx.ModuleErrorf("Ambiguous duplicate deapexer module dependencies %q and %q",
+ deapexerModule.Name(), to.Name())
+ }
deapexerModule = to
}
})