aconfig: consolidate how fully qualified flag name is calculated

Add an extension trait to consolidate how the fully qualified package
name (<package>.<name>) is calculated and use this where possible.

This CL is a semantic change only. The intention of this CL is to reduce
the risk of future bugs.

Bug: N/A
Test: atest aconfig.test
Change-Id: Ibab6641dda3843337fbea02631c31a1fdd8fb4ab
diff --git a/tools/aconfig/src/commands.rs b/tools/aconfig/src/commands.rs
index 39e0154..54bc622 100644
--- a/tools/aconfig/src/commands.rs
+++ b/tools/aconfig/src/commands.rs
@@ -24,8 +24,8 @@
 use crate::codegen_java::generate_java_code;
 use crate::codegen_rust::generate_rust_code;
 use crate::protos::{
-    ProtoFlagMetadata, ProtoFlagPermission, ProtoFlagState, ProtoParsedFlag, ProtoParsedFlags,
-    ProtoTracepoint,
+    ParsedFlagExt, ProtoFlagMetadata, ProtoFlagPermission, ProtoFlagState, ProtoParsedFlag,
+    ProtoParsedFlags, ProtoTracepoint,
 };
 
 pub struct Input {
@@ -226,10 +226,9 @@
         .filter(|pf| pf.permission() == ProtoFlagPermission::READ_WRITE)
     {
         let line = format!(
-            "{}:{}.{}={}\n",
+            "{}:{}={}\n",
             parsed_flag.namespace(),
-            parsed_flag.package(),
-            parsed_flag.name(),
+            parsed_flag.fully_qualified_name(),
             match parsed_flag.state() {
                 ProtoFlagState::ENABLED => "enabled",
                 ProtoFlagState::DISABLED => "disabled",
@@ -249,9 +248,8 @@
         .filter(|pf| pf.permission() == ProtoFlagPermission::READ_WRITE)
     {
         let line = format!(
-            "persist.device_config.{}.{}={}\n",
-            parsed_flag.package(),
-            parsed_flag.name(),
+            "persist.device_config.{}={}\n",
+            parsed_flag.fully_qualified_name(),
             match parsed_flag.state() {
                 ProtoFlagState::ENABLED => "true",
                 ProtoFlagState::DISABLED => "false",
@@ -286,9 +284,8 @@
         DumpFormat::Text => {
             for parsed_flag in parsed_flags.parsed_flag.into_iter() {
                 let line = format!(
-                    "{}.{} [{}]: {:?} + {:?}\n",
-                    parsed_flag.package(),
-                    parsed_flag.name(),
+                    "{} [{}]: {:?} + {:?}\n",
+                    parsed_flag.fully_qualified_name(),
                     parsed_flag.container(),
                     parsed_flag.permission(),
                     parsed_flag.state()
@@ -301,9 +298,8 @@
                 let sources: Vec<_> =
                     parsed_flag.trace.iter().map(|tracepoint| tracepoint.source()).collect();
                 let line = format!(
-                    "{}.{} [{}]: {:?} + {:?} ({})\n",
-                    parsed_flag.package(),
-                    parsed_flag.name(),
+                    "{} [{}]: {:?} + {:?} ({})\n",
+                    parsed_flag.fully_qualified_name(),
                     parsed_flag.container(),
                     parsed_flag.permission(),
                     parsed_flag.state(),
@@ -322,9 +318,8 @@
         DumpFormat::Bool => {
             for parsed_flag in parsed_flags.parsed_flag.into_iter() {
                 let line = format!(
-                    "{}.{}={:?}\n",
-                    parsed_flag.package(),
-                    parsed_flag.name(),
+                    "{}={:?}\n",
+                    parsed_flag.fully_qualified_name(),
                     parsed_flag.state() == ProtoFlagState::ENABLED
                 );
                 output.extend_from_slice(line.as_bytes());
diff --git a/tools/aconfig/src/protos.rs b/tools/aconfig/src/protos.rs
index 37eb67d..2684d20 100644
--- a/tools/aconfig/src/protos.rs
+++ b/tools/aconfig/src/protos.rs
@@ -308,7 +308,17 @@
     }
 
     fn create_sorting_key(pf: &ProtoParsedFlag) -> String {
-        format!("{}.{}", pf.package(), pf.name())
+        pf.fully_qualified_name()
+    }
+}
+
+pub trait ParsedFlagExt {
+    fn fully_qualified_name(&self) -> String;
+}
+
+impl ParsedFlagExt for ProtoParsedFlag {
+    fn fully_qualified_name(&self) -> String {
+        format!("{}.{}", self.package(), self.name())
     }
 }