Merge "aconfig: add assign_flag_ids function" into main am: 68570f67c1
Original change: https://android-review.googlesource.com/c/platform/build/+/2888807 Change-Id: I1ba7ca72747434d7c054c103b735f0bc456c719a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -15,7 +15,9 @@
|
||||
*/
|
||||
|
||||
use anyhow::{bail, ensure, Context, Result};
|
||||
use itertools::Itertools;
|
||||
use protobuf::Message;
|
||||
use std::collections::HashMap;
|
||||
use std::io::Read;
|
||||
use std::path::PathBuf;
|
||||
|
||||
@@ -195,6 +197,7 @@ pub fn create_java_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Ve
|
||||
bail!("no parsed flags, or the parsed flags use different packages");
|
||||
};
|
||||
let package = package.to_string();
|
||||
let _flag_ids = assign_flag_ids(&package, modified_parsed_flags.iter())?;
|
||||
generate_java_code(&package, modified_parsed_flags.into_iter(), codegen_mode)
|
||||
}
|
||||
|
||||
@@ -205,6 +208,7 @@ pub fn create_cpp_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Vec
|
||||
bail!("no parsed flags, or the parsed flags use different packages");
|
||||
};
|
||||
let package = package.to_string();
|
||||
let _flag_ids = assign_flag_ids(&package, modified_parsed_flags.iter())?;
|
||||
generate_cpp_code(&package, modified_parsed_flags.into_iter(), codegen_mode)
|
||||
}
|
||||
|
||||
@@ -215,6 +219,7 @@ pub fn create_rust_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Ou
|
||||
bail!("no parsed flags, or the parsed flags use different packages");
|
||||
};
|
||||
let package = package.to_string();
|
||||
let _flag_ids = assign_flag_ids(&package, modified_parsed_flags.iter())?;
|
||||
generate_rust_code(&package, modified_parsed_flags.into_iter(), codegen_mode)
|
||||
}
|
||||
|
||||
@@ -345,6 +350,21 @@ pub fn modify_parsed_flags_based_on_mode(
|
||||
Ok(modified_parsed_flags)
|
||||
}
|
||||
|
||||
fn assign_flag_ids<'a, I>(package: &str, parsed_flags_iter: I) -> Result<HashMap<String, u32>>
|
||||
where
|
||||
I: Iterator<Item = &'a ProtoParsedFlag> + Clone,
|
||||
{
|
||||
assert!(parsed_flags_iter.clone().tuple_windows().all(|(a, b)| a.name() <= b.name()));
|
||||
let mut flag_ids = HashMap::new();
|
||||
for (id_to_assign, pf) in (0_u32..).zip(parsed_flags_iter) {
|
||||
if package != pf.package() {
|
||||
return Err(anyhow::anyhow!("encountered a flag not in current package"));
|
||||
}
|
||||
flag_ids.insert(pf.name().to_string(), id_to_assign);
|
||||
}
|
||||
Ok(flag_ids)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@@ -655,4 +675,23 @@ mod tests {
|
||||
modify_parsed_flags_based_on_mode(parsed_flags, CodegenMode::Exported).unwrap_err();
|
||||
assert_eq!("exported library contains no exported flags", format!("{:?}", error));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_assign_flag_ids() {
|
||||
let parsed_flags = crate::test::parse_test_flags();
|
||||
let package = find_unique_package(&parsed_flags.parsed_flag).unwrap().to_string();
|
||||
let flag_ids = assign_flag_ids(&package, parsed_flags.parsed_flag.iter()).unwrap();
|
||||
let expected_flag_ids = HashMap::from([
|
||||
(String::from("disabled_ro"), 0_u32),
|
||||
(String::from("disabled_rw"), 1_u32),
|
||||
(String::from("disabled_rw_exported"), 2_u32),
|
||||
(String::from("disabled_rw_in_other_namespace"), 3_u32),
|
||||
(String::from("enabled_fixed_ro"), 4_u32),
|
||||
(String::from("enabled_fixed_ro_exported"), 5_u32),
|
||||
(String::from("enabled_ro"), 6_u32),
|
||||
(String::from("enabled_ro_exported"), 7_u32),
|
||||
(String::from("enabled_rw"), 8_u32),
|
||||
]);
|
||||
assert_eq!(flag_ids, expected_flag_ids);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user