Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49c49f36 authored by Mårten Kongstad's avatar Mårten Kongstad
Browse files

aconfig: pass ownership of ProtoParsedFlag items to C++ codegen

Pass ownership of the ProtoParsedFlag iterator items to the C++ codegen:
this removes the need for an explicit lifetime annotation.

Bug: N/A
Test: atest aconfig.test
Change-Id: Ic6606a9ab01ddcb61aa668d7ac901469b1e25a1f
parent b7fc0d3e
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -23,17 +23,17 @@ use crate::codegen;
use crate::commands::{CodegenMode, OutputFile};
use crate::protos::{ProtoFlagPermission, ProtoFlagState, ProtoParsedFlag};

pub fn generate_cpp_code<'a, I>(
pub fn generate_cpp_code<I>(
    package: &str,
    parsed_flags_iter: I,
    codegen_mode: CodegenMode,
) -> Result<Vec<OutputFile>>
where
    I: Iterator<Item = &'a ProtoParsedFlag>,
    I: Iterator<Item = ProtoParsedFlag>,
{
    let mut readwrite_count = 0;
    let class_elements: Vec<ClassElement> = parsed_flags_iter
        .map(|pf| create_class_element(package, pf, &mut readwrite_count))
        .map(|pf| create_class_element(package, &pf, &mut readwrite_count))
        .collect();
    let readwrite = readwrite_count > 0;
    let has_fixed_read_only = class_elements.iter().any(|item| item.is_fixed_read_only);
@@ -734,8 +734,11 @@ void com_android_aconfig_test_reset_flags() {

    fn test_generate_cpp_code(mode: CodegenMode) {
        let parsed_flags = crate::test::parse_test_flags();
        let generated =
            generate_cpp_code(crate::test::TEST_PACKAGE, parsed_flags.parsed_flag.iter(), mode)
        let generated = generate_cpp_code(
            crate::test::TEST_PACKAGE,
            parsed_flags.parsed_flag.into_iter(),
            mode,
        )
        .unwrap();
        let mut generated_files_map = HashMap::new();
        for file in generated {
+2 −1
Original line number Diff line number Diff line
@@ -210,7 +210,8 @@ pub fn create_cpp_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Vec
    let Some(package) = find_unique_package(&filtered_parsed_flags) else {
        bail!("no parsed flags, or the parsed flags use different packages");
    };
    generate_cpp_code(package, filtered_parsed_flags.iter(), codegen_mode)
    let package = package.to_string();
    generate_cpp_code(&package, filtered_parsed_flags.into_iter(), codegen_mode)
}

pub fn create_rust_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<OutputFile> {