aconfig: allow dots in package fields
Allow package fields to include dots.
Update the generated code based on the package name: if the package name
is com.android.example:
- java: package com.android.example; ...
- C++: namespace com::android::example { ... }
- Rust: mod com { mod android { mod example { ... } } }
Also, update examples to use dots in the package fields.
Also, remove unnecessary #include from the auto-generated C++ code: the
header should not include itself.
Bug: 285000854
Test: atest aconfig.test
Change-Id: I8a5352e25c64c34dee0725202a1b7c9957819de8
diff --git a/tools/aconfig/templates/cpp.template b/tools/aconfig/templates/cpp.template
index deb5012..331baaf 100644
--- a/tools/aconfig/templates/cpp.template
+++ b/tools/aconfig/templates/cpp.template
@@ -1,11 +1,10 @@
-#ifndef {package}_HEADER_H
-#define {package}_HEADER_H
-#include "{package}.h"
+#ifndef {header}_HEADER_H
+#define {header}_HEADER_H
{{ if readwrite }}
#include <server_configurable_flags/get_flags.h>
using namespace server_configurable_flags;
{{ endif }}
-namespace {package} \{
+namespace {cpp_namespace} \{
{{ for item in class_elements}}
class {item.flag_name} \{
public:
diff --git a/tools/aconfig/templates/java.template b/tools/aconfig/templates/java.template
index 44c470c..709af44 100644
--- a/tools/aconfig/templates/java.template
+++ b/tools/aconfig/templates/java.template
@@ -1,4 +1,4 @@
-package aconfig.{package};
+package {package};
{{ if readwrite }}
import android.provider.DeviceConfig;
{{ endif }}
diff --git a/tools/aconfig/templates/rust.template b/tools/aconfig/templates/rust.template
index a3c58c0..81b407c 100644
--- a/tools/aconfig/templates/rust.template
+++ b/tools/aconfig/templates/rust.template
@@ -1,23 +1,29 @@
+{{- for mod in modules -}}
+pub mod {mod} \{
+{{ endfor -}}
{{- for parsed_flag in parsed_flags -}}
{{- if parsed_flag.is_read_only_disabled -}}
#[inline(always)]
-pub const fn r#{parsed_flag.fn_name}() -> bool \{
+pub const fn r#{parsed_flag.name}() -> bool \{
false
}
{{ endif -}}
{{- if parsed_flag.is_read_only_enabled -}}
#[inline(always)]
-pub const fn r#{parsed_flag.fn_name}() -> bool \{
+pub const fn r#{parsed_flag.name}() -> bool \{
true
}
{{ endif -}}
{{- if parsed_flag.is_read_write -}}
#[inline(always)]
-pub fn r#{parsed_flag.fn_name}() -> bool \{
+pub fn r#{parsed_flag.name}() -> bool \{
flags_rust::GetServerConfigurableFlag("{package}", "{parsed_flag.name}", "false") == "true"
}
{{ endif -}}
{{- endfor -}}
+{{- for mod in modules -}}
+}
+{{ endfor -}}