Merge "bp2build kt for android_binary"
diff --git a/bp2build/android_app_conversion_test.go b/bp2build/android_app_conversion_test.go
index 067e34f..4d18f83 100644
--- a/bp2build/android_app_conversion_test.go
+++ b/bp2build/android_app_conversion_test.go
@@ -227,3 +227,82 @@
}),
}})
}
+
+func TestAndroidAppKotlinSrcs(t *testing.T) {
+ runAndroidAppTestCase(t, Bp2buildTestCase{
+ Description: "Android app with kotlin sources and common_srcs",
+ ModuleTypeUnderTest: "android_app",
+ ModuleTypeUnderTestFactory: java.AndroidAppFactory,
+ Filesystem: map[string]string{
+ "res/res.png": "",
+ },
+ Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+android_app {
+ name: "foo",
+ srcs: ["a.java", "b.kt"],
+ certificate: ":foocert",
+ manifest: "fooManifest.xml",
+ libs: ["barLib"]
+}
+java_library{
+ name: "barLib",
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("java_library", "barLib", AttrNameToString{}),
+ MakeNeverlinkDuplicateTarget("java_library", "barLib"),
+ MakeBazelTarget("android_library", "foo_kt", AttrNameToString{
+ "srcs": `[
+ "a.java",
+ "b.kt",
+ ]`,
+ "manifest": `"fooManifest.xml"`,
+ "resource_files": `["res/res.png"]`,
+ "deps": `[":barLib-neverlink"]`,
+ }),
+ MakeBazelTarget("android_binary", "foo", AttrNameToString{
+ "deps": `[":foo_kt"]`,
+ "certificate": `":foocert"`,
+ "manifest": `"fooManifest.xml"`,
+ }),
+ }})
+}
+
+func TestAndroidAppCommonSrcs(t *testing.T) {
+ runAndroidAppTestCase(t, Bp2buildTestCase{
+ Description: "Android app with common_srcs",
+ ModuleTypeUnderTest: "android_app",
+ ModuleTypeUnderTestFactory: java.AndroidAppFactory,
+ Filesystem: map[string]string{
+ "res/res.png": "",
+ },
+ Blueprint: simpleModuleDoNotConvertBp2build("filegroup", "foocert") + `
+android_app {
+ name: "foo",
+ srcs: ["a.java"],
+ common_srcs: ["b.kt"],
+ certificate: "foocert",
+ manifest: "fooManifest.xml",
+ libs: ["barLib"],
+}
+java_library{
+ name: "barLib",
+}
+`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("java_library", "barLib", AttrNameToString{}),
+ MakeNeverlinkDuplicateTarget("java_library", "barLib"),
+ MakeBazelTarget("android_library", "foo_kt", AttrNameToString{
+ "srcs": `["a.java"]`,
+ "common_srcs": `["b.kt"]`,
+ "manifest": `"fooManifest.xml"`,
+ "resource_files": `["res/res.png"]`,
+ "deps": `[":barLib-neverlink"]`,
+ }),
+ MakeBazelTarget("android_binary", "foo", AttrNameToString{
+ "deps": `[":foo_kt"]`,
+ "certificate_name": `"foocert"`,
+ "manifest": `"fooManifest.xml"`,
+ }),
+ }})
+}
diff --git a/java/app.go b/java/app.go
index 4d9c407..e7e52d4 100755
--- a/java/app.go
+++ b/java/app.go
@@ -1508,20 +1508,48 @@
certificate, certificateName := android.BazelStringOrLabelFromProp(ctx, a.overridableAppProperties.Certificate)
- attrs := &bazelAndroidAppAttributes{
- commonAttrs,
- aapt,
- deps,
+ appAttrs := &bazelAndroidAppAttributes{
// TODO(b/209576404): handle package name override by product variable PRODUCT_MANIFEST_PACKAGE_NAME_OVERRIDES
- a.overridableAppProperties.Package_name,
- certificate,
- certificateName,
+ Custom_package: a.overridableAppProperties.Package_name,
+ Certificate: certificate,
+ Certificate_name: certificateName,
}
props := bazel.BazelTargetModuleProperties{
Rule_class: "android_binary",
Bzl_load_location: "//build/bazel/rules/android:rules.bzl",
}
- ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: a.Name()}, attrs)
+
+ if !bp2BuildInfo.hasKotlinSrcs && len(a.properties.Common_srcs) == 0 {
+ appAttrs.javaCommonAttributes = commonAttrs
+ appAttrs.bazelAapt = aapt
+ appAttrs.Deps = deps
+ ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: a.Name()}, appAttrs)
+ } else {
+ ktName := a.Name() + "_kt"
+ commonAttrs.Common_srcs = bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, a.properties.Common_srcs))
+ ctx.CreateBazelTargetModule(
+ bazel.BazelTargetModuleProperties{
+ Rule_class: "android_library",
+ Bzl_load_location: "//build/bazel/rules/android:rules.bzl",
+ },
+ android.CommonAttributes{Name: ktName},
+ &bazelAndroidLibrary{
+ javaLibraryAttributes: &javaLibraryAttributes{
+ javaCommonAttributes: commonAttrs,
+ Deps: deps,
+ },
+ bazelAapt: aapt,
+ },
+ )
+
+ appAttrs.bazelAapt = &bazelAapt{Manifest: aapt.Manifest}
+ appAttrs.Deps = bazel.MakeSingleLabelListAttribute(bazel.Label{Label: ":" + ktName})
+ ctx.CreateBazelTargetModule(
+ props,
+ android.CommonAttributes{Name: a.Name()},
+ appAttrs,
+ )
+ }
}