Revert "aconfig: cache flag value in generated java code"
This reverts commit 3dea629a9e950b48474f2ba81edc54dfa7259ef0.
Reason for revert: b/308228560
Change-Id: I6511def2e53ab793c5fd78f65bea14eeebc5cdb2
diff --git a/tools/aconfig/fake_device_config/src/android/provider/DeviceConfig.java b/tools/aconfig/fake_device_config/src/android/provider/DeviceConfig.java
index dbb07ac..50b6289 100644
--- a/tools/aconfig/fake_device_config/src/android/provider/DeviceConfig.java
+++ b/tools/aconfig/fake_device_config/src/android/provider/DeviceConfig.java
@@ -26,14 +26,4 @@
public static boolean getBoolean(String ns, String name, boolean def) {
return false;
}
-
- public static Properties getProperties(String namespace, String... names) {
- return new Properties();
- }
-
- public static class Properties {
- public boolean getBoolean(String name, boolean def) {
- return false;
- }
- }
}
diff --git a/tools/aconfig/src/codegen_java.rs b/tools/aconfig/src/codegen_java.rs
index 05ee0d7..43c2ecf 100644
--- a/tools/aconfig/src/codegen_java.rs
+++ b/tools/aconfig/src/codegen_java.rs
@@ -16,7 +16,6 @@
use anyhow::Result;
use serde::Serialize;
-use std::collections::BTreeSet;
use std::path::PathBuf;
use tinytemplate::TinyTemplate;
@@ -32,19 +31,12 @@
where
I: Iterator<Item = &'a ProtoParsedFlag>,
{
- let flag_elements: Vec<FlagElement> =
- parsed_flags_iter.map(|pf| create_flag_element(package, pf)).collect();
- let properties_set: BTreeSet<String> =
- 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 class_elements: Vec<ClassElement> =
+ parsed_flags_iter.map(|pf| create_class_element(package, pf)).collect();
+ let is_read_write = class_elements.iter().any(|elem| elem.is_read_write);
let is_test_mode = codegen_mode == CodegenMode::Test;
- let context = Context {
- flag_elements,
- is_test_mode,
- is_read_write,
- properties_set,
- package_name: package.to_string(),
- };
+ let context =
+ Context { class_elements, is_test_mode, is_read_write, package_name: package.to_string() };
let mut template = TinyTemplate::new();
template.add_template("Flags.java", include_str!("../templates/Flags.java.template"))?;
template.add_template(
@@ -74,62 +66,49 @@
#[derive(Serialize)]
struct Context {
- pub flag_elements: Vec<FlagElement>,
+ pub class_elements: Vec<ClassElement>,
pub is_test_mode: bool,
pub is_read_write: bool,
- pub properties_set: BTreeSet<String>,
pub package_name: String,
}
#[derive(Serialize)]
-struct FlagElement {
+struct ClassElement {
pub default_value: bool,
pub device_config_namespace: String,
pub device_config_flag: String,
pub flag_name_constant_suffix: String,
pub is_read_write: bool,
pub method_name: String,
- pub properties: String,
}
-fn create_flag_element(package: &str, pf: &ProtoParsedFlag) -> FlagElement {
+fn create_class_element(package: &str, pf: &ProtoParsedFlag) -> ClassElement {
let device_config_flag = codegen::create_device_config_ident(package, pf.name())
.expect("values checked at flag parse time");
- FlagElement {
+ ClassElement {
default_value: pf.state() == ProtoFlagState::ENABLED,
device_config_namespace: pf.namespace().to_string(),
device_config_flag,
flag_name_constant_suffix: pf.name().to_ascii_uppercase(),
is_read_write: pf.permission() == ProtoFlagPermission::READ_WRITE,
method_name: format_java_method_name(pf.name()),
- properties: format_property_name(pf.namespace()),
}
}
fn format_java_method_name(flag_name: &str) -> String {
- let splits: Vec<&str> = flag_name.split('_').filter(|&word| !word.is_empty()).collect();
- if splits.len() == 1 {
- let name = splits[0];
- name[0..1].to_ascii_lowercase() + &name[1..]
- } else {
- splits
- .iter()
- .enumerate()
- .map(|(index, word)| {
- if index == 0 {
- word.to_ascii_lowercase()
- } else {
- word[0..1].to_ascii_uppercase() + &word[1..].to_ascii_lowercase()
- }
- })
- .collect::<Vec<String>>()
- .join("")
- }
-}
-
-fn format_property_name(property_name: &str) -> String {
- let name = format_java_method_name(property_name);
- format!("mProperties{}{}", &name[0..1].to_ascii_uppercase(), &name[1..])
+ flag_name
+ .split('_')
+ .filter(|&word| !word.is_empty())
+ .enumerate()
+ .map(|(index, word)| {
+ if index == 0 {
+ word.to_ascii_lowercase()
+ } else {
+ word[0..1].to_ascii_uppercase() + &word[1..].to_ascii_lowercase()
+ }
+ })
+ .collect::<Vec<String>>()
+ .join("")
}
#[cfg(test)]
@@ -286,10 +265,8 @@
// TODO(b/303773055): Remove the annotation after access issue is resolved.
import android.compat.annotation.UnsupportedAppUsage;
import android.provider.DeviceConfig;
- import android.provider.DeviceConfig.Properties;
/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags {
- private Properties mPropertiesAconfigTest;
@Override
@UnsupportedAppUsage
public boolean disabledRo() {
@@ -298,18 +275,11 @@
@Override
@UnsupportedAppUsage
public boolean disabledRw() {
- if (mPropertiesAconfigTest == null) {
- mPropertiesAconfigTest =
- getProperties(
- "aconfig_test",
- "com.android.aconfig.test.disabled_rw"
- );
- }
- return mPropertiesAconfigTest
- .getBoolean(
- "com.android.aconfig.test.disabled_rw",
- false
- );
+ return getValue(
+ "aconfig_test",
+ "com.android.aconfig.test.disabled_rw",
+ false
+ );
}
@Override
@UnsupportedAppUsage
@@ -324,36 +294,32 @@
@Override
@UnsupportedAppUsage
public boolean enabledRw() {
- if (mPropertiesAconfigTest == null) {
- mPropertiesAconfigTest =
- getProperties(
- "aconfig_test",
- "com.android.aconfig.test.enabled_rw"
- );
- }
- return mPropertiesAconfigTest
- .getBoolean(
- "com.android.aconfig.test.enabled_rw",
- true
- );
+ return getValue(
+ "aconfig_test",
+ "com.android.aconfig.test.enabled_rw",
+ true
+ );
}
- private Properties getProperties(
- String namespace,
- String flagName) {
- Properties properties = null;
+ private boolean getValue(String nameSpace,
+ String flagName, boolean defaultValue) {
+ boolean value = defaultValue;
try {
- properties = DeviceConfig.getProperties(namespace);
+ value = DeviceConfig.getBoolean(
+ nameSpace,
+ flagName,
+ defaultValue
+ );
} catch (NullPointerException e) {
throw new RuntimeException(
- "Cannot read value of flag " + flagName + " 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.",
+ "Cannot read value of flag " + flagName + " 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
);
}
- return properties;
+ return value;
}
}
"#;
@@ -475,45 +441,9 @@
#[test]
fn test_format_java_method_name() {
+ let input = "____some_snake___name____";
let expected = "someSnakeName";
- let input = "____some_snake___name____";
let formatted_name = format_java_method_name(input);
assert_eq!(expected, formatted_name);
-
- let input = "someSnakeName";
- let formatted_name = format_java_method_name(input);
- assert_eq!(expected, formatted_name);
-
- let input = "SomeSnakeName";
- let formatted_name = format_java_method_name(input);
- assert_eq!(expected, formatted_name);
-
- let input = "SomeSnakeName_";
- let formatted_name = format_java_method_name(input);
- assert_eq!(expected, formatted_name);
-
- let input = "_SomeSnakeName";
- let formatted_name = format_java_method_name(input);
- assert_eq!(expected, formatted_name);
- }
-
- #[test]
- fn test_format_property_name() {
- let expected = "mPropertiesSomeSnakeName";
- let input = "____some_snake___name____";
- let formatted_name = format_property_name(input);
- assert_eq!(expected, formatted_name);
-
- let input = "someSnakeName";
- let formatted_name = format_property_name(input);
- assert_eq!(expected, formatted_name);
-
- let input = "SomeSnakeName";
- let formatted_name = format_property_name(input);
- assert_eq!(expected, formatted_name);
-
- let input = "SomeSnakeName_";
- let formatted_name = format_property_name(input);
- assert_eq!(expected, formatted_name);
}
}
diff --git a/tools/aconfig/templates/FakeFeatureFlagsImpl.java.template b/tools/aconfig/templates/FakeFeatureFlagsImpl.java.template
index 933d6a7..72a896f 100644
--- a/tools/aconfig/templates/FakeFeatureFlagsImpl.java.template
+++ b/tools/aconfig/templates/FakeFeatureFlagsImpl.java.template
@@ -11,7 +11,7 @@
resetAll();
}
-{{ for item in flag_elements}}
+{{ for item in class_elements}}
@Override
@UnsupportedAppUsage
public boolean {item.method_name}() \{
@@ -41,7 +41,7 @@
private Map<String, Boolean> mFlagMap = new HashMap<>(
Map.ofEntries(
- {{-for item in flag_elements}}
+ {{-for item in class_elements}}
Map.entry(Flags.FLAG_{item.flag_name_constant_suffix}, false)
{{ -if not @last }},{{ endif }}
{{ -endfor }}
diff --git a/tools/aconfig/templates/FeatureFlags.java.template b/tools/aconfig/templates/FeatureFlags.java.template
index da850ae..02305e6 100644
--- a/tools/aconfig/templates/FeatureFlags.java.template
+++ b/tools/aconfig/templates/FeatureFlags.java.template
@@ -4,7 +4,7 @@
/** @hide */
public interface FeatureFlags \{
-{{ for item in flag_elements }}
+{{ for item in class_elements}}
{{ -if not item.is_read_write }}
{{ -if item.default_value }}
@com.android.aconfig.annotations.AssumeTrueForR8
diff --git a/tools/aconfig/templates/FeatureFlagsImpl.java.template b/tools/aconfig/templates/FeatureFlagsImpl.java.template
index ff089df..1620dfe 100644
--- a/tools/aconfig/templates/FeatureFlagsImpl.java.template
+++ b/tools/aconfig/templates/FeatureFlagsImpl.java.template
@@ -4,58 +4,45 @@
{{ if not is_test_mode }}
{{ if is_read_write- }}
import android.provider.DeviceConfig;
-import android.provider.DeviceConfig.Properties;
{{ endif }}
/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags \{
-{{ if is_read_write- }}
-{{ for properties in properties_set }}
- private Properties {properties};
-{{ endfor }}
-{{ endif- }}
-
-{{ for flag in flag_elements }}
+{{ for item in class_elements}}
@Override
@UnsupportedAppUsage
- public boolean {flag.method_name}() \{
- {{ -if flag.is_read_write }}
- if ({flag.properties} == null) \{
- {flag.properties} =
- getProperties(
- "{flag.device_config_namespace}",
- "{flag.device_config_flag}"
- );
- }
- return {flag.properties}
- .getBoolean(
- "{flag.device_config_flag}",
- {flag.default_value}
- );
+ public boolean {item.method_name}() \{
+ {{ -if item.is_read_write }}
+ return getValue(
+ "{item.device_config_namespace}",
+ "{item.device_config_flag}",
+ {item.default_value}
+ );
{{ else }}
- return {flag.default_value};
+ return {item.default_value};
{{ endif- }}
}
{{ endfor }}
-
-{{ -if is_read_write }}
- private Properties getProperties(
- String namespace,
- String flagName) \{
- Properties properties = null;
+{{ if is_read_write- }}
+ private boolean getValue(String nameSpace,
+ String flagName, boolean defaultValue) \{
+ boolean value = defaultValue;
try \{
- properties = DeviceConfig.getProperties(namespace);
+ value = DeviceConfig.getBoolean(
+ nameSpace,
+ flagName,
+ defaultValue
+ );
} catch (NullPointerException e) \{
throw new RuntimeException(
- "Cannot read value of flag " + flagName + " 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.",
+ "Cannot read value of flag " + flagName + " 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
);
}
-
- return properties;
+ return value;
}
{{ endif- }}
}
@@ -63,10 +50,10 @@
{#- Generate only stub if in test mode #}
/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags \{
-{{ for flag in flag_elements }}
+{{ for item in class_elements}}
@Override
@UnsupportedAppUsage
- public boolean {flag.method_name}() \{
+ public boolean {item.method_name}() \{
throw new UnsupportedOperationException(
"Method is not implemented.");
}
diff --git a/tools/aconfig/templates/Flags.java.template b/tools/aconfig/templates/Flags.java.template
index cf6604c..66c4c5a 100644
--- a/tools/aconfig/templates/Flags.java.template
+++ b/tools/aconfig/templates/Flags.java.template
@@ -5,11 +5,11 @@
/** @hide */
public final class Flags \{
-{{- for item in flag_elements}}
+{{- for item in class_elements}}
/** @hide */
public static final String FLAG_{item.flag_name_constant_suffix} = "{item.device_config_flag}";
{{- endfor }}
-{{ for item in flag_elements}}
+{{ for item in class_elements}}
{{ -if not item.is_read_write }}
{{ -if item.default_value }}
@com.android.aconfig.annotations.AssumeTrueForR8