diff options
3 files changed, 53 insertions, 3 deletions
diff --git a/tools/aconfig/aconfig/src/codegen/java.rs b/tools/aconfig/aconfig/src/codegen/java.rs index 550ab5f917..61802f2f30 100644 --- a/tools/aconfig/aconfig/src/codegen/java.rs +++ b/tools/aconfig/aconfig/src/codegen/java.rs @@ -641,7 +641,6 @@ mod tests { package com.android.aconfig.test; // TODO(b/303773055): Remove the annotation after access issue is resolved. import android.compat.annotation.UnsupportedAppUsage; - import android.os.Build; import android.os.flagging.PlatformAconfigPackageInternal; import android.util.Log; /** @hide */ @@ -1379,6 +1378,56 @@ mod tests { assert!(file_set.is_empty()); } + // Test that the SDK check isn't added unless the library is exported (even + // if the flag is present in finalized_flags). + #[test] + fn test_generate_java_code_flags_with_sdk_check() { + let parsed_flags = crate::test::parse_test_flags(); + let mode = CodegenMode::Production; + let modified_parsed_flags = + crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap(); + let flag_ids = + assign_flag_ids(crate::test::TEST_PACKAGE, modified_parsed_flags.iter()).unwrap(); + let mut finalized_flags = FinalizedFlagMap::new(); + finalized_flags.insert_if_new( + ApiLevel(36), + FinalizedFlag { + flag_name: "disabled_rw".to_string(), + package_name: "com.android.aconfig.test".to_string(), + }, + ); + let config = JavaCodegenConfig { + codegen_mode: mode, + flag_ids, + allow_instrumentation: true, + package_fingerprint: 5801144784618221668, + new_exported: true, + single_exported_file: false, + finalized_flags, + }; + let generated_files = generate_java_code( + crate::test::TEST_PACKAGE, + modified_parsed_flags.into_iter(), + config, + ) + .unwrap(); + + let expect_flags_content = EXPECTED_FLAG_COMMON_CONTENT.to_string() + + r#" + private static FeatureFlags FEATURE_FLAGS = new FeatureFlagsImpl(); + }"#; + + let file = generated_files.iter().find(|f| f.path.ends_with("Flags.java")).unwrap(); + assert_eq!( + None, + crate::test::first_significant_code_diff( + &expect_flags_content, + &String::from_utf8(file.contents.clone()).unwrap() + ), + "Flags content is not correct" + ); + } + #[test] fn test_generate_java_code_test() { let parsed_flags = crate::test::parse_test_flags(); diff --git a/tools/aconfig/aconfig/templates/FeatureFlagsImpl.new_storage.java.template b/tools/aconfig/aconfig/templates/FeatureFlagsImpl.new_storage.java.template index 9492a8335a..8dc7581193 100644 --- a/tools/aconfig/aconfig/templates/FeatureFlagsImpl.new_storage.java.template +++ b/tools/aconfig/aconfig/templates/FeatureFlagsImpl.new_storage.java.template @@ -2,7 +2,6 @@ package {package_name}; {#- CODEGEN FOR INTERNAL MODE FOR NEW STORAGE #} // TODO(b/303773055): Remove the annotation after access issue is resolved. import android.compat.annotation.UnsupportedAppUsage; {{ -if runtime_lookup_required }} -import android.os.Build; {{ if is_platform_container }} import android.os.flagging.PlatformAconfigPackageInternal; {{ -else }} {#- else is_platform_container #} diff --git a/tools/aconfig/aconfig/templates/Flags.java.template b/tools/aconfig/aconfig/templates/Flags.java.template index 6fa270147c..0cdc2692ca 100644 --- a/tools/aconfig/aconfig/templates/Flags.java.template +++ b/tools/aconfig/aconfig/templates/Flags.java.template @@ -4,7 +4,7 @@ package {package_name}; import android.compat.annotation.UnsupportedAppUsage; {{ else }} import android.os.Build; -{{ -endif }} +{{ -endif }} {#- end not library_exported#} {{ -if single_exported_file }} {{ -if library_exported }} /** @@ -33,11 +33,13 @@ public final class Flags \{ @UnsupportedAppUsage {{ -endif }} public static boolean {item.method_name}() \{ + {{ if library_exported- }} {{ -if item.finalized_sdk_present }} if (Build.VERSION.SDK_INT >= {item.finalized_sdk_value}) \{ return true; } {{ -endif}} {#- end finalized_sdk_present#} + {{ -endif}} {#- end library_exported#} return FEATURE_FLAGS.{item.method_name}(); } {{ -endfor }} |