diff --git a/aconfig/Android.bp b/aconfig/Android.bp index 3c79f19c1..402cf1649 100644 --- a/aconfig/Android.bp +++ b/aconfig/Android.bp @@ -25,6 +25,7 @@ bootstrap_go_package { "aconfig_declarations_test.go", "aconfig_values_test.go", "aconfig_value_set_test.go", + "all_aconfig_declarations_test.go", ], pluginFor: ["soong_build"], } diff --git a/aconfig/all_aconfig_declarations.go b/aconfig/all_aconfig_declarations.go index 36bea0e3f..b6c90234a 100644 --- a/aconfig/all_aconfig_declarations.go +++ b/aconfig/all_aconfig_declarations.go @@ -16,6 +16,7 @@ package aconfig import ( "android/soong/android" + "fmt" ) // A singleton module that collects all of the aconfig flags declared in the @@ -35,6 +36,7 @@ type allAconfigDeclarationsSingleton struct { func (this *allAconfigDeclarationsSingleton) GenerateBuildActions(ctx android.SingletonContext) { // Find all of the aconfig_declarations modules + var packages = make(map[string]int) var cacheFiles android.Paths ctx.VisitAllModules(func(module android.Module) { decl, ok := android.SingletonModuleProvider(ctx, module, android.AconfigDeclarationsProviderKey) @@ -42,8 +44,21 @@ func (this *allAconfigDeclarationsSingleton) GenerateBuildActions(ctx android.Si return } cacheFiles = append(cacheFiles, decl.IntermediateCacheOutputPath) + packages[decl.Package]++ }) + var numOffendingPkg = 0 + for pkg, cnt := range packages { + if cnt > 1 { + fmt.Printf("%d aconfig_declarations found for package %s\n", cnt, pkg) + numOffendingPkg++ + } + } + + if numOffendingPkg > 0 { + panic(fmt.Errorf("Only one aconfig_declarations allowed for each package.")) + } + // Generate build action for aconfig this.intermediatePath = android.PathForIntermediates(ctx, "all_aconfig_declarations.pb") ctx.Build(pctx, android.BuildParams{ diff --git a/aconfig/all_aconfig_declarations_test.go b/aconfig/all_aconfig_declarations_test.go new file mode 100644 index 000000000..0b2021e7b --- /dev/null +++ b/aconfig/all_aconfig_declarations_test.go @@ -0,0 +1,48 @@ +// Copyright 2024 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package aconfig + +import ( + "testing" + + "android/soong/android" +) + +func TestTwoAconfigDeclarationsPerPackage(t *testing.T) { + bp := ` + aconfig_declarations { + name: "module_name.foo", + package: "com.example.package", + container: "com.android.foo", + srcs: [ + "foo.aconfig", + ], + } + + aconfig_declarations { + name: "module_name.bar", + package: "com.example.package", + container: "com.android.foo", + srcs: [ + "bar.aconfig", + ], + } + ` + errMsg := "Only one aconfig_declarations allowed for each package." + android.GroupFixturePreparers( + PrepareForTestWithAconfigBuildComponents). + ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern(errMsg)). + RunTestWithBp(t, bp) +} diff --git a/aconfig/codegen/java_aconfig_library_test.go b/aconfig/codegen/java_aconfig_library_test.go index 8d54b5b36..7361d44c1 100644 --- a/aconfig/codegen/java_aconfig_library_test.go +++ b/aconfig/codegen/java_aconfig_library_test.go @@ -34,7 +34,7 @@ func runJavaAndroidMkTest(t *testing.T, bp string) { RunTestWithBp(t, bp+` aconfig_declarations { name: "my_aconfig_declarations_foo", - package: "com.example.package", + package: "com.example.package.foo", srcs: ["foo.aconfig"], } @@ -45,7 +45,7 @@ func runJavaAndroidMkTest(t *testing.T, bp string) { aconfig_declarations { name: "my_aconfig_declarations_bar", - package: "com.example.package", + package: "com.example.package.bar", srcs: ["bar.aconfig"], } diff --git a/java/app_test.go b/java/app_test.go index 3ee94d531..362bef922 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -4347,14 +4347,14 @@ func TestAppFlagsPackages(t *testing.T) { } aconfig_declarations { name: "bar", - package: "com.example.package", + package: "com.example.package.bar", srcs: [ "bar.aconfig", ], } aconfig_declarations { name: "baz", - package: "com.example.package", + package: "com.example.package.baz", srcs: [ "baz.aconfig", ],