aconfig: follow Java conventions for Java file paths
Update codegen_java to write the generated Java file(s) to
"java/package/File.java" instead of just "File.java".
Also generalize codegen_java::GeneratedFile to commands::OutputFile in
preparation for the upcoming C++ and Rust codegen.
Also change Java package name to 'com.android.internal.aconfig'.
Bug: 279485059
Test: atest aconfig.test
Change-Id: I13978697e35010fe6be8637aa495d4b852dbed7e
diff --git a/tools/aconfig/src/codegen_java.rs b/tools/aconfig/src/codegen_java.rs
index 08b762a..bbf1272 100644
--- a/tools/aconfig/src/codegen_java.rs
+++ b/tools/aconfig/src/codegen_java.rs
@@ -20,13 +20,9 @@
use crate::aconfig::{FlagState, Permission};
use crate::cache::{Cache, Item};
+use crate::commands::OutputFile;
-pub struct GeneratedFile {
- pub file_content: String,
- pub file_name: String,
-}
-
-pub fn generate_java_code(cache: &Cache) -> Result<GeneratedFile> {
+pub fn generate_java_code(cache: &Cache) -> Result<OutputFile> {
let class_elements: Vec<ClassElement> = cache.iter().map(create_class_element).collect();
let readwrite = class_elements.iter().any(|item| item.readwrite);
let namespace = uppercase_first_letter(
@@ -35,8 +31,9 @@
let context = Context { namespace: namespace.clone(), readwrite, class_elements };
let mut template = TinyTemplate::new();
template.add_template("java_code_gen", include_str!("../templates/java.template"))?;
- let file_content = template.render("java_code_gen", &context)?;
- Ok(GeneratedFile { file_content, file_name: format!("{}.java", namespace) })
+ let contents = template.render("java_code_gen", &context)?;
+ let path = ["com", "android", "internal", "aconfig", &(namespace + ".java")].iter().collect();
+ Ok(OutputFile { contents: contents.into(), path })
}
#[derive(Serialize)]
@@ -123,7 +120,7 @@
},
)
.unwrap();
- let expect_content = "package com.android.aconfig;
+ let expect_content = r#"package com.android.internal.aconfig;
import android.provider.DeviceConfig;
@@ -135,17 +132,19 @@
public static boolean test2() {
return DeviceConfig.getBoolean(
- \"Testflag\",
- \"test2__test2\",
+ "Testflag",
+ "test2__test2",
false
);
}
}
- ";
- let expected_file_name = format!("{}.java", uppercase_first_letter(namespace));
- let generated_file = generate_java_code(&cache).unwrap();
- assert_eq!(expected_file_name, generated_file.file_name);
- assert_eq!(expect_content.replace(' ', ""), generated_file.file_content.replace(' ', ""));
+ "#;
+ let file = generate_java_code(&cache).unwrap();
+ assert_eq!("com/android/internal/aconfig/Testflag.java", file.path.to_str().unwrap());
+ assert_eq!(
+ expect_content.replace(' ', ""),
+ String::from_utf8(file.contents).unwrap().replace(' ', "")
+ );
}
}