Loading tools/aconfig/src/codegen_cpp.rs +21 −3 Original line number Diff line number Diff line Loading @@ -34,13 +34,17 @@ where let class_elements: Vec<ClassElement> = parsed_flags_iter.map(|pf| create_class_element(package, pf)).collect(); let readwrite = class_elements.iter().any(|item| item.readwrite); let has_fixed_read_only = class_elements.iter().any(|item| item.is_fixed_read_only); let header = package.replace('.', "_"); let package_macro = header.to_uppercase(); let cpp_namespace = package.replace('.', "::"); ensure!(codegen::is_valid_name_ident(&header)); let context = Context { header: &header, package_macro: &package_macro, cpp_namespace: &cpp_namespace, package, has_fixed_read_only, readwrite, for_test: codegen_mode == CodegenMode::Test, class_elements, Loading Loading @@ -79,8 +83,10 @@ pub struct FileSpec<'a> { #[derive(Serialize)] pub struct Context<'a> { pub header: &'a str, pub package_macro: &'a str, pub cpp_namespace: &'a str, pub package: &'a str, pub has_fixed_read_only: bool, pub readwrite: bool, pub for_test: bool, pub class_elements: Vec<ClassElement>, Loading @@ -89,8 +95,10 @@ pub struct Context<'a> { #[derive(Serialize)] pub struct ClassElement { pub readwrite: bool, pub is_fixed_read_only: bool, pub default_value: String, pub flag_name: String, pub flag_macro: String, pub device_config_namespace: String, pub device_config_flag: String, } Loading @@ -98,12 +106,14 @@ pub struct ClassElement { fn create_class_element(package: &str, pf: &ProtoParsedFlag) -> ClassElement { ClassElement { readwrite: pf.permission() == ProtoFlagPermission::READ_WRITE, is_fixed_read_only: pf.is_fixed_read_only(), default_value: if pf.state() == ProtoFlagState::ENABLED { "true".to_string() } else { "false".to_string() }, flag_name: pf.name().to_string(), flag_macro: pf.name().to_uppercase(), device_config_namespace: pf.namespace().to_string(), device_config_flag: codegen::create_device_config_ident(package, pf.name()) .expect("values checked at flag parse time"), Loading @@ -118,6 +128,14 @@ mod tests { const EXPORTED_PROD_HEADER_EXPECTED: &str = r#" #pragma once #ifndef COM_ANDROID_ACONFIG_TEST #define COM_ANDROID_ACONFIG_TEST(FLAG) COM_ANDROID_ACONFIG_TEST_##FLAG #endif #ifndef COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO #define COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO true #endif #ifdef __cplusplus #include <memory> Loading Loading @@ -149,7 +167,7 @@ inline bool disabled_rw() { } inline bool enabled_fixed_ro() { return true; return COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO; } inline bool enabled_ro() { Loading Loading @@ -319,7 +337,7 @@ namespace com::android::aconfig::test { } virtual bool enabled_fixed_ro() override { return true; return COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO; } virtual bool enabled_ro() override { Loading Loading @@ -348,7 +366,7 @@ bool com_android_aconfig_test_disabled_rw() { } bool com_android_aconfig_test_enabled_fixed_ro() { return true; return COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO; } bool com_android_aconfig_test_enabled_ro() { Loading tools/aconfig/templates/cpp_exported_header.template +26 −6 Original line number Diff line number Diff line #pragma once {{ if not for_test- }} {{ if has_fixed_read_only- }} #ifndef {package_macro} #define {package_macro}(FLAG) {package_macro}_##FLAG #endif {{ for item in class_elements- }} {{ if item.is_fixed_read_only- }} #ifndef {package_macro}_{item.flag_macro} #define {package_macro}_{item.flag_macro} {item.default_value} #endif {{ endif }} {{ -endfor }} {{ -endif }} {{ -endif }} #ifdef __cplusplus #include <memory> namespace {cpp_namespace} \{ class flag_provider_interface \{ Loading @@ -15,7 +31,7 @@ public: {{ if for_test }} virtual void {item.flag_name}(bool val) = 0; {{ -endif }} {{ endfor }} {{ -endfor }} {{ if for_test }} virtual void reset_flags() \{} Loading @@ -29,10 +45,14 @@ inline bool {item.flag_name}() \{ {{ if for_test }} return provider_->{item.flag_name}(); {{ -else- }} {{ if not item.readwrite- }} return {item.default_value}; {{ -else- }} {{ if item.readwrite- }} return provider_->{item.flag_name}(); {{ -else- }} {{ if item.is_fixed_read_only }} return {package_macro}_{item.flag_macro}; {{ -else- }} return {item.default_value}; {{ -endif }} {{ -endif }} {{ -endif }} } Loading @@ -42,7 +62,7 @@ inline void {item.flag_name}(bool val) \{ provider_->{item.flag_name}(val); } {{ -endif }} {{ endfor }} {{ -endfor }} {{ if for_test }} inline void reset_flags() \{ Loading @@ -61,7 +81,7 @@ bool {header}_{item.flag_name}(); {{ if for_test }} void set_{header}_{item.flag_name}(bool val); {{ -endif }} {{ endfor - }} {{ -endfor }} {{ if for_test }} void {header}_reset_flags(); Loading tools/aconfig/templates/cpp_source_file.template +12 −4 Original line number Diff line number Diff line Loading @@ -58,8 +58,12 @@ namespace {cpp_namespace} \{ "{item.device_config_flag}", "{item.default_value}") == "true"; {{ -else- }} {{ if item.is_fixed_read_only }} return {package_macro}_{item.flag_macro}; {{ -else- }} return {item.default_value}; {{ -endif }} {{ -endif }} } {{ endfor }} }; Loading @@ -79,10 +83,14 @@ bool {header}_{item.flag_name}() \{ {{ if for_test }} return {cpp_namespace}::{item.flag_name}(); {{ -else- }} {{ if not item.readwrite- }} return {item.default_value}; {{ -else- }} {{ if item.readwrite- }} return {cpp_namespace}::{item.flag_name}(); {{ -else- }} {{ if item.is_fixed_read_only }} return {package_macro}_{item.flag_macro}; {{ -else- }} return {item.default_value}; {{ -endif }} {{ -endif }} {{ -endif }} } Loading Loading
tools/aconfig/src/codegen_cpp.rs +21 −3 Original line number Diff line number Diff line Loading @@ -34,13 +34,17 @@ where let class_elements: Vec<ClassElement> = parsed_flags_iter.map(|pf| create_class_element(package, pf)).collect(); let readwrite = class_elements.iter().any(|item| item.readwrite); let has_fixed_read_only = class_elements.iter().any(|item| item.is_fixed_read_only); let header = package.replace('.', "_"); let package_macro = header.to_uppercase(); let cpp_namespace = package.replace('.', "::"); ensure!(codegen::is_valid_name_ident(&header)); let context = Context { header: &header, package_macro: &package_macro, cpp_namespace: &cpp_namespace, package, has_fixed_read_only, readwrite, for_test: codegen_mode == CodegenMode::Test, class_elements, Loading Loading @@ -79,8 +83,10 @@ pub struct FileSpec<'a> { #[derive(Serialize)] pub struct Context<'a> { pub header: &'a str, pub package_macro: &'a str, pub cpp_namespace: &'a str, pub package: &'a str, pub has_fixed_read_only: bool, pub readwrite: bool, pub for_test: bool, pub class_elements: Vec<ClassElement>, Loading @@ -89,8 +95,10 @@ pub struct Context<'a> { #[derive(Serialize)] pub struct ClassElement { pub readwrite: bool, pub is_fixed_read_only: bool, pub default_value: String, pub flag_name: String, pub flag_macro: String, pub device_config_namespace: String, pub device_config_flag: String, } Loading @@ -98,12 +106,14 @@ pub struct ClassElement { fn create_class_element(package: &str, pf: &ProtoParsedFlag) -> ClassElement { ClassElement { readwrite: pf.permission() == ProtoFlagPermission::READ_WRITE, is_fixed_read_only: pf.is_fixed_read_only(), default_value: if pf.state() == ProtoFlagState::ENABLED { "true".to_string() } else { "false".to_string() }, flag_name: pf.name().to_string(), flag_macro: pf.name().to_uppercase(), device_config_namespace: pf.namespace().to_string(), device_config_flag: codegen::create_device_config_ident(package, pf.name()) .expect("values checked at flag parse time"), Loading @@ -118,6 +128,14 @@ mod tests { const EXPORTED_PROD_HEADER_EXPECTED: &str = r#" #pragma once #ifndef COM_ANDROID_ACONFIG_TEST #define COM_ANDROID_ACONFIG_TEST(FLAG) COM_ANDROID_ACONFIG_TEST_##FLAG #endif #ifndef COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO #define COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO true #endif #ifdef __cplusplus #include <memory> Loading Loading @@ -149,7 +167,7 @@ inline bool disabled_rw() { } inline bool enabled_fixed_ro() { return true; return COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO; } inline bool enabled_ro() { Loading Loading @@ -319,7 +337,7 @@ namespace com::android::aconfig::test { } virtual bool enabled_fixed_ro() override { return true; return COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO; } virtual bool enabled_ro() override { Loading Loading @@ -348,7 +366,7 @@ bool com_android_aconfig_test_disabled_rw() { } bool com_android_aconfig_test_enabled_fixed_ro() { return true; return COM_ANDROID_ACONFIG_TEST_ENABLED_FIXED_RO; } bool com_android_aconfig_test_enabled_ro() { Loading
tools/aconfig/templates/cpp_exported_header.template +26 −6 Original line number Diff line number Diff line #pragma once {{ if not for_test- }} {{ if has_fixed_read_only- }} #ifndef {package_macro} #define {package_macro}(FLAG) {package_macro}_##FLAG #endif {{ for item in class_elements- }} {{ if item.is_fixed_read_only- }} #ifndef {package_macro}_{item.flag_macro} #define {package_macro}_{item.flag_macro} {item.default_value} #endif {{ endif }} {{ -endfor }} {{ -endif }} {{ -endif }} #ifdef __cplusplus #include <memory> namespace {cpp_namespace} \{ class flag_provider_interface \{ Loading @@ -15,7 +31,7 @@ public: {{ if for_test }} virtual void {item.flag_name}(bool val) = 0; {{ -endif }} {{ endfor }} {{ -endfor }} {{ if for_test }} virtual void reset_flags() \{} Loading @@ -29,10 +45,14 @@ inline bool {item.flag_name}() \{ {{ if for_test }} return provider_->{item.flag_name}(); {{ -else- }} {{ if not item.readwrite- }} return {item.default_value}; {{ -else- }} {{ if item.readwrite- }} return provider_->{item.flag_name}(); {{ -else- }} {{ if item.is_fixed_read_only }} return {package_macro}_{item.flag_macro}; {{ -else- }} return {item.default_value}; {{ -endif }} {{ -endif }} {{ -endif }} } Loading @@ -42,7 +62,7 @@ inline void {item.flag_name}(bool val) \{ provider_->{item.flag_name}(val); } {{ -endif }} {{ endfor }} {{ -endfor }} {{ if for_test }} inline void reset_flags() \{ Loading @@ -61,7 +81,7 @@ bool {header}_{item.flag_name}(); {{ if for_test }} void set_{header}_{item.flag_name}(bool val); {{ -endif }} {{ endfor - }} {{ -endfor }} {{ if for_test }} void {header}_reset_flags(); Loading
tools/aconfig/templates/cpp_source_file.template +12 −4 Original line number Diff line number Diff line Loading @@ -58,8 +58,12 @@ namespace {cpp_namespace} \{ "{item.device_config_flag}", "{item.default_value}") == "true"; {{ -else- }} {{ if item.is_fixed_read_only }} return {package_macro}_{item.flag_macro}; {{ -else- }} return {item.default_value}; {{ -endif }} {{ -endif }} } {{ endfor }} }; Loading @@ -79,10 +83,14 @@ bool {header}_{item.flag_name}() \{ {{ if for_test }} return {cpp_namespace}::{item.flag_name}(); {{ -else- }} {{ if not item.readwrite- }} return {item.default_value}; {{ -else- }} {{ if item.readwrite- }} return {cpp_namespace}::{item.flag_name}(); {{ -else- }} {{ if item.is_fixed_read_only }} return {package_macro}_{item.flag_macro}; {{ -else- }} return {item.default_value}; {{ -endif }} {{ -endif }} {{ -endif }} } Loading