fix: required property doesn't track deps to java, apex, ...

This change fixes a bug that the required property doesn't track
dependencies to modules whose arch is common.

Bug: 321000103
Bug: 321626681
Test: go test ./...
Change-Id: I3d2b3ad8cb2a9f1c5c3d5345bf05402a787f011a
diff --git a/android/module.go b/android/module.go
index f908451..89c4ddd 100644
--- a/android/module.go
+++ b/android/module.go
@@ -1074,14 +1074,22 @@
 		}
 	}
 
+	var deviceTargets []Target
+	deviceTargets = append(deviceTargets, ctx.Config().Targets[Android]...)
+	deviceTargets = append(deviceTargets, ctx.Config().AndroidCommonTarget)
+
+	var hostTargets []Target
+	hostTargets = append(hostTargets, ctx.Config().Targets[ctx.Config().BuildOS]...)
+	hostTargets = append(hostTargets, ctx.Config().BuildOSCommonTarget)
+
 	if m.Device() {
 		for _, depName := range m.RequiredModuleNames() {
-			for _, target := range ctx.Config().Targets[Android] {
+			for _, target := range deviceTargets {
 				addDep(target, depName)
 			}
 		}
 		for _, depName := range m.HostRequiredModuleNames() {
-			for _, target := range ctx.Config().Targets[ctx.Config().BuildOS] {
+			for _, target := range hostTargets {
 				addDep(target, depName)
 			}
 		}
@@ -1089,7 +1097,7 @@
 
 	if m.Host() {
 		for _, depName := range m.RequiredModuleNames() {
-			for _, target := range ctx.Config().Targets[ctx.Config().BuildOS] {
+			for _, target := range hostTargets {
 				// When a host module requires another host module, don't make a
 				// dependency if they have different OSes (i.e. hostcross).
 				if m.Target().HostCross != target.HostCross {
@@ -1099,7 +1107,7 @@
 			}
 		}
 		for _, depName := range m.TargetRequiredModuleNames() {
-			for _, target := range ctx.Config().Targets[Android] {
+			for _, target := range deviceTargets {
 				addDep(target, depName)
 			}
 		}
diff --git a/filesystem/Android.bp b/filesystem/Android.bp
index 18dd553..854a366 100644
--- a/filesystem/Android.bp
+++ b/filesystem/Android.bp
@@ -10,8 +10,9 @@
         "soong",
         "soong-android",
         "soong-bpf", // for testing
-        "soong-phony", // for testing
+        "soong-java", // for testing
         "soong-linkerconfig",
+        "soong-phony", // for testing
     ],
     srcs: [
         "avb_add_hash_footer.go",
diff --git a/filesystem/filesystem_test.go b/filesystem/filesystem_test.go
index 5c780f8..3ce5d4e 100644
--- a/filesystem/filesystem_test.go
+++ b/filesystem/filesystem_test.go
@@ -23,6 +23,7 @@
 	"android/soong/bpf"
 	"android/soong/cc"
 	"android/soong/etc"
+	"android/soong/java"
 	"android/soong/phony"
 
 	"github.com/google/blueprint/proptools"
@@ -34,9 +35,12 @@
 
 var fixture = android.GroupFixturePreparers(
 	android.PrepareForIntegrationTestWithAndroid,
+	android.PrepareForTestWithAndroidBuildComponents,
 	bpf.PrepareForTestWithBpf,
-	etc.PrepareForTestWithPrebuiltEtc,
 	cc.PrepareForIntegrationTestWithCc,
+	etc.PrepareForTestWithPrebuiltEtc,
+	java.PrepareForTestWithJavaBuildComponents,
+	java.PrepareForTestWithJavaDefaultModules,
 	phony.PrepareForTestWithPhony,
 	PrepareForTestWithFilesystemBuildComponents,
 )
@@ -88,12 +92,21 @@
 
 		phony {
 			name: "phony",
-			required: ["libquz"],
+			required: [
+				"libquz",
+				"myapp",
+			],
 		}
 
 		cc_library {
 			name: "libquz",
 		}
+
+		android_app {
+			name: "myapp",
+			platform_apis: true,
+			installable: true,
+		}
 	`)
 
 	// produces "myfilesystem.img"
@@ -101,6 +114,7 @@
 
 	fs := result.ModuleForTests("myfilesystem", "android_common").Module().(*filesystem)
 	expected := []string{
+		"app/myapp/myapp.apk",
 		"bin/foo",
 		"lib/libbar.so",
 		"lib64/libbar.so",