summaryrefslogtreecommitdiff
path: root/tools/aconfig/src/codegen/java.rs
diff options
context:
space:
mode:
author Zhi Dou <zhidou@google.com> 2023-12-19 20:20:22 +0000
committer Zhi Dou <zhidou@google.com> 2023-12-19 20:32:59 +0000
commiteeed7990de66ad36950ea2682b9b60415cdd2f08 (patch)
tree0de1d1d3b01f0d3735a8a152fe147dcfe2523a0c /tools/aconfig/src/codegen/java.rs
parent80040d2d2c540b975a024fb484239d0ea8818340 (diff)
aconfig: modify and filter flags before passing into java codegen
Before this change java codegen filter flags for exported mode in the template. This change move the filter process to commands as other codegen. Thus the codegen code will only generate code based on the passed in flags. Bug: 311152507 Test: atest aconfig.test aconfig.test.java AconfigJavaHostTest Change-Id: I74045709cde19e6c687c3eb0d94050ea40cf5042
Diffstat (limited to 'tools/aconfig/src/codegen/java.rs')
-rw-r--r--tools/aconfig/src/codegen/java.rs65
1 files changed, 19 insertions, 46 deletions
diff --git a/tools/aconfig/src/codegen/java.rs b/tools/aconfig/src/codegen/java.rs
index 6a7d7c1e27..a02a7e2d90 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::{anyhow, Result};
+use anyhow::Result;
use serde::Serialize;
use std::collections::{BTreeMap, BTreeSet};
use std::path::PathBuf;
@@ -35,8 +35,6 @@ where
{
let flag_elements: Vec<FlagElement> =
parsed_flags_iter.map(|pf| create_flag_element(package, &pf)).collect();
- let exported_flag_elements: Vec<FlagElement> =
- flag_elements.iter().filter(|elem| elem.exported).cloned().collect();
let namespace_flags = gen_flags_by_namespace(&flag_elements);
let properties_set: BTreeSet<String> =
flag_elements.iter().map(|fe| format_property_name(&fe.device_config_namespace)).collect();
@@ -45,13 +43,8 @@ where
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,
runtime_lookup_required,
@@ -110,7 +103,6 @@ fn gen_flags_by_namespace(flags: &[FlagElement]) -> Vec<NamespaceFlags> {
#[derive(Serialize)]
struct Context {
pub flag_elements: Vec<FlagElement>,
- pub exported_flag_elements: Vec<FlagElement>,
pub namespace_flags: Vec<NamespaceFlags>,
pub is_test_mode: bool,
pub runtime_lookup_required: bool,
@@ -134,7 +126,6 @@ struct FlagElement {
pub is_read_write: bool,
pub method_name: String,
pub properties: String,
- pub exported: bool,
}
fn create_flag_element(package: &str, pf: &ProtoParsedFlag) -> FlagElement {
@@ -148,7 +139,6 @@ fn create_flag_element(package: &str, pf: &ProtoParsedFlag) -> FlagElement {
is_read_write: pf.permission() == ProtoFlagPermission::READ_WRITE,
method_name: format_java_method_name(pf.name()),
properties: format_property_name(pf.namespace()),
- exported: pf.is_exported.unwrap_or(false),
}
}
@@ -376,12 +366,12 @@ mod tests {
#[test]
fn test_generate_java_code_production() {
let parsed_flags = crate::test::parse_test_flags();
- let generated_files = generate_java_code(
- crate::test::TEST_PACKAGE,
- parsed_flags.parsed_flag.into_iter(),
- CodegenMode::Production,
- )
- .unwrap();
+ let mode = CodegenMode::Production;
+ let modified_parsed_flags =
+ crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap();
+ let generated_files =
+ generate_java_code(crate::test::TEST_PACKAGE, modified_parsed_flags.into_iter(), mode)
+ .unwrap();
let expect_flags_content = EXPECTED_FLAG_COMMON_CONTENT.to_string()
+ r#"
private static FeatureFlags FEATURE_FLAGS = new FeatureFlagsImpl();
@@ -534,12 +524,12 @@ mod tests {
#[test]
fn test_generate_java_code_exported() {
let parsed_flags = crate::test::parse_test_flags();
- let generated_files = generate_java_code(
- crate::test::TEST_PACKAGE,
- parsed_flags.parsed_flag.into_iter(),
- CodegenMode::Exported,
- )
- .unwrap();
+ let mode = CodegenMode::Exported;
+ let modified_parsed_flags =
+ crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap();
+ let generated_files =
+ generate_java_code(crate::test::TEST_PACKAGE, modified_parsed_flags.into_iter(), mode)
+ .unwrap();
let expect_flags_content = r#"
package com.android.aconfig.test;
@@ -594,7 +584,6 @@ mod tests {
/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags {
private static boolean aconfig_test_is_cached = false;
- private static boolean other_namespace_is_cached = false;
private static boolean disabledRwExported = false;
private static boolean enabledFixedRoExported = false;
private static boolean enabledRoExported = false;
@@ -622,22 +611,6 @@ mod tests {
aconfig_test_is_cached = true;
}
- private void load_overrides_other_namespace() {
- try {
- Properties properties = DeviceConfig.getProperties("other_namespace");
- } catch (NullPointerException e) {
- throw new RuntimeException(
- "Cannot read value from namespace other_namespace "
- + "from DeviceConfig. It could be that the code using flag "
- + "executed before SettingsProvider initialization. Please use "
- + "fixed read-only flag by adding is_fixed_read_only: true in "
- + "flag declaration.",
- e
- );
- }
- other_namespace_is_cached = true;
- }
-
@Override
@UnsupportedAppUsage
public boolean disabledRwExported() {
@@ -751,12 +724,12 @@ mod tests {
#[test]
fn test_generate_java_code_test() {
let parsed_flags = crate::test::parse_test_flags();
- let generated_files = generate_java_code(
- crate::test::TEST_PACKAGE,
- parsed_flags.parsed_flag.into_iter(),
- CodegenMode::Test,
- )
- .unwrap();
+ let mode = CodegenMode::Test;
+ let modified_parsed_flags =
+ crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap();
+ let generated_files =
+ generate_java_code(crate::test::TEST_PACKAGE, modified_parsed_flags.into_iter(), mode)
+ .unwrap();
let expect_flags_content = EXPECTED_FLAG_COMMON_CONTENT.to_string()
+ r#"