From 98562fded9a6378d505bad19584373f748ac252f Mon Sep 17 00:00:00 2001 From: Ted Bauer Date: Fri, 8 Dec 2023 19:15:08 +0000 Subject: aconfig: fix template bug in exported mode. FakeFeatureFlagsImpl still generated all flags in its mFlagMap field, but it should generate only exported flags in exported mode. Test: atest aconfig.test.java Bug: 311152507 Change-Id: I61843cd87b3bb5035772791a5869a91b07d574d8 --- tools/aconfig/src/codegen/java.rs | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'tools/aconfig/src/codegen/java.rs') diff --git a/tools/aconfig/src/codegen/java.rs b/tools/aconfig/src/codegen/java.rs index f958c21bac..ae3f274648 100644 --- a/tools/aconfig/src/codegen/java.rs +++ b/tools/aconfig/src/codegen/java.rs @@ -14,7 +14,7 @@ * limitations under the License. */ -use anyhow::Result; +use anyhow::{anyhow, Result}; use serde::Serialize; use std::collections::{BTreeMap, BTreeSet}; use std::path::PathBuf; @@ -34,17 +34,26 @@ where { let flag_elements: Vec = parsed_flags_iter.map(|pf| create_flag_element(package, pf)).collect(); + let exported_flag_elements: Vec = + flag_elements.iter().filter(|elem| elem.exported).cloned().collect(); let namespace_flags = gen_flags_by_namespace(&flag_elements); let properties_set: BTreeSet = flag_elements.iter().map(|fe| format_property_name(&fe.device_config_namespace)).collect(); - let is_read_write = flag_elements.iter().any(|elem| elem.is_read_write); let is_test_mode = codegen_mode == CodegenMode::Test; let library_exported = codegen_mode == CodegenMode::Exported; + let runtime_lookup_required = + flag_elements.iter().any(|elem| elem.is_read_write) || library_exported; + + if library_exported && exported_flag_elements.is_empty() { + return Err(anyhow!("exported library contains no exported flags")); + } + let context = Context { flag_elements, + exported_flag_elements, namespace_flags, is_test_mode, - is_read_write, + runtime_lookup_required, properties_set, package_name: package.to_string(), library_exported, @@ -100,9 +109,10 @@ fn gen_flags_by_namespace(flags: &[FlagElement]) -> Vec { #[derive(Serialize)] struct Context { pub flag_elements: Vec, + pub exported_flag_elements: Vec, pub namespace_flags: Vec, pub is_test_mode: bool, - pub is_read_write: bool, + pub runtime_lookup_required: bool, pub properties_set: BTreeSet, pub package_name: String, pub library_exported: bool, @@ -655,14 +665,8 @@ mod tests { } private Map mFlagMap = new HashMap<>( Map.ofEntries( - Map.entry(Flags.FLAG_DISABLED_RO, false), - Map.entry(Flags.FLAG_DISABLED_RW, false), Map.entry(Flags.FLAG_DISABLED_RW_EXPORTED, false), - Map.entry(Flags.FLAG_DISABLED_RW_IN_OTHER_NAMESPACE, false), - Map.entry(Flags.FLAG_ENABLED_FIXED_RO, false), - Map.entry(Flags.FLAG_ENABLED_RO, false), - Map.entry(Flags.FLAG_ENABLED_RO_EXPORTED, false), - Map.entry(Flags.FLAG_ENABLED_RW, false) + Map.entry(Flags.FLAG_ENABLED_RO_EXPORTED, false) ) ); } -- cgit v1.2.3-59-g8ed1b