From 0e5d16c6f0f92c81616e3821c6e58491821b8610 Mon Sep 17 00:00:00 2001 From: Zi Wang Date: Thu, 8 Feb 2024 06:19:34 +0000 Subject: [PATCH] Add property Exportable to aconfig_declarations Only when aconfig_declarations explicitly set this property true, its flags will be repackaged. If a java_aconfig_library has mode "exported", its corresponding aconfig_declarations must have exportable prop set to true. Test: Added unit tests and CI Bug: 310504781 Ignore-AOSP-First: this change will be cherry picked to aosp (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e4527f3010b3fd6f33948a15a9b4fdc944da34f0) Merged-In: Ie9526e3755a6e7d142b377d5dd85a1bc60ffabc5 Change-Id: Ie9526e3755a6e7d142b377d5dd85a1bc60ffabc5 --- aconfig/aconfig_declarations.go | 4 ++++ aconfig/aconfig_declarations_test.go | 21 ++++++++++++++++++++ aconfig/codegen/java_aconfig_library.go | 21 ++++++++++++++------ aconfig/codegen/java_aconfig_library_test.go | 1 + android/aconfig_providers.go | 1 + 5 files changed, 42 insertions(+), 6 deletions(-) diff --git a/aconfig/aconfig_declarations.go b/aconfig/aconfig_declarations.go index 78f506a04..392e8193a 100644 --- a/aconfig/aconfig_declarations.go +++ b/aconfig/aconfig_declarations.go @@ -40,6 +40,9 @@ type DeclarationsModule struct { // Container(system/vendor/apex) that this module belongs to Container string + + // The flags will only be repackaged if this prop is true. + Exportable bool } intermediatePath android.WritablePath @@ -159,6 +162,7 @@ func (module *DeclarationsModule) GenerateAndroidBuildActions(ctx android.Module android.SetProvider(ctx, android.AconfigDeclarationsProviderKey, android.AconfigDeclarationsProviderData{ Package: module.properties.Package, Container: module.properties.Container, + Exportable: module.properties.Exportable, IntermediateCacheOutputPath: intermediateCacheFilePath, IntermediateDumpOutputPath: intermediateDumpFilePath, }) diff --git a/aconfig/aconfig_declarations_test.go b/aconfig/aconfig_declarations_test.go index d508af7a4..1fe3c862a 100644 --- a/aconfig/aconfig_declarations_test.go +++ b/aconfig/aconfig_declarations_test.go @@ -27,6 +27,7 @@ func TestAconfigDeclarations(t *testing.T) { name: "module_name", package: "com.example.package", container: "com.android.foo", + exportable: true, srcs: [ "foo.aconfig", "bar.aconfig", @@ -41,6 +42,7 @@ func TestAconfigDeclarations(t *testing.T) { depData, _ := android.SingletonModuleProvider(result, module, android.AconfigDeclarationsProviderKey) android.AssertStringEquals(t, "package", depData.Package, "com.example.package") android.AssertStringEquals(t, "container", depData.Container, "com.android.foo") + android.AssertBoolEquals(t, "exportable", depData.Exportable, true) if !strings.HasSuffix(depData.IntermediateCacheOutputPath.String(), "/intermediate.pb") { t.Errorf("Missing intermediates proto path in provider: %s", depData.IntermediateCacheOutputPath.String()) } @@ -48,3 +50,22 @@ func TestAconfigDeclarations(t *testing.T) { t.Errorf("Missing intermediates text path in provider: %s", depData.IntermediateDumpOutputPath.String()) } } + +func TestAconfigDeclarationsWithExportableUnset(t *testing.T) { + bp := ` + aconfig_declarations { + name: "module_name", + package: "com.example.package", + container: "com.android.foo", + srcs: [ + "foo.aconfig", + "bar.aconfig", + ], + } + ` + result := runTest(t, android.FixtureExpectsNoErrors, bp) + + module := result.ModuleForTests("module_name", "").Module().(*DeclarationsModule) + depData, _ := android.SingletonModuleProvider(result, module, android.AconfigDeclarationsProviderKey) + android.AssertBoolEquals(t, "exportable", depData.Exportable, false) +} diff --git a/aconfig/codegen/java_aconfig_library.go b/aconfig/codegen/java_aconfig_library.go index 4b8d3468e..d4c6da574 100644 --- a/aconfig/codegen/java_aconfig_library.go +++ b/aconfig/codegen/java_aconfig_library.go @@ -91,6 +91,12 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild if !isModeSupported(mode) { ctx.PropertyErrorf("mode", "%q is not a supported mode", mode) } + // TODO: uncomment this part after internal clean up + //if mode == "exported" && !declarations.Exportable { + // // if mode is exported, the corresponding aconfig_declaration must mark its + // // exportable property true + // ctx.PropertyErrorf("mode", "exported mode requires its aconfig_declaration has exportable prop true") + //} ctx.Build(pctx, android.BuildParams{ Rule: javaRule, @@ -102,12 +108,15 @@ func (callbacks *JavaAconfigDeclarationsLibraryCallbacks) GenerateSourceJarBuild }, }) - // Mark our generated code as possibly needing jarjar repackaging - // TODO: Maybe control this with a property? - module.AddJarJarRenameRule(declarations.Package+".Flags", "") - module.AddJarJarRenameRule(declarations.Package+".FeatureFlags", "") - module.AddJarJarRenameRule(declarations.Package+".FeatureFlagsImpl", "") - module.AddJarJarRenameRule(declarations.Package+".FakeFeatureFlagsImpl", "") + if declarations.Exportable { + // Mark our generated code as possibly needing jarjar repackaging + // The repackaging only happens when the corresponding aconfig_declaration + // has property exportable true + module.AddJarJarRenameRule(declarations.Package+".Flags", "") + module.AddJarJarRenameRule(declarations.Package+".FeatureFlags", "") + module.AddJarJarRenameRule(declarations.Package+".FeatureFlagsImpl", "") + module.AddJarJarRenameRule(declarations.Package+".FakeFeatureFlagsImpl", "") + } return srcJarPath } diff --git a/aconfig/codegen/java_aconfig_library_test.go b/aconfig/codegen/java_aconfig_library_test.go index 85d2675d2..de45b5cc3 100644 --- a/aconfig/codegen/java_aconfig_library_test.go +++ b/aconfig/codegen/java_aconfig_library_test.go @@ -176,6 +176,7 @@ func testCodegenMode(t *testing.T, bpMode string, ruleMode string) { name: "my_aconfig_declarations", package: "com.example.package", srcs: ["foo.aconfig"], + exportable: true, } java_aconfig_library { diff --git a/android/aconfig_providers.go b/android/aconfig_providers.go index 1444e7d8f..74c1a5ecc 100644 --- a/android/aconfig_providers.go +++ b/android/aconfig_providers.go @@ -35,6 +35,7 @@ var ( type AconfigDeclarationsProviderData struct { Package string Container string + Exportable bool IntermediateCacheOutputPath WritablePath IntermediateDumpOutputPath WritablePath }