Snap for 9550355 from 0f4bc2fde7cb4b50ebcb6f768e1f99c9cd8f5b43 to sdk-release

Change-Id: Idab1669cb14fed92a8de2f51a95da22599997f10
diff --git a/Android.bp b/Android.bp
index 08df261..232ed5d 100644
--- a/Android.bp
+++ b/Android.bp
@@ -94,6 +94,7 @@
         "diagnostics.cpp",
         "generate_aidl_mappings.cpp",
         "generate_cpp.cpp",
+        "generate_cpp_analyzer.cpp",
         "generate_java_binder.cpp",
         "generate_java.cpp",
         "generate_ndk.cpp",
@@ -241,6 +242,8 @@
         "aidl_test_java_service_sdk1",
         "aidl_test_java_client_sdk29",
         "aidl_test_java_service_sdk29",
+        "aidl_test_java_client_permission",
+        "aidl_test_java_service_permission",
     ],
     test_suites: ["general-tests"],
     test_options: {
@@ -291,11 +294,13 @@
         "tests/android/aidl/tests/ArrayOfInterfaces.aidl",
         "tests/android/aidl/tests/BackendType.aidl",
         "tests/android/aidl/tests/ByteEnum.aidl",
+        "tests/android/aidl/tests/CircularParcelable.aidl",
         "tests/android/aidl/tests/ConstantExpressionEnum.aidl",
         "tests/android/aidl/tests/DeprecatedEnum.aidl",
         "tests/android/aidl/tests/DeprecatedParcelable.aidl",
         "tests/android/aidl/tests/GenericStructuredParcelable.aidl",
         "tests/android/aidl/tests/FixedSize.aidl",
+        "tests/android/aidl/tests/ICircular.aidl",
         "tests/android/aidl/tests/IDeprecated.aidl",
         "tests/android/aidl/tests/INamedCallback.aidl",
         "tests/android/aidl/tests/INewName.aidl",
@@ -471,11 +476,11 @@
         rust: {
             enabled: true,
         },
-    }
+    },
 }
 
 java_defaults {
-    name: "aidl_test_java_defaults",
+    name: "aidl_test_java_integration_defaults",
     platform_apis: true,
     // Turn off Java optimization tools to speed up our test iterations.
     optimize: {
@@ -487,6 +492,19 @@
     static_libs: [
         "androidx.test.core",
         "androidx.test.runner",
+    ],
+    aidl: {
+        include_dirs: [
+            "frameworks/native/aidl/binder",
+        ],
+    },
+    test_suites: ["general-tests"],
+}
+
+java_defaults {
+    name: "aidl_test_java_defaults",
+    defaults: ["aidl_test_java_integration_defaults"],
+    static_libs: [
         "aidl_test_nonvintf_parcelable-V1-java",
         "aidl_test_unstable_parcelable-java",
         "aidl_test_vintf_parcelable-V1-java",
@@ -510,11 +528,9 @@
     aidl: {
         include_dirs: [
             "system/tools/aidl/tests/",
-            "frameworks/native/aidl/binder",
         ],
         generate_traces: true,
     },
-    test_suites: ["general-tests"],
 }
 
 java_test {
@@ -564,27 +580,10 @@
 
 java_defaults {
     name: "aidl_test_java_sdkversion_defaults",
-    platform_apis: true,
-    // Turn off Java optimization tools to speed up our test iterations.
-    optimize: {
-        enabled: false,
-    },
-    dex_preopt: {
-        enabled: false,
-    },
-    static_libs: [
-        "androidx.test.core",
-        "androidx.test.runner",
-    ],
+    defaults: ["aidl_test_java_integration_defaults"],
     srcs: [
         ":aidl-for-sdkversion-tests",
     ],
-    aidl: {
-        include_dirs: [
-            "frameworks/native/aidl/binder",
-        ],
-    },
-    test_suites: ["general-tests"],
 }
 
 java_test {
@@ -623,6 +622,29 @@
     ],
 }
 
+java_test {
+    name: "aidl_test_java_client_permission",
+    defaults: ["aidl_test_java_integration_defaults"],
+    static_libs: [
+        "aidl-test-interface-permission-java",
+    ],
+    srcs: [
+        "tests/java/src/android/aidl/permission/tests/*.java",
+        "tests/java/src/android/aidl/permission/service/*.java",
+    ],
+}
+
+java_test {
+    name: "aidl_test_java_service_permission",
+    defaults: ["aidl_test_java_integration_defaults"],
+    static_libs: [
+        "aidl-test-interface-permission-java",
+    ],
+    srcs: [
+        "tests/java/src/android/aidl/permission/service/*.java",
+    ],
+}
+
 //
 // "Golden" test of compiler output
 //
@@ -655,6 +677,7 @@
         ":aidl-test-fixedsizearray-java-source",
         ":aidl-test-fixedsizearray-ndk-source",
         ":aidl-test-fixedsizearray-rust-source",
+        ":aidl-test-interface-cpp-analyzer-source",
         "tests/golden_output/**/*",
     ],
     out: ["TODO_b_37575883.cpp"],
@@ -706,7 +729,6 @@
         },
         java: {
             platform_apis: true,
-            gen_rpc: true,
         },
         rust: {
             enabled: true,
@@ -828,3 +850,28 @@
     },
     test_suites: ["general-tests"],
 }
+
+cc_library_static {
+    name: "aidl-analyzer-main",
+    host_supported: true,
+    vendor_available: true,
+    shared_libs: [
+        "libbase",
+        "libbinder",
+    ],
+    srcs: [
+        "analyzer/analyzerMain.cpp",
+        "analyzer/Analyzer.cpp",
+    ],
+    export_include_dirs: ["analyzer/include"],
+}
+
+cc_binary {
+    name: "record_binder",
+    whole_static_libs: ["aidl-analyzer-main"],
+    shared_libs: [
+        "libbase",
+        "libbinder",
+        "libutils"
+    ],
+}
diff --git a/OWNERS b/OWNERS
index f66939d..df4dc33 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,5 +1,7 @@
-elsk@google.com
+# Bug component: 655781
+
 devinmoore@google.com
+elsk@google.com
 jiyong@google.com
 jooyung@google.com
 malchev@google.com
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 79f49e2..6845bbf 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -11,6 +11,20 @@
     },
     {
       "name": "CtsNdkBinderTestCases"
+    },
+    {
+      "name": "hal_implementation_test"
+    },
+    {
+      "name": "resolv_integration_test"
+    },
+    {
+      "name": "FrameworksTelephonyTests",
+      "options": [
+        {
+          "include-filter": "com.android.internal.telephony.ServiceStateTrackerTest"
+        }
+      ]
     }
   ],
   "imports": [
@@ -19,4 +33,3 @@
     }
   ]
 }
-
diff --git a/aidl-format.sh b/aidl-format.sh
index dbf3e2a..1c081bd 100755
--- a/aidl-format.sh
+++ b/aidl-format.sh
@@ -16,6 +16,8 @@
 
 set -e
 
+clang_format=clang-format
+
 # future considerations:
 # - could we make this work with git-clang-format instead?
 # - should we have our own formatter?
@@ -74,7 +76,7 @@
       local style="$2"
       local temp="$(mktemp)"
       local styletext="$([ -f "$style" ] && cat "$style" | tr '\n' ',' 2> /dev/null)"
-      cat "$input" | clang-format \
+      cat "$input" | $clang_format \
         --style='{BasedOnStyle: Google,
         ColumnLimit: 100,
         IndentWidth: 4,
@@ -104,7 +106,7 @@
       # @Anno(a=1, b=2) @Anno(c=3, d=4) int foo = 3;
       # [^@,=] ensures that the match doesn't cross the characters, otherwise
       # "a = 1, b = 2" would match only once and will become "a = 1, b=2".
-      gawk -i inplace \
+      awk -i inplace \
         '/@[^@]+\(.*=.*\)/ { # matches a line having @anno(param = val) \
               print(gensub(/([^@,=]+) = ([^@,=]+|"[^"]*")/, "\\1=\\2", "g", $0)); \
               done=1;\
@@ -147,19 +149,21 @@
       echo "  -d: display diff instead of the formatted result"
       echo "  -w: rewrite the result back to the source file, instead of stdout"
       echo "  -h: show this help message"
+      echo "  --clang-format-path <PATH>: set the path to the clang-format to <PATH>"
       echo "  [path...]: source files. if none, input is read from stdin"
       exit 1
     }
 
     local mode=print
-    if [ $# -gt 0 ]; then
+    while [ $# -gt 0 ]; do
       case "$1" in
         -d) mode=diff; shift;;
         -w) mode=write; shift;;
         -h) show-help-and-exit;;
-        -*) echo "$1" is wrong option; show-help-and-exit;;
+	--clang-format-path) clang_format="$2"; shift 2;;
+	*) break;;
       esac
-    fi
+    done
 
     if [ $# -lt 1 ]; then
       if [ $mode = "write" ]; then
diff --git a/aidl.cpp b/aidl.cpp
index 9360f68..8e8ad5f 100644
--- a/aidl.cpp
+++ b/aidl.cpp
@@ -43,6 +43,7 @@
 #include "check_valid.h"
 #include "generate_aidl_mappings.h"
 #include "generate_cpp.h"
+#include "generate_cpp_analyzer.h"
 #include "generate_java.h"
 #include "generate_ndk.h"
 #include "generate_rust.h"
@@ -355,32 +356,46 @@
   return validator.success;
 }
 
-bool ValidateCppHeader(const AidlDocument& doc) {
-  struct CppHeaderVisitor : AidlVisitor {
+bool ValidateHeaders(Options::Language language, const AidlDocument& doc) {
+  typedef std::string (AidlParcelable::*GetHeader)() const;
+
+  struct HeaderVisitor : AidlVisitor {
     bool success = true;
-    void Visit(const AidlParcelable& p) override {
-      if (p.GetCppHeader().empty()) {
-        AIDL_ERROR(p) << "Unstructured parcelable \"" << p.GetName()
-                      << "\" must have C++ header defined.";
+    const char* str = nullptr;
+    GetHeader getHeader = nullptr;
+
+    void check(const AidlParcelable& p) {
+      if ((p.*getHeader)().empty()) {
+        AIDL_ERROR(p) << "Unstructured parcelable \"" << p.GetName() << "\" must have " << str
+                      << " defined.";
         success = false;
       }
     }
+
+    void Visit(const AidlParcelable& p) override { check(p); }
     void Visit(const AidlTypeSpecifier& m) override {
       auto type = m.GetDefinedType();
       if (type) {
         auto unstructured = type->AsUnstructuredParcelable();
-        if (unstructured && unstructured->GetCppHeader().empty()) {
-          AIDL_ERROR(m) << "Unstructured parcelable \"" << m.GetUnresolvedName()
-                        << "\" must have C++ header defined.";
-          success = false;
-        }
+        if (unstructured) check(*unstructured);
       }
     }
   };
 
-  CppHeaderVisitor validator;
-  VisitTopDown(validator, doc);
-  return validator.success;
+  if (language == Options::Language::CPP) {
+    HeaderVisitor validator;
+    validator.str = "cpp_header";
+    validator.getHeader = &AidlParcelable::GetCppHeader;
+    VisitTopDown(validator, doc);
+    return validator.success;
+  } else if (language == Options::Language::NDK) {
+    HeaderVisitor validator;
+    validator.str = "ndk_header";
+    validator.getHeader = &AidlParcelable::GetNdkHeader;
+    VisitTopDown(validator, doc);
+    return validator.success;
+  }
+  return true;
 }
 
 }  // namespace
@@ -600,9 +615,7 @@
     return AidlError::BAD_TYPE;
   }
 
-  if ((options.TargetLanguage() == Options::Language::CPP ||
-       options.TargetLanguage() == Options::Language::NDK) &&
-      !ValidateCppHeader(*document)) {
+  if (!ValidateHeaders(options.TargetLanguage(), *document)) {
     return AidlError::BAD_TYPE;
   }
 
@@ -615,16 +628,20 @@
       err = AidlError::BAD_TYPE;
     }
 
-    if (options.IsStructured() && type.AsUnstructuredParcelable() != nullptr &&
-        !type.AsUnstructuredParcelable()->IsStableApiParcelable(options.TargetLanguage())) {
+    bool isStable = type.IsStableApiParcelable(options.TargetLanguage());
+
+    if (options.IsStructured() && type.AsUnstructuredParcelable() != nullptr && !isStable) {
       err = AidlError::NOT_STRUCTURED;
       AIDL_ERROR(type) << type.GetCanonicalName()
-                       << " is not structured, but this is a structured interface.";
+                       << " is not structured, but this is a structured interface in "
+                       << to_string(options.TargetLanguage());
     }
-    if (options.GetStability() == Options::Stability::VINTF && !type.IsVintfStability()) {
+    if (options.GetStability() == Options::Stability::VINTF && !type.IsVintfStability() &&
+        !isStable) {
       err = AidlError::NOT_STRUCTURED;
       AIDL_ERROR(type) << type.GetCanonicalName()
-                       << " does not have VINTF level stability, but this interface requires it.";
+                       << " does not have VINTF level stability, but this interface requires it in "
+                       << to_string(options.TargetLanguage());
     }
 
     // Ensure that untyped List/Map is not used in a parcelable, a union and a stable interface.
@@ -721,6 +738,9 @@
       } else if (lang == Options::Language::RUST) {
         rust::GenerateRust(output_file_name, options, typenames, *defined_type, io_delegate);
         success = true;
+      } else if (lang == Options::Language::CPP_ANALYZER) {
+        success = cpp::GenerateCppAnalyzer(output_file_name, options, typenames, *defined_type,
+                                           io_delegate);
       } else {
         AIDL_FATAL(input_file) << "Should not reach here.";
       }
diff --git a/aidl_checkapi.cpp b/aidl_checkapi.cpp
index c1d3c66..584e5a6 100644
--- a/aidl_checkapi.cpp
+++ b/aidl_checkapi.cpp
@@ -44,7 +44,7 @@
 static std::string Dump(const AidlDefinedType& type) {
   string code;
   CodeWriterPtr out = CodeWriter::ForString(&code);
-  DumpVisitor visitor(*out);
+  DumpVisitor visitor(*out, /*inline_constants=*/true);
   type.DispatchVisit(visitor);
   out->Close();
   return code;
diff --git a/aidl_dumpapi.cpp b/aidl_dumpapi.cpp
index 1451d41..df5be2f 100644
--- a/aidl_dumpapi.cpp
+++ b/aidl_dumpapi.cpp
@@ -41,6 +41,12 @@
   if (auto generic_type = dt.AsParameterizable(); generic_type && generic_type->IsGeneric()) {
     out << "<" << Join(generic_type->GetTypeParameters(), ", ") << ">";
   }
+
+  if (dt.AsUnstructuredParcelable()) {
+    out << ";\n";
+    return;
+  }
+
   out << " {\n";
   out.Indent();
   DumpMembers(dt);
@@ -91,7 +97,11 @@
 }
 
 void DumpVisitor::DumpConstantValue(const AidlTypeSpecifier& type, const AidlConstantValue& c) {
-  out << c.ValueString(type, AidlConstantValueDecorator);
+  if (inline_constants) {
+    out << c.ValueString(type, AidlConstantValueDecorator);
+  } else {
+    c.DispatchVisit(*this);
+  }
 }
 
 void DumpVisitor::Visit(const AidlInterface& t) {
@@ -120,8 +130,11 @@
   out.Indent();
   for (const auto& e : t.GetEnumerators()) {
     DumpComments(*e);
-    out << e->GetName() << " = ";
-    DumpConstantValue(t.GetBackingType(), *e->GetValue());
+    out << e->GetName();
+    if (e->IsValueUserSpecified() || inline_constants) {
+      out << " = ";
+      DumpConstantValue(t.GetBackingType(), *e->GetValue());
+    }
     out << ",\n";
   }
   out.Dedent();
@@ -167,6 +180,40 @@
   out << t.ToString();
 }
 
+// These Visit() methods are not invoked when inline_constants = true
+void DumpVisitor::Visit(const AidlConstantValue& c) {
+  AIDL_FATAL_IF(inline_constants, AIDL_LOCATION_HERE);
+  out << c.Literal();
+}
+
+void DumpVisitor::Visit(const AidlConstantReference& r) {
+  AIDL_FATAL_IF(inline_constants, AIDL_LOCATION_HERE);
+  if (auto& ref = r.GetRefType(); ref) {
+    ref->DispatchVisit(*this);
+    out << ".";
+  }
+  out << r.GetFieldName();
+}
+
+void DumpVisitor::Visit(const AidlBinaryConstExpression& b) {
+  AIDL_FATAL_IF(inline_constants, AIDL_LOCATION_HERE);
+  // TODO(b/262594867) put parentheses only when necessary
+  out << "(";
+  b.Left()->DispatchVisit(*this);
+  out << " " << b.Op() << " ";
+  b.Right()->DispatchVisit(*this);
+  out << ")";
+}
+
+void DumpVisitor::Visit(const AidlUnaryConstExpression& u) {
+  AIDL_FATAL_IF(inline_constants, AIDL_LOCATION_HERE);
+  // TODO(b/262594867) put parentheses only when necessary
+  out << "(";
+  out << u.Op();
+  u.Val()->DispatchVisit(*this);
+  out << ")";
+}
+
 static string GetApiDumpPathFor(const AidlDefinedType& defined_type, const Options& options) {
   string package_as_path = Join(Split(defined_type.GetPackage(), "."), OS_PATH_SEPARATOR);
   AIDL_FATAL_IF(options.OutputDir().empty() || options.OutputDir().back() != '/', defined_type);
@@ -203,7 +250,7 @@
         if (!type->GetPackage().empty()) {
           (*writer) << "package " << type->GetPackage() << ";\n";
         }
-        DumpVisitor visitor(*writer);
+        DumpVisitor visitor(*writer, /*inline_constants=*/false);
         type->DispatchVisit(visitor);
       }
     } else {
@@ -214,4 +261,4 @@
 }
 
 }  // namespace aidl
-}  // namespace android
\ No newline at end of file
+}  // namespace android
diff --git a/aidl_dumpapi.h b/aidl_dumpapi.h
index df8278a..b4c146c 100644
--- a/aidl_dumpapi.h
+++ b/aidl_dumpapi.h
@@ -22,7 +22,9 @@
 
 struct DumpVisitor : AidlVisitor {
   CodeWriter& out;
-  DumpVisitor(CodeWriter& out) : out(out) {}
+  bool inline_constants;
+  DumpVisitor(CodeWriter& out, bool inline_constants)
+      : out(out), inline_constants(inline_constants) {}
 
   void DumpType(const AidlDefinedType& dt, const string& type);
   void DumpMembers(const AidlDefinedType& dt);
@@ -39,6 +41,10 @@
   void Visit(const AidlVariableDeclaration& v) override;
   void Visit(const AidlConstantDeclaration& c) override;
   void Visit(const AidlTypeSpecifier& t) override;
+  void Visit(const AidlConstantValue& c) override;
+  void Visit(const AidlConstantReference& r) override;
+  void Visit(const AidlBinaryConstExpression& b) override;
+  void Visit(const AidlUnaryConstExpression& u) override;
 };
 
 bool dump_api(const Options& options, const IoDelegate& io_delegate);
diff --git a/aidl_language.cpp b/aidl_language.cpp
index 61a4c66..42c291c 100644
--- a/aidl_language.cpp
+++ b/aidl_language.cpp
@@ -143,6 +143,10 @@
        "JavaOnlyStableParcelable",
        CONTEXT_TYPE_UNSTRUCTURED_PARCELABLE,
        {}},
+      {AidlAnnotation::Type::NDK_STABLE_PARCELABLE,
+       "NdkOnlyStableParcelable",
+       CONTEXT_TYPE_UNSTRUCTURED_PARCELABLE,
+       {}},
       {AidlAnnotation::Type::BACKING,
        "Backing",
        CONTEXT_TYPE_ENUM,
@@ -250,7 +254,7 @@
     : AidlNode(location, comments), schema_(schema), parameters_(std::move(parameters)) {}
 
 struct ConstReferenceFinder : AidlVisitor {
-  const AidlConstantReference* found;
+  const AidlConstantReference* found = nullptr;
   void Visit(const AidlConstantReference& ref) override {
     if (!found) found = &ref;
   }
@@ -351,9 +355,9 @@
   const static map<TargetContext, string> context_name_map{
       {CONTEXT_TYPE_INTERFACE, "interface"},
       {CONTEXT_TYPE_ENUM, "enum"},
-      {CONTEXT_TYPE_STRUCTURED_PARCELABLE, "structured parcelable"},
+      {CONTEXT_TYPE_STRUCTURED_PARCELABLE, "parcelable definition"},
       {CONTEXT_TYPE_UNION, "union"},
-      {CONTEXT_TYPE_UNSTRUCTURED_PARCELABLE, "parcelable"},
+      {CONTEXT_TYPE_UNSTRUCTURED_PARCELABLE, "parcelable declaration"},
       {CONTEXT_CONST, "constant"},
       {CONTEXT_FIELD, "field"},
       {CONTEXT_METHOD, "method"},
@@ -365,8 +369,8 @@
       available.push_back(name);
     }
   }
-  AIDL_ERROR(this) << "@" << GetName() << " is not available. It can annotate {"
-                   << Join(available, ", ") << "}.";
+  AIDL_ERROR(this) << "@" << GetName()
+                   << " is not available. It can only annotate: " << Join(available, ", ") << ".";
   return false;
 }
 
@@ -525,8 +529,11 @@
 }
 
 bool AidlAnnotatable::IsStableApiParcelable(Options::Language lang) const {
-  return lang == Options::Language::JAVA &&
-         GetAnnotation(annotations_, AidlAnnotation::Type::JAVA_STABLE_PARCELABLE);
+  if (lang == Options::Language::JAVA)
+    return GetAnnotation(annotations_, AidlAnnotation::Type::JAVA_STABLE_PARCELABLE);
+  if (lang == Options::Language::NDK)
+    return GetAnnotation(annotations_, AidlAnnotation::Type::NDK_STABLE_PARCELABLE);
+  return false;
 }
 
 bool AidlAnnotatable::JavaDerive(const std::string& method) const {
@@ -1423,14 +1430,18 @@
 
 AidlParcelable::AidlParcelable(const AidlLocation& location, const std::string& name,
                                const std::string& package, const Comments& comments,
-                               const std::string& cpp_header, std::vector<std::string>* type_params,
+                               const AidlUnstructuredHeaders& headers,
+                               std::vector<std::string>* type_params,
                                std::vector<std::unique_ptr<AidlMember>>* members)
     : AidlDefinedType(location, name, comments, package, members),
       AidlParameterizable<std::string>(type_params),
-      cpp_header_(cpp_header) {
-  // Strip off quotation marks if we actually have a cpp header.
-  if (cpp_header_.length() >= 2) {
-    cpp_header_ = cpp_header_.substr(1, cpp_header_.length() - 2);
+      headers_(headers) {
+  // Strip off quotation marks if we actually have headers.
+  if (headers_.cpp.length() >= 2) {
+    headers_.cpp = headers_.cpp.substr(1, headers_.cpp.length() - 2);
+  }
+  if (headers_.ndk.length() >= 2) {
+    headers_.ndk = headers_.ndk.substr(1, headers_.ndk.length() - 2);
   }
 }
 
@@ -1478,7 +1489,7 @@
     const AidlLocation& location, const std::string& name, const std::string& package,
     const Comments& comments, std::vector<std::string>* type_params,
     std::vector<std::unique_ptr<AidlMember>>* members)
-    : AidlParcelable(location, name, package, comments, "" /*cpp_header*/, type_params, members) {}
+    : AidlParcelable(location, name, package, comments, {} /*headers*/, type_params, members) {}
 
 bool AidlStructuredParcelable::CheckValid(const AidlTypenames& typenames) const {
   if (!AidlParcelable::CheckValid(typenames)) {
@@ -1637,7 +1648,7 @@
                              const std::string& package, const Comments& comments,
                              std::vector<std::string>* type_params,
                              std::vector<std::unique_ptr<AidlMember>>* members)
-    : AidlParcelable(location, name, package, comments, "" /*cpp_header*/, type_params, members) {}
+    : AidlParcelable(location, name, package, comments, {} /*headers*/, type_params, members) {}
 
 bool AidlUnionDecl::CheckValid(const AidlTypenames& typenames) const {
   // visit parents
@@ -1749,6 +1760,18 @@
   return true;
 }
 
+bool AidlInterface::UsesPermissions() const {
+  if (IsPermissionAnnotated()) {
+    return true;
+  }
+  for (auto& m : GetMethods()) {
+    if (m->GetType().IsPermissionAnnotated()) {
+      return true;
+    }
+  }
+  return false;
+}
+
 std::string AidlInterface::GetDescriptor() const {
   std::string annotatedDescriptor = AidlAnnotatable::GetDescriptor();
   if (annotatedDescriptor != "") {
diff --git a/aidl_language.h b/aidl_language.h
index 66faeb0..e5e9774 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -226,6 +226,7 @@
   enum class Type {
     BACKING = 1,
     JAVA_STABLE_PARCELABLE,
+    NDK_STABLE_PARCELABLE,
     UNSUPPORTED_APP_USAGE,
     VINTF_STABILITY,
     NULLABLE,
@@ -687,7 +688,7 @@
   // Raw value of type (currently valid in C++ and Java). Empty string on error.
   string ValueString(const AidlTypeSpecifier& type, const ConstantValueDecorator& decorator) const;
 
-  void TraverseChildren(std::function<void(const AidlNode&)> traverse) const {
+  void TraverseChildren(std::function<void(const AidlNode&)> traverse) const override {
     if (type_ == Type::ARRAY) {
       for (const auto& v : values_) {
         traverse(*v);
@@ -726,7 +727,7 @@
 };
 
 // Represents "<type>.<field>" which resolves to a constant which is one of
-// - constant declartion
+// - constant declaration
 // - enumerator
 // When a <type> is missing, <field> is of the enclosing type.
 class AidlConstantReference : public AidlConstantValue {
@@ -764,6 +765,8 @@
     traverse(*unary_);
   }
   void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
+  const std::unique_ptr<AidlConstantValue>& Val() const { return unary_; }
+  const std::string& Op() const { return op_; }
 
  private:
   bool evaluate() const override;
@@ -789,6 +792,9 @@
     traverse(*right_val_);
   }
   void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
+  const std::unique_ptr<AidlConstantValue>& Left() const { return left_val_; }
+  const std::unique_ptr<AidlConstantValue>& Right() const { return right_val_; }
+  const std::string& Op() const { return op_; }
 
  private:
   bool evaluate() const override;
@@ -1035,11 +1041,16 @@
   std::vector<const AidlMember*> members_;  // keep members in order of appearance.
 };
 
+struct AidlUnstructuredHeaders {
+  std::string cpp;
+  std::string ndk;
+};
+
 class AidlParcelable : public AidlDefinedType, public AidlParameterizable<std::string> {
  public:
   AidlParcelable(const AidlLocation& location, const std::string& name, const std::string& package,
-                 const Comments& comments, const std::string& cpp_header = "",
-                 std::vector<std::string>* type_params = nullptr,
+                 const Comments& comments, const AidlUnstructuredHeaders& headers,
+                 std::vector<std::string>* type_params,
                  std::vector<std::unique_ptr<AidlMember>>* members = nullptr);
   virtual ~AidlParcelable() = default;
 
@@ -1049,7 +1060,8 @@
   AidlParcelable& operator=(const AidlParcelable&) = delete;
   AidlParcelable& operator=(AidlParcelable&&) = delete;
 
-  std::string GetCppHeader() const { return cpp_header_; }
+  std::string GetCppHeader() const { return headers_.cpp; }
+  std::string GetNdkHeader() const { return headers_.ndk; }
 
   bool CheckValid(const AidlTypenames& typenames) const override;
   const AidlParcelable* AsParcelable() const override { return this; }
@@ -1060,7 +1072,7 @@
   void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
 
  private:
-  std::string cpp_header_;
+  AidlUnstructuredHeaders headers_;
 };
 
 class AidlStructuredParcelable : public AidlParcelable {
@@ -1198,6 +1210,7 @@
 
   bool CheckValid(const AidlTypenames& typenames) const override;
   bool CheckValidPermissionAnnotations(const AidlMethod& m) const;
+  bool UsesPermissions() const;
   std::string GetDescriptor() const;
   void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
 };
diff --git a/aidl_language_l.ll b/aidl_language_l.ll
index 5b11008..732b421 100644
--- a/aidl_language_l.ll
+++ b/aidl_language_l.ll
@@ -128,6 +128,8 @@
 inout                 { return yy::parser::token::INOUT; }
 cpp_header            { yylval->token = new AidlToken("cpp_header", comments);
                         return yy::parser::token::CPP_HEADER; }
+ndk_header            { yylval->token = new AidlToken("ndk_header", comments);
+                        return yy::parser::token::NDK_HEADER; }
 const                 { yylval->token = new AidlToken("const", comments);
                         return yy::parser::token::CONST; }
 true                  { return yy::parser::token::TRUE_LITERAL; }
diff --git a/aidl_language_y.yy b/aidl_language_y.yy
index 11ab29e..3d50621 100644
--- a/aidl_language_y.yy
+++ b/aidl_language_y.yy
@@ -92,6 +92,7 @@
     std::vector<std::unique_ptr<AidlTypeSpecifier>>* type_args;
     std::vector<std::string>* type_params;
     std::vector<std::unique_ptr<AidlDefinedType>>* declarations;
+    AidlUnstructuredHeaders* unstructured_headers;
 }
 
 %destructor { } <direction>
@@ -117,6 +118,7 @@
 %token '(' ')' ',' '=' '[' ']' '.' '{' '}' ';'
 %token UNKNOWN "unrecognized character"
 %token<token> CPP_HEADER "cpp_header (which can also be used as an identifier)"
+%token<token> NDK_HEADER "ndk_header (which can also be used as an identifier)"
 %token IN "in"
 %token INOUT "inout"
 %token OUT "out"
@@ -176,6 +178,7 @@
 %type<token_list> imports
 %type<declarations> decls
 %type<token> import identifier error qualified_name optional_package
+%type<unstructured_headers> optional_unstructured_headers
 
 %%
 
@@ -206,6 +209,7 @@
 identifier
  : IDENTIFIER
  | CPP_HEADER
+ | NDK_HEADER
  ;
 
 optional_package
@@ -294,18 +298,35 @@
     delete $3;
   };
 
- optional_type_params
-  : /* none */ { $$ = nullptr; }
-  | '<' type_params '>' {
-    $$ = $2;
-  };
+optional_type_params
+ : /* none */ { $$ = nullptr; }
+ | '<' type_params '>' {
+   $$ = $2;
+ };
+
+optional_unstructured_headers
+ : /* none */ { $$ = new AidlUnstructuredHeaders; }
+ | optional_unstructured_headers CPP_HEADER C_STR {
+     $$ = $1;
+     $$->cpp = $3->GetText();
+     delete $2;
+     delete $3;
+ }
+ | optional_unstructured_headers NDK_HEADER C_STR {
+     $$ = $1;
+     $$->ndk = $3->GetText();
+     delete $2;
+     delete $3;
+ }
+ ;
 
 parcelable_decl
- : PARCELABLE qualified_name optional_type_params ';' {
+ : PARCELABLE qualified_name optional_type_params optional_unstructured_headers ';' {
     // No check for type name here. We allow nested types for unstructured parcelables.
-    $$ = new AidlParcelable(loc(@2), $2->GetText(), ps->Package(), $1->GetComments(), "", $3);
+    $$ = new AidlParcelable(loc(@2), $2->GetText(), ps->Package(), $1->GetComments(), *$4, $3);
     delete $1;
     delete $2;
+    delete $4;
  }
  | PARCELABLE qualified_name optional_type_params '{' parcelable_members '}' {
     ps->CheckValidTypeName(*$2, loc(@2));
@@ -313,14 +334,6 @@
     delete $1;
     delete $2;
  }
- | PARCELABLE qualified_name CPP_HEADER C_STR ';' {
-    // No check for type name here. We allow nested types for unstructured parcelables.
-    $$ = new AidlParcelable(loc(@2), $2->GetText(), ps->Package(), $1->GetComments(), $4->GetText());
-    delete $1;
-    delete $2;
-    delete $3;
-    delete $4;
-  }
  | PARCELABLE error ';' {
     ps->AddError();
     $$ = nullptr;
diff --git a/aidl_to_cpp.cpp b/aidl_to_cpp.cpp
index 987aba5..aab0024 100644
--- a/aidl_to_cpp.cpp
+++ b/aidl_to_cpp.cpp
@@ -348,7 +348,7 @@
   if (auto unstructured = AidlCast<AidlParcelable>(defined_type); unstructured) {
     const std::string cpp_header = unstructured->GetCppHeader();
     AIDL_FATAL_IF(cpp_header.empty(), unstructured)
-        << "Parcelable " << unstructured->GetCanonicalName() << " has no C++ header defined.";
+        << "Parcelable " << unstructured->GetCanonicalName() << " has no cpp_header defined.";
     return cpp_header;
   }
   return HeaderFile(defined_type, ClassNames::RAW, /*use_os_sep=*/false);
diff --git a/aidl_to_cpp_common.cpp b/aidl_to_cpp_common.cpp
index 682b6c8..9834c1a 100644
--- a/aidl_to_cpp_common.cpp
+++ b/aidl_to_cpp_common.cpp
@@ -50,6 +50,11 @@
 };
 )";
 
+bool HasDeprecatedField(const AidlParcelable& parcelable) {
+  return std::any_of(parcelable.GetFields().begin(), parcelable.GetFields().end(),
+                     [](const auto& field) { return field->IsDeprecated(); });
+}
+
 string ClassName(const AidlDefinedType& defined_type, ClassNames type) {
   string base_name = defined_type.GetName();
   if (base_name.length() >= 2 && base_name[0] == 'I' && isupper(base_name[1])) {
@@ -95,6 +100,31 @@
   return Join(paths, separator) + ".h";
 }
 
+// Ensures that output_file is  <out_dir>/<packagename>/<typename>.cpp
+bool ValidateOutputFilePath(const string& output_file, const Options& options,
+                            const AidlDefinedType& defined_type) {
+  const auto& out_dir =
+      !options.OutputDir().empty() ? options.OutputDir() : options.OutputHeaderDir();
+  if (output_file.empty() || !android::base::StartsWith(output_file, out_dir)) {
+    // If output_file is not set (which happens in the unit tests) or is outside of out_dir, we can
+    // help but accepting it, because the path is what the user has requested.
+    return true;
+  }
+
+  string canonical_name = defined_type.GetCanonicalName();
+  std::replace(canonical_name.begin(), canonical_name.end(), '.', OS_PATH_SEPARATOR);
+  const string expected = out_dir + canonical_name + ".cpp";
+  if (expected != output_file) {
+    AIDL_ERROR(defined_type) << "Output file is expected to be at " << expected << ", but is "
+                             << output_file << ".\n If this is an Android platform "
+                             << "build, consider providing the input AIDL files using a filegroup "
+                             << "with `path:\"<base>\"` so that the AIDL files are located at "
+                             << "<base>/<packagename>/<typename>.aidl.";
+    return false;
+  }
+  return true;
+}
+
 void EnterNamespace(CodeWriter& out, const AidlDefinedType& defined_type) {
   const std::vector<std::string> packages = defined_type.GetSplitPackage();
   for (const std::string& package : packages) {
@@ -425,16 +455,9 @@
   out << "os << \"" + parcelable.GetName() + "{\";\n";
   out << "switch (getTag()) {\n";
   for (const auto& f : parcelable.GetFields()) {
-    if (f->IsDeprecated()) {
-      out << "#pragma clang diagnostic push\n";
-      out << "#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n";
-    }
     const string tag = f->GetName();
     out << "case " << tag << ": os << \"" << tag << ": \" << "
         << "::android::internal::ToString(get<" + tag + ">()); break;\n";
-    if (f->IsDeprecated()) {
-      out << "#pragma clang diagnostic pop\n";
-    }
   }
   out << "}\n";
   out << "os << \"}\";\n";
@@ -658,10 +681,6 @@
   read_var(tag, *tag_type);
   out << fmt::format("switch (static_cast<Tag>({})) {{\n", tag);
   for (const auto& variable : decl.GetFields()) {
-    if (variable->IsDeprecated()) {
-      out << "#pragma clang diagnostic push\n";
-      out << "#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n";
-    }
     out << fmt::format("case {}: {{\n", variable->GetName());
     out.Indent();
     const auto& type = variable->GetType();
@@ -681,9 +700,6 @@
     out << "}\n";
     out << fmt::format("return {}; }}\n", ctx.status_ok);
     out.Dedent();
-    if (variable->IsDeprecated()) {
-      out << "#pragma clang diagnostic pop\n";
-    }
   }
   out << "}\n";
   out << fmt::format("return {};\n", ctx.status_bad);
@@ -790,6 +806,60 @@
   }
   return cpp_type_name + "::" + value.substr(value.find_last_of('.') + 1);
 }
+
+// Collect all forward declarations for the type's interface header.
+// Nested types are visited as well via VisitTopDown.
+void GenerateForwardDecls(CodeWriter& out, const AidlDefinedType& root_type, bool is_ndk) {
+  struct Visitor : AidlVisitor {
+    using PackagePath = std::vector<std::string>;
+    struct ClassDeclInfo {
+      std::string template_decl;
+    };
+    std::map<PackagePath, std::map<std::string, ClassDeclInfo>> classes;
+    // Collect class names for each interface or parcelable type
+    void Visit(const AidlTypeSpecifier& type) override {
+      const auto defined_type = type.GetDefinedType();
+      if (defined_type && !defined_type->GetParentType()) {
+        // Forward declarations are not supported for nested types
+        auto package = defined_type->GetSplitPackage();
+        if (defined_type->AsInterface() != nullptr) {
+          auto name = ClassName(*defined_type, ClassNames::INTERFACE);
+          classes[package][std::move(name)] = ClassDeclInfo();
+        } else if (auto* p = defined_type->AsStructuredParcelable(); p != nullptr) {
+          auto name = defined_type->GetName();
+          ClassDeclInfo info;
+          info.template_decl = TemplateDecl(*p);
+          classes[package][std::move(name)] = std::move(info);
+        }
+      }
+    }
+  } v;
+  VisitTopDown(v, root_type);
+
+  if (v.classes.empty()) {
+    return;
+  }
+
+  for (const auto& it : v.classes) {
+    auto package = it.first;
+    auto& classes = it.second;
+
+    if (is_ndk) {
+      package.insert(package.begin(), "aidl");
+    }
+
+    std::string namespace_name = Join(package, "::");
+    if (!namespace_name.empty()) {
+      out << "namespace " << namespace_name << " {\n";
+    }
+    for (const auto& [name, info] : classes) {
+      out << info.template_decl << "class " << name << ";\n";
+    }
+    if (!namespace_name.empty()) {
+      out << "}  // namespace " << namespace_name << "\n";
+    }
+  }
+}
 }  // namespace cpp
 }  // namespace aidl
 }  // namespace android
diff --git a/aidl_to_cpp_common.h b/aidl_to_cpp_common.h
index e6733b6..e732641 100644
--- a/aidl_to_cpp_common.h
+++ b/aidl_to_cpp_common.h
@@ -56,6 +56,9 @@
 std::string HeaderFile(const AidlDefinedType& defined_type, ClassNames class_type,
                        bool use_os_sep = true);
 
+bool ValidateOutputFilePath(const string& output_file, const Options& options,
+                            const AidlDefinedType& defined_type);
+
 void EnterNamespace(CodeWriter& out, const AidlDefinedType& defined_type);
 void LeaveNamespace(CodeWriter& out, const AidlDefinedType& defined_type);
 
@@ -132,6 +135,29 @@
 std::string CppConstantValueDecorator(
     const AidlTypeSpecifier& type,
     const std::variant<std::string, std::vector<std::string>>& raw_value, bool is_ndk);
+
+void GenerateForwardDecls(CodeWriter& out, const AidlDefinedType& root_type, bool is_ndk);
+
+struct ClangDiagnosticIgnoreDeprecated {
+  CodeWriter& out;
+  bool deprecated;
+  ClangDiagnosticIgnoreDeprecated(CodeWriter& out, bool deprecated)
+      : out(out), deprecated(deprecated) {
+    // enter
+    if (deprecated) {
+      out << "#pragma clang diagnostic push\n";
+      out << "#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n";
+    }
+  }
+  ~ClangDiagnosticIgnoreDeprecated() {
+    // exit
+    if (deprecated) {
+      out << "#pragma clang diagnostic pop\n";
+    }
+  }
+};
+
+bool HasDeprecatedField(const AidlParcelable& parcelable);
 }  // namespace cpp
 }  // namespace aidl
 }  // namespace android
diff --git a/aidl_to_ndk.cpp b/aidl_to_ndk.cpp
index 80d68b2..f533c77 100644
--- a/aidl_to_ndk.cpp
+++ b/aidl_to_ndk.cpp
@@ -32,6 +32,15 @@
 
 std::string NdkHeaderFile(const AidlDefinedType& defined_type, cpp::ClassNames name,
                           bool use_os_sep) {
+  // Unstructured parcelable should set its ndk_header. use it.
+  if (auto unstructured = AidlCast<AidlParcelable>(defined_type); unstructured) {
+    AIDL_FATAL_IF(name != cpp::ClassNames::RAW, "unstructured parcelable should only use raw name");
+    const std::string ndk_header = unstructured->GetNdkHeader();
+    AIDL_FATAL_IF(ndk_header.empty(), unstructured)
+        << "Parcelable " << unstructured->GetCanonicalName() << " has no ndk_header defined.";
+    return ndk_header;
+  }
+
   char seperator = (use_os_sep) ? OS_PATH_SEPARATOR : '/';
   return std::string("aidl") + seperator + cpp::HeaderFile(defined_type, name, use_os_sep);
 }
diff --git a/aidl_unittest.cpp b/aidl_unittest.cpp
index 3b11c84..7dc83aa 100644
--- a/aidl_unittest.cpp
+++ b/aidl_unittest.cpp
@@ -104,6 +104,7 @@
     for (const string& f : preprocessed_files_) {
       args.emplace_back("--preprocessed=" + f);
     }
+    args.emplace_back("--include=.");
     for (const string& i : import_paths_) {
       args.emplace_back("--include=" + i);
     }
@@ -479,11 +480,11 @@
 }
 
 TEST_F(AidlTest, ParsesJavaOnlyStableParcelable) {
-  Options java_options = Options::From("aidl -o out --structured a/Foo.aidl");
-  Options cpp_options = Options::From("aidl --lang=cpp -o out -h out/include a/Foo.aidl");
+  Options java_options = Options::From("aidl -I . -o out --structured a/Foo.aidl");
+  Options cpp_options = Options::From("aidl -I . --lang=cpp -o out -h out/include a/Foo.aidl");
   Options cpp_structured_options =
-      Options::From("aidl --lang=cpp --structured -o out -h out/include a/Foo.aidl");
-  Options rust_options = Options::From("aidl --lang=rust -o out --structured a/Foo.aidl");
+      Options::From("aidl --lang=cpp -I . --structured -o out -h out/include a/Foo.aidl");
+  Options rust_options = Options::From("aidl -I . --lang=rust -o out --structured a/Foo.aidl");
   io_delegate_.SetFileContents(
       "a/Foo.aidl",
       StringPrintf("package a; @JavaOnlyStableParcelable parcelable Foo cpp_header \"Foo.h\" ;"));
@@ -500,10 +501,61 @@
   EXPECT_THAT(GetCapturedStderr(), HasSubstr("Cannot declare unstructured"));
 }
 
+TEST_F(AidlTest, ParsesNdkOnlyStableParcelable) {
+  Options java_options = Options::From("aidl -I . -o out --structured a/Foo.aidl");
+  Options ndk_structured_options =
+      Options::From("aidl --lang=ndk --structured -I . -o out -h out/include a/Foo.aidl");
+  Options rust_options = Options::From("aidl --lang=rust -I . -o out --structured a/Foo.aidl");
+  Options cpp_options = Options::From("aidl --lang=cpp -I . -o out -h out/include a/Foo.aidl");
+  io_delegate_.SetFileContents(
+      "a/Foo.aidl",
+      StringPrintf("package a; @NdkOnlyStableParcelable parcelable Foo cpp_header \"Foo.h\" ;"));
+
+  EXPECT_TRUE(compile_aidl(cpp_options, io_delegate_));
+
+  // not considered unstructured, but it still can't be compiled directly with
+  // --structured AIDL - it can only be used as an import
+  CaptureStderr();
+  EXPECT_FALSE(compile_aidl(ndk_structured_options, io_delegate_));
+  EXPECT_THAT(GetCapturedStderr(),
+              HasSubstr("Refusing to generate code with unstructured parcelables"));
+
+  CaptureStderr();
+  EXPECT_FALSE(compile_aidl(java_options, io_delegate_));
+  EXPECT_THAT(GetCapturedStderr(), HasSubstr("Cannot declare unstructured"));
+
+  CaptureStderr();
+  EXPECT_FALSE(compile_aidl(rust_options, io_delegate_));
+  EXPECT_THAT(GetCapturedStderr(), HasSubstr("Cannot declare unstructured"));
+}
+
+TEST_P(AidlTest, NdkAndJavaStabilityIsVintfStable) {
+  CaptureStderr();
+
+  io_delegate_.SetFileContents("NonPortableThing.aidl",
+                               "@NdkOnlyStableParcelable @JavaOnlyStableParcelable parcelable "
+                               "NonPortableThing ndk_header \"lol.h\" cpp_header \"lolol.h\";");
+  import_paths_.emplace("");
+
+  auto result =
+      Parse("IFoo.aidl",
+            "import NonPortableThing; @VintfStability interface IFoo { NonPortableThing get(); }",
+            typenames_, GetLanguage(), nullptr, {"--structured", "--stability", "vintf"});
+
+  if (GetLanguage() == Options::Language::NDK || GetLanguage() == Options::Language::JAVA) {
+    EXPECT_NE(result, nullptr);
+    EXPECT_EQ(GetCapturedStderr(), "");
+  } else {
+    EXPECT_EQ(result, nullptr);
+    EXPECT_THAT(GetCapturedStderr(),
+                HasSubstr("NonPortableThing does not have VINTF level stability"));
+  }
+}
+
 TEST_F(AidlTest, ParcelableSupportJavaDeriveToString) {
   io_delegate_.SetFileContents("a/Foo.aidl", R"(package a;
     @JavaDerive(toString=true) parcelable Foo { int a; float b; })");
-  Options java_options = Options::From("aidl --lang=java -o out a/Foo.aidl");
+  Options java_options = Options::From("aidl --lang=java -I . -o out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(java_options, io_delegate_));
 
   string java_out;
@@ -511,10 +563,10 @@
   EXPECT_THAT(java_out, testing::HasSubstr("public String toString() {"));
 
   // Other backends shouldn't be bothered
-  Options cpp_options = Options::From("aidl --lang=cpp -o out -h out a/Foo.aidl");
+  Options cpp_options = Options::From("aidl --lang=cpp -I . -o out -h out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(cpp_options, io_delegate_));
 
-  Options ndk_options = Options::From("aidl --lang=ndk -o out -h out a/Foo.aidl");
+  Options ndk_options = Options::From("aidl --lang=ndk -I . -o out -h out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(ndk_options, io_delegate_));
 }
 
@@ -522,7 +574,7 @@
   io_delegate_.SetFileContents("a/Foo.aidl", R"(package a;
     @JavaDerive(toString=true) union Foo { int a; int[] b; })");
   CaptureStderr();
-  Options java_options = Options::From("aidl --lang=java -o out a/Foo.aidl");
+  Options java_options = Options::From("aidl --lang=java -I . -o out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(java_options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
 
@@ -546,7 +598,7 @@
   io_delegate_.SetFileContents("a/Foo.aidl", R"(package a;
     @JavaDerive(equals=true) parcelable Foo { int a; float b; })");
   CaptureStderr();
-  Options java_options = Options::From("aidl --lang=java -o out a/Foo.aidl");
+  Options java_options = Options::From("aidl --lang=java -I . -o out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(java_options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
 
@@ -577,7 +629,7 @@
   io_delegate_.SetFileContents("a/Foo.aidl", R"(package a;
     @JavaDerive(equals=true) union Foo { int a; int[] b; })");
   CaptureStderr();
-  Options java_options = Options::From("aidl --lang=java -o out a/Foo.aidl");
+  Options java_options = Options::From("aidl --lang=java -I . -o out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(java_options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
 
@@ -608,7 +660,7 @@
   {
     io_delegate_.SetFileContents("a/Foo.aidl",
                                  "package a; @JavaDerive(blah=true) parcelable Foo{}");
-    Options java_options = Options::From("aidl --lang=java -o out a/Foo.aidl");
+    Options java_options = Options::From("aidl --lang=java -I . -o out a/Foo.aidl");
     CaptureStderr();
     EXPECT_FALSE(compile_aidl(java_options, io_delegate_));
     const std::string expected_stderr =
@@ -619,7 +671,7 @@
 
   {
     io_delegate_.SetFileContents("a/IFoo.aidl", "package a; @JavaDerive interface IFoo{}");
-    Options java_options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+    Options java_options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
     CaptureStderr();
     EXPECT_FALSE(compile_aidl(java_options, io_delegate_));
     EXPECT_THAT(GetCapturedStderr(), HasSubstr("@JavaDerive is not available."));
@@ -736,7 +788,7 @@
 TEST_P(AidlTest, CppHeaderCanBeIdentifierAsWell) {
   io_delegate_.SetFileContents("p/cpp_header.aidl",
                                R"(package p;
-         parcelable cpp_header cpp_header "bar/header";)");
+         parcelable cpp_header cpp_header "bar/header" ndk_header "ndk/bar/header";)");
   import_paths_.emplace("");
   const string input_path = "p/IFoo.aidl";
   const string input = R"(package p;
@@ -754,10 +806,10 @@
 
 TEST_F(AidlTest, RejectsIfCppHeaderIsMissing) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo;");
-  Options options = Options::From("aidl --lang cpp -h h -o o Foo.aidl");
+  Options options = Options::From("aidl -I . --lang cpp -h h -o o Foo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
-  EXPECT_THAT(GetCapturedStderr(), HasSubstr("must have C++ header defined"));
+  EXPECT_THAT(GetCapturedStderr(), HasSubstr("must have cpp_header defined"));
 }
 
 TEST_F(AidlTest, RejectsIfTypeRefsCppHeaderIsMissing) {
@@ -766,7 +818,7 @@
   Options options = Options::From("aidl -I . --lang cpp -h h -o o IBar.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
-  EXPECT_THAT(GetCapturedStderr(), HasSubstr("must have C++ header defined"));
+  EXPECT_THAT(GetCapturedStderr(), HasSubstr("must have cpp_header defined"));
 }
 
 TEST_F(AidlTest, ParsesPreprocessedFile) {
@@ -908,7 +960,7 @@
                                "package a; parcelable Foo { const int y = foo.bar.Bar.BAR; }");
   io_delegate_.SetFileContents("preprocessed", preprocessed);
   CaptureStderr();
-  auto options = Options::From("aidl --lang java -o out a/Foo.aidl -ppreprocessed");
+  auto options = Options::From("aidl --lang java -I . -o out a/Foo.aidl -ppreprocessed");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
   string code;
@@ -927,7 +979,7 @@
                                "package x;\n"
                                "parcelable Outer.Inner1;\n"
                                "parcelable Outer.Inner2;\n");
-  auto opt = Options::From("aidl -Iimported --lang=java p/IFoo.aidl");
+  auto opt = Options::From("aidl -I . -Iimported --lang=java p/IFoo.aidl");
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(opt, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
@@ -1006,7 +1058,7 @@
                              std::vector<std::pair<Options::Language, TestCase>> expectations) {
     io_delegate_.SetFileContents(filename, contents);
 
-    auto options = Options::From("aidl --lang=" + to_string(GetLanguage()) + " " + filename +
+    auto options = Options::From("aidl -I . --lang=" + to_string(GetLanguage()) + " " + filename +
                                  " --out=out --header_out=out");
     EXPECT_TRUE(compile_aidl(options, io_delegate_));
     for (const auto& [lang, test_case] : expectations) {
@@ -1170,7 +1222,9 @@
 }
 
 TEST_P(AidlTest, ParseCompoundParcelableFromPreprocess) {
-  io_delegate_.SetFileContents("preprocessed", "parcelable p.Outer.Inner cpp_header \"inner.h\";");
+  io_delegate_.SetFileContents(
+      "preprocessed",
+      "parcelable p.Outer.Inner cpp_header \"inner.h\" ndk_header \"ndk/inner.h\";");
   preprocessed_files_.push_back("preprocessed");
   auto parse_result = Parse("p/IFoo.aidl", "package p; interface IFoo { void f(in Inner c); }",
                             typenames_, GetLanguage());
@@ -1181,7 +1235,7 @@
 TEST_F(AidlTest, ApiMappingAcceptsUnstructuredParcelables) {
   io_delegate_.SetFileContents("p/Foo.aidl", "package p; parcelable Foo;");
 
-  Options options1 = Options::From("aidl --apimapping mapping.txt p/Foo.aidl");
+  Options options1 = Options::From("aidl -I . --apimapping mapping.txt p/Foo.aidl");
   CaptureStderr();
   EXPECT_EQ(0, aidl_entry(options1, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
@@ -1195,13 +1249,13 @@
   io_delegate_.SetFileContents("p/IFoo.aidl", "package p; parcelable IFoo;");
 
   // By default, we shouldn't fail on parcelable.
-  Options options1 = Options::From("aidl p/IFoo.aidl");
+  Options options1 = Options::From("aidl -I . p/IFoo.aidl");
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options1, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
 
   // -b considers this an error
-  Options options2 = Options::From("aidl -b p/IFoo.aidl");
+  Options options2 = Options::From("aidl -I . -b p/IFoo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options2, io_delegate_));
   EXPECT_EQ(expected_foo_stderr, GetCapturedStderr());
@@ -1213,11 +1267,11 @@
   io_delegate_.SetFileContents("p/IBar.aidl", "package p; parcelable Foo; interface IBar{}");
 
   // With '-b' option, a parcelable and an interface should fail.
-  Options options3 = Options::From("aidl p/IBar.aidl");
+  Options options3 = Options::From("aidl -I . p/IBar.aidl");
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options3, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
-  Options options4 = Options::From("aidl -b p/IBar.aidl");
+  Options options4 = Options::From("aidl -I . -b p/IBar.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options4, io_delegate_));
   EXPECT_EQ(expected_bar_stderr, GetCapturedStderr());
@@ -1236,10 +1290,10 @@
 
 TEST_P(AidlTest, StructuredFailOnUnstructuredParcelable) {
   const string expected_stderr =
-      "ERROR: o/WhoKnowsWhat.aidl:1.22-35: o.WhoKnowsWhat is not structured, but this is a "
-      "structured interface.\n";
+      "o.WhoKnowsWhat is not structured, but this is a structured interface";
   io_delegate_.SetFileContents("o/WhoKnowsWhat.aidl",
-                               "package o; parcelable WhoKnowsWhat cpp_header \"who_knows.h\";");
+                               "package o; parcelable WhoKnowsWhat cpp_header \"who_knows.h\" "
+                               "ndk_header \"ndk/who_knows.h\";");
   import_paths_.emplace("");
   AidlError error;
   CaptureStderr();
@@ -1248,7 +1302,7 @@
       Parse("p/IFoo.aidl",
             "package p; import o.WhoKnowsWhat; interface IFoo { void f(in WhoKnowsWhat thisIs); }",
             typenames_, GetLanguage(), &error, {"--structured"}));
-  EXPECT_EQ(expected_stderr, GetCapturedStderr());
+  EXPECT_THAT(GetCapturedStderr(), HasSubstr(expected_stderr));
   EXPECT_EQ(AidlError::NOT_STRUCTURED, error);
 }
 
@@ -1336,7 +1390,7 @@
 TEST_F(AidlTest, BoolConstantsEvaluatesToIntegers) {
   io_delegate_.SetFileContents("a/Foo.aidl", "package a; parcelable Foo { const int y = true; }");
   CaptureStderr();
-  auto options = Options::From("aidl --lang java -o out a/Foo.aidl");
+  auto options = Options::From("aidl -I . --lang java -o out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
   string code;
@@ -1435,26 +1489,24 @@
 TEST_P(AidlTest, FailOnMalformedQualifiedNameAsIdentifier) {
   AidlError error;
   const string expected_stderr =
-      "ERROR: p/IFoo.aidl:1.25-26: syntax error, unexpected ';', expecting identifier or "
-      "cpp_header (which can also be used as an identifier)\n";
+      "ERROR: p/IFoo.aidl:1.25-26: syntax error, unexpected ';', expecting identifier";
   CaptureStderr();
   // Notice the trailing dot(.) in the name, which isn't a correct name
   EXPECT_EQ(nullptr, Parse("p/IFoo.aidl", R"(package p; parcelable A.; )", typenames_,
                            GetLanguage(), &error));
-  EXPECT_EQ(expected_stderr, GetCapturedStderr());
+  EXPECT_THAT(GetCapturedStderr(), HasSubstr(expected_stderr));
   EXPECT_EQ(AidlError::PARSE_ERROR, error);
 }
 
 TEST_P(AidlTest, FailOnMalformedQualifiedNameAsPackage) {
   AidlError error;
   const string expected_stderr =
-      "ERROR: p/IFoo.aidl:1.11-12: syntax error, unexpected ';', expecting identifier or "
-      "cpp_header (which can also be used as an identifier)\n";
+      "ERROR: p/IFoo.aidl:1.11-12: syntax error, unexpected ';', expecting identifier";
   CaptureStderr();
   // Notice the trailing dot(.) in the package name
   EXPECT_EQ(nullptr, Parse("p/IFoo.aidl", R"(package p.; parcelable A; )", typenames_,
                            GetLanguage(), &error));
-  EXPECT_EQ(expected_stderr, GetCapturedStderr());
+  EXPECT_THAT(GetCapturedStderr(), HasSubstr(expected_stderr));
   EXPECT_EQ(AidlError::PARSE_ERROR, error);
 }
 
@@ -1535,8 +1587,9 @@
 }
 
 TEST_P(AidlTest, UnderstandsNestedUnstructuredParcelables) {
-  io_delegate_.SetFileContents("p/Outer.aidl",
-                               "package p; parcelable Outer.Inner cpp_header \"baz/header\";");
+  io_delegate_.SetFileContents(
+      "p/Outer.aidl",
+      "package p; parcelable Outer.Inner cpp_header \"baz/header\" ndk_header \"ndk/baz/header\";");
   import_paths_.emplace("");
   const string input_path = "p/IFoo.aidl";
   const string input = "package p; import p.Outer; interface IFoo"
@@ -1553,8 +1606,9 @@
 }
 
 TEST_P(AidlTest, UnderstandsNestedUnstructuredParcelablesWithoutImports) {
-  io_delegate_.SetFileContents("p/Outer.aidl",
-                               "package p; parcelable Outer.Inner cpp_header \"baz/header\";");
+  io_delegate_.SetFileContents(
+      "p/Outer.aidl",
+      "package p; parcelable Outer.Inner cpp_header \"baz/header\" ndk_header \"ndk/baz/header\";");
   import_paths_.emplace("");
   const string input_path = "p/IFoo.aidl";
   const string input = "package p; interface IFoo { p.Outer.Inner get(); }";
@@ -1972,6 +2026,41 @@
   EXPECT_THAT(GetCapturedStderr(), HasSubstr("IFoo has nested types with cyclic references."));
 }
 
+TEST_F(AidlTest, RejectsCyclicNestedInterfaces) {
+  Options options = Options::From(
+      "aidl --lang cpp -I. -oout -hout "
+      "p/IFoo.aidl p/IBar.aidl p/IQux.aidl");
+  io_delegate_.SetFileContents("p/IFoo.aidl",
+                               "package p; import p.IBar; "
+                               "interface IFoo { IBar getBar(); }");
+  io_delegate_.SetFileContents("p/IBar.aidl",
+                               "package p; import p.IQux; "
+                               "interface IBar { IQux.Inner getQux(); }");
+  io_delegate_.SetFileContents("p/IQux.aidl",
+                               "package p; import p.IFoo; "
+                               "interface IQux { interface Inner { IFoo getFoo(); } }");
+  CaptureStderr();
+  EXPECT_FALSE(compile_aidl(options, io_delegate_));
+  EXPECT_THAT(GetCapturedStderr(),
+              HasSubstr("ERROR: p/IQux.aidl:1.43-53: has cyclic references to nested types."));
+}
+
+TEST_F(AidlTest, RejectsCyclicNestedInterfacesAndParcelables) {
+  Options options = Options::From(
+      "aidl --lang cpp -I. -oout -hout "
+      "p/IFoo.aidl p/Bar.aidl");
+  io_delegate_.SetFileContents("p/IFoo.aidl",
+                               "package p; import p.Bar; "
+                               "interface IFoo { interface Inner { Bar getBar(); } }");
+  io_delegate_.SetFileContents("p/Bar.aidl",
+                               "package p; import p.IFoo; "
+                               "parcelable Bar { IFoo.Inner foo; }");
+  CaptureStderr();
+  EXPECT_FALSE(compile_aidl(options, io_delegate_));
+  EXPECT_THAT(GetCapturedStderr(),
+              HasSubstr("ERROR: p/IFoo.aidl:1.42-52: has cyclic references to nested types."));
+}
+
 TEST_F(AidlTest, CppNameOf_GenericType) {
   const string input_path = "p/Wrapper.aidl";
   const string input = "package p; parcelable Wrapper<T> {}";
@@ -2049,11 +2138,7 @@
   // While the in tree build system always gives us an output file name,
   // other android tools take advantage of our ability to infer the intended
   // file name.  This test makes sure we handle this correctly.
-  vector<string> args = {
-    "aidl",
-    "-d dep/file/path",
-    "-o place/for/output",
-    "p/IFoo.aidl"};
+  vector<string> args = {"aidl", "-I .", "-d dep/file/path", "-o place/for/output", "p/IFoo.aidl"};
   Options options = Options::From(args);
   io_delegate_.SetFileContents(options.InputFiles().front(), "package p; interface IFoo {}");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
@@ -2066,12 +2151,8 @@
   // While the in tree build system always gives us an output file name,
   // other android tools take advantage of our ability to infer the intended
   // file name.  This test makes sure we handle this correctly.
-  vector<string> args = {
-    "aidl",
-    "-d dep/file/path",
-    "--ninja",
-    "-o place/for/output",
-    "p/IFoo.aidl"};
+  vector<string> args = {"aidl",       "-I .", "-d dep/file/path", "--ninja", "-o place/for/output",
+                         "p/IFoo.aidl"};
   Options options = Options::From(args);
   io_delegate_.SetFileContents(options.InputFiles().front(), "package p; interface IFoo {}");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
@@ -2086,11 +2167,7 @@
   // generated dependency files.  Those that reference .java output files are
   // for interfaces and those that do not are parcelables.  However, for both
   // parcelables and interfaces, we *must* generate a non-empty dependency file.
-  vector<string> args = {
-    "aidl",
-    "-o place/for/output",
-    "-d dep/file/path",
-    "p/Foo.aidl"};
+  vector<string> args = {"aidl", "-I .", "-o place/for/output", "-d dep/file/path", "p/Foo.aidl"};
   Options options = Options::From(args);
   io_delegate_.SetFileContents(options.InputFiles().front(), "package p; parcelable Foo;");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
@@ -2101,11 +2178,7 @@
 
 TEST_F(AidlTest, WritesDependencyFileForStructuredParcelable) {
   vector<string> args = {
-    "aidl",
-    "--structured",
-    "-o place/for/output",
-    "-d dep/file/path",
-    "p/Foo.aidl"};
+      "aidl", "-I .", "--structured", "-o place/for/output", "-d dep/file/path", "p/Foo.aidl"};
   Options options = Options::From(args);
   io_delegate_.SetFileContents(options.InputFiles().front(), "package p; parcelable Foo {int a;}");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
@@ -2115,11 +2188,7 @@
 }
 
 TEST_F(AidlTest, NoJavaOutputForParcelableDeclaration) {
- vector<string> args = {
-    "aidl",
-    "--lang=java",
-    "-o place/for/output",
-    "p/Foo.aidl"};
+  vector<string> args = {"aidl", "-I .", "--lang=java", "-o place/for/output", "p/Foo.aidl"};
   Options options = Options::From(args);
   io_delegate_.SetFileContents(options.InputFiles().front(), "package p; parcelable Foo;");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
@@ -2205,7 +2274,7 @@
 
 TEST_P(AidlTest, RejectNullableParcelableHolderField) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo { @nullable ParcelableHolder ext; }");
-  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl -I . --lang=" + to_string(GetLanguage()));
   const string expected_stderr = "ERROR: Foo.aidl:1.27-44: ParcelableHolder cannot be nullable.\n";
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
@@ -2214,7 +2283,7 @@
 
 TEST_P(AidlTest, ParcelablesWithConstants) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo { const int BIT = 0x1 << 3; }");
-  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl -I . --lang=" + to_string(GetLanguage()));
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
@@ -2222,7 +2291,7 @@
 
 TEST_P(AidlTest, UnionWithConstants) {
   io_delegate_.SetFileContents("Foo.aidl", "union Foo { const int BIT = 0x1 << 3; int n; }");
-  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl -I . --lang=" + to_string(GetLanguage()));
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
@@ -2234,7 +2303,7 @@
                                " @JavaPassthrough(annotation=\"@Foo\")\n"
                                " const @JavaPassthrough(annotation=\"@Bar\") int FOO = 0;\n"
                                "}");
-  Options options = Options::From("aidl IFoo.aidl --lang=java -o out");
+  Options options = Options::From("aidl IFoo.aidl -I . --lang=java -o out");
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
@@ -2333,7 +2402,7 @@
       "    int baz() = 10;\n"
       "}\n");
 
-  vector<string> args = {"aidl", "--dumpapi", "-o dump", "foo/bar/IFoo.aidl"};
+  vector<string> args = {"aidl", "-I . ", "--dumpapi", "-o dump", "foo/bar/IFoo.aidl"};
   Options options = Options::From(args);
   bool result = dump_api(options, io_delegate_);
   ASSERT_TRUE(result);
@@ -2361,7 +2430,7 @@
       "    int baz() = 10;\n"
       "}\n");
 
-  vector<string> args = {"aidl", "--dumpapi", "-o dump", "foo/bar/IFoo.aidl"};
+  vector<string> args = {"aidl", "-I . ", "--dumpapi", "-o dump", "foo/bar/IFoo.aidl"};
   Options options = Options::From(args);
   CaptureStderr();
   EXPECT_FALSE(dump_api(options, io_delegate_));
@@ -2376,7 +2445,7 @@
                                "    const @utf8InCpp String bar = \"bar\";\n"
                                "}\n");
 
-  vector<string> args = {"aidl", "--dumpapi", "-o dump", "foo/bar/IFoo.aidl"};
+  vector<string> args = {"aidl", "-I . ", "--dumpapi", "-o dump", "foo/bar/IFoo.aidl"};
   Options options = Options::From(args);
   CaptureStderr();
   EXPECT_TRUE(dump_api(options, io_delegate_));
@@ -2409,8 +2478,8 @@
   EXPECT_TRUE(io_delegate_.GetWrittenContents("dump/foo/bar/Enum.aidl", &actual));
   EXPECT_EQ(string(kPreamble).append("package foo.bar;\n"
                                      "enum Enum {\n"
-                                     "  FOO = 0,\n"
-                                     "  BAR = 1,\n"
+                                     "  FOO,\n"
+                                     "  BAR = (FOO + 1),\n"
                                      "}\n"),
             actual);
 }
@@ -2426,6 +2495,7 @@
                                "import foo.bar.Enum;\n"
                                "parcelable Foo {\n"
                                "    Enum e = Enum.FOO;\n"
+                               "    int n = Enum.FOO;\n"
                                "}\n");
 
   vector<string> args = {"aidl", "--dumpapi", "-I . ", "-o dump", "foo/bar/Foo.aidl"};
@@ -2438,6 +2508,7 @@
   EXPECT_EQ(string(kPreamble).append("package foo.bar;\n"
                                      "parcelable Foo {\n"
                                      "  foo.bar.Enum e = foo.bar.Enum.FOO;\n"
+                                     "  int n = foo.bar.Enum.FOO;\n"
                                      "}\n"),
             actual);
 }
@@ -2478,7 +2549,7 @@
       "'List<String,String>'\n";
   const string expected_map_stderr =
       "ERROR: p/IFoo.aidl:1.37-40: Map must have 0 or 2 type parameters, but got 'Map<String>'\n";
-  Options options = Options::From("aidl p/IFoo.aidl IFoo.java");
+  Options options = Options::From("aidl -I . p/IFoo.aidl IFoo.java");
   io_delegate_.SetFileContents(options.InputFiles().front(),
                                "package p; interface IFoo {"
                                "void foo(List<String, String> a);}");
@@ -2525,7 +2596,7 @@
 
 TEST_F(AidlTest, WrongGenericType) {
   const string expected_stderr = "ERROR: p/IFoo.aidl:1.28-34: String is not a generic type.\n";
-  Options options = Options::From("aidl p/IFoo.aidl IFoo.java");
+  Options options = Options::From("aidl -I . p/IFoo.aidl IFoo.java");
   io_delegate_.SetFileContents(options.InputFiles().front(),
                                "package p; interface IFoo {"
                                "String<String> foo(); }");
@@ -2573,9 +2644,9 @@
 }
 
 TEST_F(AidlTest, FailOnMultipleTypesInSingleFile) {
-  std::vector<std::string> rawOptions{"aidl --lang=java -o out foo/bar/Foo.aidl",
-                                      "aidl --lang=cpp -o out -h out/include foo/bar/Foo.aidl",
-                                      "aidl --lang=rust -o out foo/bar/Foo.aidl"};
+  std::vector<std::string> rawOptions{"aidl --lang=java -I . -o out foo/bar/Foo.aidl",
+                                      "aidl --lang=cpp -I . -o out -h out/include foo/bar/Foo.aidl",
+                                      "aidl --lang=rust -I . -o out foo/bar/Foo.aidl"};
   for (const auto& rawOption : rawOptions) {
     string expected_stderr =
         "ERROR: foo/bar/Foo.aidl:3.1-10: You must declare only one type per file.\n";
@@ -2646,7 +2717,8 @@
 }
 
 TEST_F(AidlTest, MultipleInputFilesCpp) {
-  Options options = Options::From("aidl --lang=cpp -o out -h out/include "
+  Options options = Options::From(
+      "aidl --lang=cpp -I . -o out -h out/include "
       "-I . foo/bar/IFoo.aidl foo/bar/Data.aidl");
 
   io_delegate_.SetFileContents(options.InputFiles().at(0),
@@ -2700,7 +2772,7 @@
 TEST_F(AidlTest, ConflictWithMetaTransactionGetVersion) {
   const string expected_stderr =
       "ERROR: p/IFoo.aidl:1.31-51:  method getInterfaceVersion() is reserved for internal use.\n";
-  Options options = Options::From("aidl --lang=java -o place/for/output p/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o place/for/output p/IFoo.aidl");
   // int getInterfaceVersion() is one of the meta transactions
   io_delegate_.SetFileContents(options.InputFiles().front(),
                                "package p; interface IFoo {"
@@ -2715,7 +2787,7 @@
   // prevented because return type is not part of a method signature
   const string expected_stderr =
       "ERROR: p/IFoo.aidl:1.35-55:  method getInterfaceVersion() is reserved for internal use.\n";
-  Options options = Options::From("aidl --lang=java -o place/for/output p/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o place/for/output p/IFoo.aidl");
   io_delegate_.SetFileContents(options.InputFiles().front(),
                                "package p; interface IFoo {"
                                "boolean getInterfaceVersion(); }");
@@ -2728,7 +2800,7 @@
   // this is another reserved name
   const string expected_stderr =
       "ERROR: p/IFoo.aidl:1.34-53:  method getTransactionName(int) is reserved for internal use.\n";
-  Options options = Options::From("aidl --lang=java -o place/for/output p/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o place/for/output p/IFoo.aidl");
   io_delegate_.SetFileContents(options.InputFiles().front(),
                                "package p; interface IFoo {"
                                "String getTransactionName(int code); }");
@@ -3470,6 +3542,24 @@
   EXPECT_EQ(expected_stderr, GetCapturedStderr());
 }
 
+TEST_F(AidlTestIncompatibleChanges, ChangedFixedSizeArraySize) {
+  const string expected_stderr =
+      "ERROR: new/p/Data.aidl:1.28-33: Type changed: int[8] to int[9].\n";
+  io_delegate_.SetFileContents("old/p/Data.aidl",
+                               "package p;"
+                               "parcelable Data {"
+                               "  int[8] bar;"
+                               "}");
+  io_delegate_.SetFileContents("new/p/Data.aidl",
+                               "package p;"
+                               "parcelable Data {"
+                               "  int[9] bar;"
+                               "}");
+  CaptureStderr();
+  EXPECT_FALSE(::android::aidl::check_api(options_, io_delegate_));
+  EXPECT_EQ(expected_stderr, GetCapturedStderr());
+}
+
 TEST_F(AidlTestIncompatibleChanges, ChangedAnnatationParams) {
   const string expected_stderr =
       "ERROR: new/p/Foo.aidl:1.55-59: Changed annotations: @JavaPassthrough(annotation=\"Alice\") "
@@ -3726,7 +3816,7 @@
       "dir1/q/IBar.aidl\n"
       "dir2/q/IBar.aidl\n"
       "ERROR: p/IFoo.aidl: Couldn't find import for class q.IBar\n";
-  Options options = Options::From("aidl --lang=java -o out -I dir1 -I dir2 p/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -o out -I . -I dir1 -I dir2 p/IFoo.aidl");
   io_delegate_.SetFileContents("p/IFoo.aidl", "package p; import q.IBar; interface IFoo{}");
   io_delegate_.SetFileContents("dir1/q/IBar.aidl", "package q; interface IBar{}");
   io_delegate_.SetFileContents("dir2/q/IBar.aidl", "package q; interface IBar{}");
@@ -3754,7 +3844,7 @@
 
 TEST_P(AidlTest, ParcelFileDescriptorIsBuiltinType) {
   Options options =
-      Options::From("aidl --lang=" + to_string(GetLanguage()) + " -h out -o out p/IFoo.aidl");
+      Options::From("aidl -I . --lang=" + to_string(GetLanguage()) + " -h out -o out p/IFoo.aidl");
 
   // use without import
   io_delegate_.SetFileContents("p/IFoo.aidl",
@@ -3810,7 +3900,7 @@
 }
 
 TEST_F(AidlTest, ManualIds) {
-  Options options = Options::From("aidl --lang=java -o out IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out IFoo.aidl");
   io_delegate_.SetFileContents("IFoo.aidl",
                                "interface IFoo {\n"
                                "  void foo() = 0;\n"
@@ -3820,7 +3910,7 @@
 }
 
 TEST_F(AidlTest, ManualIdsWithMetaTransactions) {
-  Options options = Options::From("aidl --lang=java --version 10 -o out IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . --version 10 -o out IFoo.aidl");
   io_delegate_.SetFileContents("IFoo.aidl",
                                "interface IFoo {\n"
                                "  void foo() = 0;\n"
@@ -3832,7 +3922,7 @@
 TEST_F(AidlTest, FailOnDuplicatedIds) {
   const string expected_stderr =
       "ERROR: IFoo.aidl:3.7-11: Found duplicate method id (3) for method bar\n";
-  Options options = Options::From("aidl --lang=java --version 10 -o out IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . --version 10 -o out IFoo.aidl");
   io_delegate_.SetFileContents("IFoo.aidl",
                                "interface IFoo {\n"
                                "  void foo() = 3;\n"
@@ -3848,7 +3938,7 @@
   const string expected_stderr =
       "ERROR: IFoo.aidl:3.7-11: Found out of bounds id (16777115) for method bar. "
       "Value for id must be between 0 and 16777114 inclusive.\n";
-  Options options = Options::From("aidl --lang=java --version 10 -o out IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . --version 10 -o out IFoo.aidl");
   io_delegate_.SetFileContents("IFoo.aidl",
                                "interface IFoo {\n"
                                "  void foo() = 3;\n"
@@ -3862,7 +3952,7 @@
 TEST_F(AidlTest, FailOnPartiallyAssignedIds) {
   const string expected_stderr =
       "ERROR: IFoo.aidl:3.7-11: You must either assign id's to all methods or to none of them.\n";
-  Options options = Options::From("aidl --lang=java --version 10 -o out IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . --version 10 -o out IFoo.aidl");
   io_delegate_.SetFileContents("IFoo.aidl",
                                "interface IFoo {\n"
                                "  void foo() = 3;\n"
@@ -3897,7 +3987,7 @@
 }
 
 TEST_F(AidlTest, AllowDuplicatedImportPaths) {
-  Options options = Options::From("aidl --lang=java -I dir -I dir IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -I dir -I dir IFoo.aidl");
   io_delegate_.SetFileContents("dir/IBar.aidl", "interface IBar{}");
   io_delegate_.SetFileContents("IFoo.aidl", "import IBar; interface IFoo{}");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
@@ -3910,7 +4000,7 @@
       "dir2/IBar.aidl\n"
       "ERROR: IFoo.aidl: Couldn't find import for class IBar\n";
 
-  Options options = Options::From("aidl --lang=java -I dir -I dir2 IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -I dir -I dir2 IFoo.aidl");
   io_delegate_.SetFileContents("dir/IBar.aidl", "interface IBar{}");
   io_delegate_.SetFileContents("dir2/IBar.aidl", "interface IBar{}");
   io_delegate_.SetFileContents("IFoo.aidl", "import IBar; interface IFoo{}");
@@ -3997,7 +4087,7 @@
         int a;
     })");
 
-  Options rust_options = Options::From("aidl --lang=rust -o out a/Foo.aidl");
+  Options rust_options = Options::From("aidl -I . --lang=rust -o out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(rust_options, io_delegate_));
 
   string rust_out;
@@ -4005,13 +4095,13 @@
   EXPECT_THAT(rust_out, testing::HasSubstr("#[derive(Debug, Clone)]"));
 
   // Other backends shouldn't be bothered
-  Options cpp_options = Options::From("aidl --lang=cpp -o out -h out a/Foo.aidl");
+  Options cpp_options = Options::From("aidl --lang=cpp -I . -o out -h out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(cpp_options, io_delegate_));
 
-  Options ndk_options = Options::From("aidl --lang=ndk -o out -h out a/Foo.aidl");
+  Options ndk_options = Options::From("aidl --lang=ndk -I . -o out -h out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(ndk_options, io_delegate_));
 
-  Options java_options = Options::From("aidl --lang=java -o out a/Foo.aidl");
+  Options java_options = Options::From("aidl --lang=java -I . -o out a/Foo.aidl");
   EXPECT_TRUE(compile_aidl(java_options, io_delegate_));
 }
 
@@ -4036,7 +4126,7 @@
         void Protected();
     })");
 
-  Options options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
   EXPECT_THAT(GetCapturedStderr(), HasSubstr("Unable to parse @EnforcePermission annotation"));
@@ -4049,7 +4139,7 @@
         void Protected();
     })");
 
-  Options options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
 }
 
@@ -4060,7 +4150,7 @@
         void Protected();
     })");
 
-  Options options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
 }
 
@@ -4071,7 +4161,7 @@
         void Protected();
     })");
 
-  Options options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
 }
 
@@ -4083,7 +4173,7 @@
         void Protected();
     })");
 
-  Options options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
   EXPECT_THAT(GetCapturedStderr(), HasSubstr("The interface IFoo uses a permission annotation but "
@@ -4098,7 +4188,7 @@
         void Protected();
     })");
 
-  Options options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
   EXPECT_THAT(GetCapturedStderr(), HasSubstr("The interface IFoo uses a permission annotation but "
@@ -4113,7 +4203,7 @@
         void Protected();
     })");
 
-  Options options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
   EXPECT_THAT(GetCapturedStderr(), HasSubstr("The interface IFoo uses a permission annotation but "
@@ -4128,7 +4218,7 @@
         void Protected();
     })");
 
-  Options options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
   EXPECT_THAT(GetCapturedStderr(), HasSubstr("The interface IFoo uses a permission annotation but "
@@ -4143,7 +4233,7 @@
         void Protected();
     })");
 
-  Options options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
   EXPECT_THAT(GetCapturedStderr(), HasSubstr("The interface IFoo uses a permission annotation but "
@@ -4156,7 +4246,7 @@
     interface IFoo {
     })");
 
-  Options options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options options = Options::From("aidl --lang=java -I . -o out a/IFoo.aidl");
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
   EXPECT_EQ(GetCapturedStderr(), "");
@@ -4181,22 +4271,24 @@
 
 TEST_F(AidlOutputPathTest, OutDirWithNoOutputFile) {
   // <out_dir> / <package_name> / <type_name>.java
-  Test(Options::From("aidl -o out sub/dir/foo/bar/IFoo.aidl"), "out/foo/bar/IFoo.java");
+  Test(Options::From("aidl -I sub/dir -o out sub/dir/foo/bar/IFoo.aidl"), "out/foo/bar/IFoo.java");
 }
 
 TEST_F(AidlOutputPathTest, OutDirWithOutputFile) {
   // when output file is explicitly set, it is always respected. -o option is
   // ignored.
-  Test(Options::From("aidl -o out sub/dir/foo/bar/IFoo.aidl output/IFoo.java"), "output/IFoo.java");
+  Test(Options::From("aidl -I sub/dir -o out sub/dir/foo/bar/IFoo.aidl output/IFoo.java"),
+       "output/IFoo.java");
 }
 
 TEST_F(AidlOutputPathTest, NoOutDirWithOutputFile) {
-  Test(Options::From("aidl -o out sub/dir/foo/bar/IFoo.aidl output/IFoo.java"), "output/IFoo.java");
+  Test(Options::From("aidl -I sub/dir -o out sub/dir/foo/bar/IFoo.aidl output/IFoo.java"),
+       "output/IFoo.java");
 }
 
 TEST_F(AidlOutputPathTest, NoOutDirWithNoOutputFile) {
   // output is the same as the input file except for the suffix
-  Test(Options::From("aidl sub/dir/foo/bar/IFoo.aidl"), "sub/dir/foo/bar/IFoo.java");
+  Test(Options::From("aidl -I sub/dir sub/dir/foo/bar/IFoo.aidl"), "sub/dir/foo/bar/IFoo.java");
 }
 
 TEST_P(AidlTest, FailOnOutOfBoundsInt32MaxConstInt) {
@@ -4398,7 +4490,7 @@
 
 TEST_F(AidlTest, ImmutableParcelableFieldNameRestriction) {
   io_delegate_.SetFileContents("Foo.aidl", "@JavaOnlyImmutable parcelable Foo { int a; int A; }");
-  Options options = Options::From("aidl --lang=java Foo.aidl");
+  Options options = Options::From("aidl -I . --lang=java Foo.aidl");
   const string expected_stderr =
       "ERROR: Foo.aidl:1.47-49: 'Foo' has duplicate field name 'A' after capitalizing the first "
       "letter\n";
@@ -4444,7 +4536,7 @@
 
 TEST_P(AidlTest, GenericStructuredParcelable) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo<T, U> { int a; int A; }");
-  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
+  Options options = Options::From("aidl -I . Foo.aidl --lang=" + to_string(GetLanguage()));
   const string expected_stderr = "";
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
@@ -4454,8 +4546,8 @@
 TEST_F(AidlTest, GenericStructuredParcelableWithStringConstants_Cpp) {
   io_delegate_.SetFileContents("Foo.aidl",
                                "parcelable Foo<T, U> { int a; const String s = \"\"; }");
-  Options options =
-      Options::From("aidl Foo.aidl --lang=" + to_string(Options::Language::CPP) + " -o out -h out");
+  Options options = Options::From("aidl Foo.aidl -I . --lang=" + to_string(Options::Language::CPP) +
+                                  " -o out -h out");
   const string expected_stderr = "";
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
@@ -4473,8 +4565,8 @@
 TEST_F(AidlTest, GenericStructuredParcelableWithStringConstants_Ndk) {
   io_delegate_.SetFileContents("Foo.aidl",
                                "parcelable Foo<T, U> { int a; const String s = \"\"; }");
-  Options options =
-      Options::From("aidl Foo.aidl --lang=" + to_string(Options::Language::NDK) + " -o out -h out");
+  Options options = Options::From("aidl Foo.aidl -I . --lang=" + to_string(Options::Language::NDK) +
+                                  " -o out -h out");
   const string expected_stderr = "";
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
@@ -4712,7 +4804,7 @@
 
 TEST_P(AidlTest, RejectGenericStructuredParcelabelRepeatedParam) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo<T,T> { int a; int A; }");
-  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl -I . --lang=" + to_string(GetLanguage()));
   const string expected_stderr =
       "ERROR: Foo.aidl:1.11-15: Every type parameter should be unique.\n";
   CaptureStderr();
@@ -4722,7 +4814,7 @@
 
 TEST_P(AidlTest, RejectGenericStructuredParcelableField) {
   io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo<T,T> { T a; int A; }");
-  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl -I . --lang=" + to_string(GetLanguage()));
   const string expected_stderr = "ERROR: Foo.aidl:1.22-24: Failed to resolve 'T'\n";
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
@@ -4731,7 +4823,7 @@
 
 TEST_P(AidlTest, LongCommentWithinConstExpression) {
   io_delegate_.SetFileContents("Foo.aidl", "enum Foo { FOO = (1 << 1) /* comment */ | 0x0 }");
-  Options options = Options::From("aidl Foo.aidl --lang=" + to_string(GetLanguage()));
+  Options options = Options::From("aidl Foo.aidl -I . --lang=" + to_string(GetLanguage()));
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
   EXPECT_EQ("", GetCapturedStderr());
@@ -4739,7 +4831,7 @@
 
 TEST_F(AidlTest, RejectUntypdeListAndMapInUnion) {
   io_delegate_.SetFileContents("a/Foo.aidl", "package a; union Foo { List l; Map m; }");
-  Options options = Options::From("aidl a/Foo.aidl --lang=java -o out");
+  Options options = Options::From("aidl a/Foo.aidl -I . --lang=java -o out");
   std::string expectedErr =
       "ERROR: a/Foo.aidl:1.28-30: "
       "Encountered an untyped List or Map. The use of untyped List/Map is "
@@ -4756,7 +4848,7 @@
 
 TEST_F(AidlTest, RejectUntypdeListAndMapInUnstructuredParcelable) {
   io_delegate_.SetFileContents("a/Foo.aidl", "package a; parcelable Foo { List l; Map m; }");
-  Options options = Options::From("aidl a/Foo.aidl --lang=java -o out");
+  Options options = Options::From("aidl a/Foo.aidl -I . --lang=java -o out");
   std::string expectedErr =
       "ERROR: a/Foo.aidl:1.33-35: "
       "Encountered an untyped List or Map. The use of untyped List/Map is "
@@ -4867,8 +4959,8 @@
   EXPECT_THAT(code, testing::HasSubstr(R"(
   fn default() -> Self {
     Self {
-      n: 42,
-      e: crate::mangled::_1_p_4_Enum::BAR,
+      r#n: 42,
+      r#e: crate::mangled::_1_p_4_Enum::BAR,
     }
   })"));
 }
@@ -4891,9 +4983,10 @@
   EXPECT_EQ("int e = 3", fields[0]->ToString());
 }
 
-TEST_P(AidlTest, EnumeratorIsConstantValue_CanDefineOtherEnumerator) {
+TEST_F(AidlTest, EnumeratorIsConstantValue_CanDefineOtherEnumerator) {
   CaptureStderr();
   const AidlDefinedType* type = Parse("a/p/Foo.aidl", R"(
+package a.p;
 @Backing(type="int")
 enum Foo {
       STANDARD_SHIFT = 16,
@@ -4901,14 +4994,14 @@
       STANDARD_BT601_625 = 2 << STANDARD_SHIFT,
 }
 )",
-                                      typenames_, GetLanguage());
+                                      typenames_, Options::Language::JAVA);
   auto err = GetCapturedStderr();
   EXPECT_EQ("", err);
-  EXPECT_TRUE(type);
+  ASSERT_NE(type, nullptr);
   const auto& enum_type = type->AsEnumDeclaration();
   string code;
   auto writer = CodeWriter::ForString(&code);
-  DumpVisitor visitor(*writer);
+  DumpVisitor visitor(*writer, /*inline_constants=*/true);
   visitor.Visit(*enum_type);
   writer->Close();
   EXPECT_EQ(R"--(@Backing(type="int")
@@ -4969,8 +5062,8 @@
                                "  @JavaPassthrough(annotation=ANNOTATION) void foo();\n"
                                "}");
   CaptureStderr();
-  auto options =
-      Options::From("aidl --lang " + to_string(GetLanguage()) + " -o out -h out a/p/IFoo.aidl");
+  auto options = Options::From("aidl -I a --lang " + to_string(GetLanguage()) +
+                               " -o out -h out a/p/IFoo.aidl");
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
   auto err = GetCapturedStderr();
   EXPECT_EQ(
@@ -5051,7 +5144,7 @@
 TEST_P(AidlTest, UnknownConstReference) {
   io_delegate_.SetFileContents("Foo.aidl", " parcelable Foo { int field = UNKNOWN_REF; }");
   auto options =
-      Options::From("aidl --lang " + to_string(GetLanguage()) + " -o out -h out Foo.aidl");
+      Options::From("aidl -I . --lang " + to_string(GetLanguage()) + " -o out -h out Foo.aidl");
   const string err =
       "ERROR: Foo.aidl:1.30-42: Can't find UNKNOWN_REF in Foo\n"
       "ERROR: Foo.aidl:1.30-42: Unknown reference 'UNKNOWN_REF'\n";
@@ -5070,22 +5163,23 @@
 }
 
 TEST_P(AidlTest, WarningInterfaceName) {
-  io_delegate_.SetFileContents("p/Foo.aidl", "interface Foo {}");
-  auto options = Options::From("aidl --lang " + to_string(GetLanguage()) +
+  io_delegate_.SetFileContents("p/Foo.aidl", "package p; interface Foo {}");
+  auto options = Options::From("aidl -I . --lang " + to_string(GetLanguage()) +
                                " -Winterface-name -o out -h out p/Foo.aidl");
   CaptureStderr();
   EXPECT_TRUE(compile_aidl(options, io_delegate_));
-  EXPECT_EQ("WARNING: p/Foo.aidl:1.1-10: Interface names should start with I. [-Winterface-name]\n",
-            GetCapturedStderr());
+  EXPECT_EQ(
+      "WARNING: p/Foo.aidl:1.11-21: Interface names should start with I. [-Winterface-name]\n",
+      GetCapturedStderr());
 }
 
 TEST_P(AidlTest, ErrorInterfaceName) {
-  io_delegate_.SetFileContents("p/Foo.aidl", "interface Foo {}");
-  auto options = Options::From("aidl --lang " + to_string(GetLanguage()) +
+  io_delegate_.SetFileContents("p/Foo.aidl", "package p; interface Foo {}");
+  auto options = Options::From("aidl -I . --lang " + to_string(GetLanguage()) +
                                " -Winterface-name -Werror -o out -h out p/Foo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
-  EXPECT_EQ("ERROR: p/Foo.aidl:1.1-10: Interface names should start with I. [-Winterface-name]\n",
+  EXPECT_EQ("ERROR: p/Foo.aidl:1.11-21: Interface names should start with I. [-Winterface-name]\n",
             GetCapturedStderr());
 }
 
@@ -5093,10 +5187,9 @@
   const std::string input_file = "base/p/q/IFoo.aidl";
   const std::string header_dir = "out/";
   const std::string output_file = "out/base/p/q/IFoo.cpp";
-  const std::string package = "p.q";  // not base.p.q
-  io_delegate_.SetFileContents(input_file, "package " + package + "; interface IFoo {}");
+  io_delegate_.SetFileContents(input_file, "package p.q; interface IFoo {}");
 
-  auto options = Options::From({"aidl-cpp", input_file, header_dir, output_file});
+  auto options = Options::From({"aidl-cpp", "-I base", input_file, header_dir, output_file});
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
   EXPECT_THAT(
@@ -5145,15 +5238,15 @@
       "interface IFoo {\n"
       "  void foo(in @SuppressWarnings(value={\"inout-parameter\"}) int x);\n"
       "}");
-  auto options = Options::From("aidl --lang=java IFoo.aidl");
+  auto options = Options::From("aidl -I . --lang=java IFoo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
   EXPECT_THAT(GetCapturedStderr(), HasSubstr("@SuppressWarnings is not available"));
 }
 
 TEST_F(AidlTest, VoidCantBeUsedInMethodParameterType) {
-  io_delegate_.SetFileContents("p/IFoo.aidl", "interface IFoo{ void j(void n);}");
-  auto options = Options::From("aidl --lang=java -o out p/IFoo.aidl");
+  io_delegate_.SetFileContents("p/IFoo.aidl", "package p; interface IFoo{ void j(void n);}");
+  auto options = Options::From("aidl -I . --lang=java -o out p/IFoo.aidl");
   CaptureStderr();
   EXPECT_FALSE(compile_aidl(options, io_delegate_));
   EXPECT_THAT(GetCapturedStderr(), HasSubstr("'void' is an invalid type for the parameter 'n'"));
@@ -5161,21 +5254,23 @@
 
 TEST_F(AidlTest, InterfaceVectorIsAvailableAfterTiramisu) {
   io_delegate_.SetFileContents("p/IFoo.aidl",
+                               "package p;\n"
                                "interface IFoo{\n"
                                "  void foo(in IFoo[] n);\n"
                                "  void bar(in List<IFoo> n);\n"
                                "}");
   CaptureStderr();
-  EXPECT_FALSE(compile_aidl(
-      Options::From("aidl --lang=java --min_sdk_version 30 -o out p/IFoo.aidl"), io_delegate_));
+  EXPECT_FALSE(
+      compile_aidl(Options::From("aidl -I . --lang=java --min_sdk_version 30 -o out p/IFoo.aidl"),
+                   io_delegate_));
   auto captured_stderr = GetCapturedStderr();
   EXPECT_THAT(captured_stderr, HasSubstr("Array of interfaces is available since"));
   EXPECT_THAT(captured_stderr, HasSubstr("List of interfaces is available since"));
 
   CaptureStderr();
-  EXPECT_TRUE(
-      compile_aidl(Options::From("aidl --lang=java --min_sdk_version Tiramisu -o out p/IFoo.aidl"),
-                   io_delegate_));
+  EXPECT_TRUE(compile_aidl(
+      Options::From("aidl -I . --lang=java --min_sdk_version Tiramisu -o out p/IFoo.aidl"),
+      io_delegate_));
   EXPECT_EQ(GetCapturedStderr(), "");
 }
 
diff --git a/analyzer/Analyzer.cpp b/analyzer/Analyzer.cpp
new file mode 100644
index 0000000..1b48d2c
--- /dev/null
+++ b/analyzer/Analyzer.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "include/Analyzer.h"
+
+using std::unique_ptr;
+using std::unordered_map;
+
+namespace android {
+namespace aidl {
+
+using analyzeFn = android::status_t (*)(uint32_t _aidl_code, const android::Parcel& _aidl_data,
+                                        const android::Parcel& _aidl_reply);
+
+Analyzer::Analyzer(const std::string& package, const std::string& interface, analyzeFn function)
+    : mPackageName(package), mInterfaceName(interface), mAnalyzeFunction(function) {}
+
+const std::string& Analyzer::getPackageName() const {
+  return mPackageName;
+}
+
+const std::string& Analyzer::getInterfaceName() const {
+  return mInterfaceName;
+}
+
+const analyzeFn& Analyzer::getAnalyzeFunction() const {
+  return mAnalyzeFunction;
+}
+
+unordered_map<std::string, unique_ptr<Analyzer>>& Analyzer::getAnalyzers() {
+  static unordered_map<std::string, unique_ptr<Analyzer>> gAnalyzers;
+  return gAnalyzers;
+}
+
+void Analyzer::installAnalyzer(std::unique_ptr<Analyzer> install) {
+  getAnalyzers().insert_or_assign(install->getPackageName(), std::move(install));
+}
+
+}  // namespace aidl
+}  // namespace android
diff --git a/analyzer/analyzerMain.cpp b/analyzer/analyzerMain.cpp
new file mode 100644
index 0000000..515df5e
--- /dev/null
+++ b/analyzer/analyzerMain.cpp
@@ -0,0 +1,410 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <binder/BpBinder.h>
+#include <binder/IServiceManager.h>
+#include <binder/Parcel.h>
+#include <binder/RecordedTransaction.h>
+#include <signal.h>
+#include <fstream>
+#include <sstream>
+#include "include/Analyzer.h"
+
+using android::IBinder;
+using android::NO_ERROR;
+using android::sp;
+using android::status_t;
+using android::String16;
+using android::aidl::Analyzer;
+using android::binder::debug::RecordedTransaction;
+using std::string;
+
+namespace {
+
+static volatile size_t gCtrlCCount = 0;
+static constexpr size_t kCtrlCLimit = 3;
+static const char kStandardRecordingPath[] = "/data/local/recordings/";
+
+status_t startRecording(const sp<IBinder>& binder, const string& filePath) {
+  if (auto mkdir_return = mkdir(kStandardRecordingPath, 0666);
+      mkdir_return != 0 && errno != EEXIST) {
+    std::cout << "Failed to create recordings directory.\n";
+    return android::NO_ERROR;
+  }
+
+  int openFlags = O_WRONLY | O_CREAT | O_APPEND | O_CLOEXEC | O_BINARY;
+  android::base::unique_fd fd(open(filePath.c_str(), openFlags, 0666));
+  if (fd == -1) {
+    std::cout << "Failed to open file for recording with error: " << strerror(errno) << '\n';
+    return android::BAD_VALUE;
+  }
+
+  // TODO (b/245804633): this still requires setenforce 0, but nothing above does
+  if (status_t err = binder->remoteBinder()->startRecordingBinder(fd); err != android::NO_ERROR) {
+    auto checkSE = std::ifstream("/sys/fs/selinux/enforce");
+    bool recommendSetenforce = false;
+    if ((checkSE.rdstate() & std::ifstream::failbit) != 0) {
+      std::cout << "Failed to determine selinux state.";
+      recommendSetenforce = true;
+    } else {
+      char seState = checkSE.get();
+      if (checkSE.good()) {
+        if (seState == '1') {
+          std::cout << "SELinux must be permissive.";
+          recommendSetenforce = true;
+        } else if (seState == '0') {
+          std::cout << "SELinux is permissive. Failing for some other reason.\n";
+        }
+      } else {
+        std::cout << "Failed to determine SELinux state.";
+        recommendSetenforce = true;
+      }
+    }
+    if (recommendSetenforce) {
+      std::cout << " Try running:\n\n  setenforce 0\n\n";
+    }
+    std::cout << "Failed to start recording with error: " << android::statusToString(err) << '\n';
+    return err;
+  } else {
+    std::cout << "Recording started successfully.\n";
+    return android::NO_ERROR;
+  }
+}
+
+status_t stopRecording(const sp<IBinder>& binder) {
+  if (status_t err = binder->remoteBinder()->stopRecordingBinder(); err != NO_ERROR) {
+    std::cout << "Failed to stop recording with error: " << err << '\n';
+    return err;
+  } else {
+    std::cout << "Recording stopped successfully.\n";
+    return NO_ERROR;
+  }
+}
+
+void printTransaction(const RecordedTransaction& transaction) {
+  auto& analyzers = Analyzer::getAnalyzers();
+
+  auto analyzer = analyzers.find(transaction.getInterfaceName());
+  if (analyzer != analyzers.end()) {
+    (analyzer->second)
+        ->getAnalyzeFunction()(transaction.getCode(), transaction.getDataParcel(),
+                               transaction.getReplyParcel());
+  } else {
+    std::cout << "No analyzer:";
+    std::cout << "  interface: " << transaction.getInterfaceName() << "\n";
+    std::cout << "  code: " << transaction.getCode() << "\n";
+    std::cout << "  data: " << transaction.getDataParcel().dataSize() << " bytes\n";
+    std::cout << "  reply: " << transaction.getReplyParcel().dataSize() << " bytes\n";
+  }
+  std::cout << "  status: " << transaction.getReturnedStatus() << "\n\n";
+}
+
+status_t inspectRecording(const string& path) {
+  auto& analyzers = Analyzer::getAnalyzers();
+
+  android::base::unique_fd fd(open(path.c_str(), O_RDONLY));
+  if (fd.get() == -1) {
+    std::cout << "Failed to open recording file with error: " << strerror(errno) << '\n';
+    return android::BAD_VALUE;
+  }
+
+  int i = 1;
+  while (auto transaction = RecordedTransaction::fromFile(fd)) {
+    std::cout << "Transaction " << i << ":\n";
+    printTransaction(transaction.value());
+    i++;
+  }
+  return NO_ERROR;
+}
+
+void incrementCtrlCCount(int signum) {
+  gCtrlCCount++;
+  if (gCtrlCCount > kCtrlCLimit) {
+    std::cout
+        << "Ctrl+C multiple times, but could not quit application. If recording still running, you "
+           "might stop it manually.\n";
+    exit(signum);
+  }
+}
+
+status_t listenToFile(const string& filePath) {
+  android::base::unique_fd listenFd(open(filePath.c_str(), O_RDONLY));
+  if (listenFd == -1) {
+    std::cout << "Failed to open listening file with error: " << strerror(errno) << '\n';
+    return android::BAD_VALUE;
+  }
+
+  auto& analyzers = Analyzer::getAnalyzers();
+
+  signal(SIGINT, incrementCtrlCCount);
+  std::cout << "Starting to listen:\n";
+  int i = 1;
+  while (gCtrlCCount == 0) {
+    auto transaction = RecordedTransaction::fromFile(listenFd);
+    if (!transaction) {
+      sleep(1);
+      continue;
+    }
+    std::cout << "Transaction " << i << ":\n";
+    printTransaction(transaction.value());
+    i++;
+  }
+  return NO_ERROR;
+}
+
+status_t replayFile(const sp<IBinder>& binder, const string& path) {
+  auto& analyzers = Analyzer::getAnalyzers();
+
+  android::base::unique_fd fd(open(path.c_str(), O_RDONLY));
+  if (fd.get() == -1) {
+    std::cout << "Failed to open recording file with error: " << strerror(errno) << '\n';
+    return android::BAD_VALUE;
+  }
+
+  int failureCount = 0;
+  int i = 1;
+  while (auto transaction = RecordedTransaction::fromFile(fd)) {
+    std::cout << "Replaying Transaction " << i << ":\n";
+    printTransaction(transaction.value());
+
+    android::Parcel send, reply;
+    send.setData(transaction->getDataParcel().data(), transaction->getDataParcel().dataSize());
+    android::status_t status = binder->remoteBinder()->transact(transaction->getCode(), send,
+                                                                &reply, transaction->getFlags());
+    if (status != transaction->getReturnedStatus()) {
+      std::cout << "Failure: Expected status " << transaction->getReturnedStatus()
+                << " but received status " << status << "\n\n";
+      failureCount++;
+    } else {
+      std::cout << "Transaction replayed correctly."
+                << "\n\n";
+    }
+    i++;
+  }
+  std::cout << i << " transactions replayed.\n";
+  if (failureCount > 0) {
+    std::cout << failureCount << " transactions had unexpected status. See logs for details.\n";
+    return android::UNKNOWN_ERROR;
+  } else {
+    return NO_ERROR;
+  }
+}
+
+status_t listAvailableInterfaces(int, char**) {
+  auto& analyzers = Analyzer::getAnalyzers();
+  std::cout << "Available Interfaces (" << analyzers.size() << "):\n";
+  for (auto a = analyzers.begin(); a != analyzers.end(); a++) {
+    std::cout << "  " << a->second->getInterfaceName() << '\n';
+  }
+  return NO_ERROR;
+}
+
+struct AnalyzerCommand {
+  std::function<status_t(int, char*[])> command;
+  std::string overview;
+  std::string compactArguments;
+  std::string helpDetail;
+};
+
+status_t helpCommandEntryPoint(int argc, char* argv[]);
+
+const AnalyzerCommand helpCommand = {helpCommandEntryPoint, "Show help information.", "<command>",
+                                     ""};
+
+const AnalyzerCommand listCommand = {listAvailableInterfaces,
+                                     "Prints a list of available interfaces.", "", ""};
+
+status_t startCommandEntryPoint(int argc, char* argv[]) {
+  if (argc != 3) {
+    helpCommandEntryPoint(argc, argv);
+    return android::BAD_VALUE;
+  }
+
+  sp<IBinder> binder = android::defaultServiceManager()->checkService(String16(argv[2]));
+
+  string filename = argv[2];
+  std::replace(filename.begin(), filename.end(), '/', '.');
+  auto filePath = kStandardRecordingPath + filename;
+
+  return startRecording(binder, filePath);
+}
+
+const AnalyzerCommand startCommand = {
+    startCommandEntryPoint, "Start recording Binder transactions from a given service.",
+    "<service>", "  <service>\tService to record. See 'dumpsys -l'"};
+
+status_t stopCommandEntryPoint(int argc, char* argv[]) {
+  if (argc != 3) {
+    helpCommandEntryPoint(argc, argv);
+    return android::BAD_VALUE;
+  }
+
+  sp<IBinder> binder = android::defaultServiceManager()->checkService(String16(argv[2]));
+  return stopRecording(binder);
+}
+
+const AnalyzerCommand stopCommand = {
+    stopCommandEntryPoint,
+    "Stops recording Binder transactions from a given process. (See 'start')", "<service>",
+    "  <service>\tService to stop recording; <service> argument to previous 'start' command."};
+
+status_t inspectCommandEntryPoint(int argc, char* argv[]) {
+  if (argc != 3) {
+    helpCommandEntryPoint(argc, argv);
+    return android::BAD_VALUE;
+  }
+  std::string path = kStandardRecordingPath + string(argv[2]);
+
+  return inspectRecording(path);
+}
+
+const AnalyzerCommand inspectCommand = {
+    inspectCommandEntryPoint,
+    "Writes the binder transactions in <file-name> to stdout in a human-friendly format.",
+    "<file-name>",
+    "  <file-name>\tA recording in /data/local/recordings/, and the name of the service"};
+
+status_t listenCommandEntryPoint(int argc, char* argv[]) {
+  if (argc != 3) {
+    helpCommandEntryPoint(argc, argv);
+    return android::BAD_VALUE;
+  }
+
+  sp<IBinder> binder = android::defaultServiceManager()->checkService(String16(argv[2]));
+
+  string filename = argv[2];
+  std::replace(filename.begin(), filename.end(), '/', '.');
+  auto filePath = kStandardRecordingPath + filename;
+
+  if (status_t startErr = startRecording(binder, filePath); startErr != NO_ERROR) {
+    return startErr;
+  }
+
+  status_t listenStatus = listenToFile(filePath);
+
+  if (status_t stopErr = stopRecording(binder); stopErr != NO_ERROR) {
+    return stopErr;
+  }
+
+  return listenStatus;
+}
+
+const AnalyzerCommand listenCommand = {
+    listenCommandEntryPoint,
+    "Starts recording binder transactions in <service> and writes transactions to "
+    "stdout.",
+    "<service>", "  <service>\t?\n"};
+
+int replayFunction(int argc, char* argv[]) {
+  if (argc != 4) {
+    return helpCommandEntryPoint(argc, argv);
+  }
+
+  sp<IBinder> binder = android::defaultServiceManager()->checkService(String16(argv[2]));
+  std::string path = kStandardRecordingPath + string(argv[3]);
+
+  return replayFile(binder, path);
+}
+
+const AnalyzerCommand replayCommand = {
+    replayFunction, "No overview", "<service> <file-name>",
+    "  <service>\t?\n"
+    "  <file-name>\tThe name of a file in /data/local/recordings/"};
+
+auto& commands = *new std::map<std::string, AnalyzerCommand>{
+    {"start", startCommand},   {"stop", stopCommand},     {"inspect", inspectCommand},
+    {"listen", listenCommand}, {"replay", replayCommand}, {"help", helpCommand}};
+
+void printGeneralHelp(std::string& toolName) {
+  std::cout << "USAGE: " << toolName << " <command> [<args>]\n\n";
+  std::cout << "COMMANDS:\n";
+  // Display overview this many characters from the start of a line.
+  // Subtract the length of the command name to calculate padding.
+  const size_t commandOverviewDisplayAlignment = 12;
+  for (const auto& command : commands) {
+    if (command.first == "help") {
+      continue;
+    }
+    std::cout << "  " << command.first
+              << std::string(commandOverviewDisplayAlignment - command.first.length(), ' ')
+              << command.second.overview << "\n";
+  }
+  std::cout << "\n  See '" << toolName << " help <command>' for detailed help.\n";
+}
+
+status_t helpCommandEntryPoint(int argc, char* argv[]) {
+  std::string toolName = argv[0];
+
+  if (argc < 2) {
+    printGeneralHelp(toolName);
+    return 0;
+  }
+
+  std::string commandName = argv[1];
+
+  if (commandName == "help") {
+    if (argc < 3) {
+      printGeneralHelp(toolName);
+      return 0;
+    }
+    commandName = argv[2];
+  } else {
+    commandName = argv[1];
+  }
+
+  auto command = commands.find(commandName);
+  if (command == commands.end()) {
+    std::cout << "Unrecognized command: " << commandName << "\n";
+    printGeneralHelp(toolName);
+    return -1;
+  }
+
+  std::cout << "OVERVIEW: " << command->second.overview << "\n\n";
+  std::cout << "USAGE: " << toolName << " " << commandName << " "
+            << command->second.compactArguments << "\n\n";
+  std::cout << "ARGUMENTS:\n" << command->second.helpDetail << "\n";
+
+  return 0;
+}
+
+}  // namespace
+
+int main(int argc, char* argv[]) {
+  std::string toolName = argv[0];
+
+  auto& analyzers = Analyzer::getAnalyzers();
+  if (analyzers.size() >= 1) {
+    commands["list"] = listCommand;
+  }
+
+  if (argc < 2 ||
+      (argc >= 2 && ((strcmp(argv[1], "--help") == 0) || (strcmp(argv[1], "-h") == 0)))) {
+    // General help
+    printGeneralHelp(toolName);
+    return 0;
+  }
+
+  auto command = commands.find(argv[1]);
+  if (command == commands.end()) {
+    std::cout << "Unrecognized command: " << argv[1] << "\n";
+    printGeneralHelp(toolName);
+    return -1;
+  }
+
+  return command->second.command(argc, argv);
+}
diff --git a/analyzer/include/Analyzer.h b/analyzer/include/Analyzer.h
new file mode 100644
index 0000000..ba712b9
--- /dev/null
+++ b/analyzer/include/Analyzer.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <binder/Parcel.h>
+#include <unordered_map>
+
+using std::unique_ptr;
+using std::unordered_map;
+
+using analyzeFn = android::status_t (*)(uint32_t _aidl_code, const android::Parcel& _aidl_data,
+                                        const android::Parcel& _aidl_reply);
+
+namespace android {
+namespace aidl {
+
+class Analyzer {
+ public:
+  Analyzer(const std::string& package, const std::string& interface, analyzeFn function);
+
+  const std::string& getPackageName() const;
+  const std::string& getInterfaceName() const;
+  const analyzeFn& getAnalyzeFunction() const;
+
+  static unordered_map<std::string, unique_ptr<Analyzer>>& getAnalyzers();
+  static void installAnalyzer(std::unique_ptr<Analyzer> install);
+
+ private:
+  std::string mPackageName;
+  std::string mInterfaceName;
+  analyzeFn mAnalyzeFunction;
+};
+
+}  // namespace aidl
+}  // namespace android
diff --git a/build/Android.bp b/build/Android.bp
index 4e541ff..7f2197f 100644
--- a/build/Android.bp
+++ b/build/Android.bp
@@ -28,6 +28,7 @@
         "blueprint",
         "soong",
         "soong-android",
+        "soong-bp2build",
         "soong-cc",
         "soong-genrule",
         "soong-phony",
@@ -40,6 +41,8 @@
         "aidl_api.go",
         "aidl_gen_rule.go",
         "aidl_interface_backends.go",
+        "aidl_interface_defaults.go",
+        "aidl_interface_headers.go",
         "aidl_interface_metadata_singleton.go",
         "aidl_mapping.go",
         "aidl_rust_source_provider.go",
@@ -47,6 +50,7 @@
     ],
     testSrcs: [
         "aidl_test.go",
+        "aidl_interface_bp2build_test.go",
     ],
     pluginFor: ["soong_build"],
 }
@@ -106,6 +110,11 @@
         "3",
         "4",
     ],
+    backend: {
+        rust: {
+            enabled: true,
+        },
+    },
 }
 
 aidl_interface {
@@ -118,8 +127,17 @@
         "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
     ],
     unstable: true,
-    backend: { ndk: { sdk_version: "29", }, },
+    backend: {
+        rust: {
+            enabled: true,
+        },
+        ndk: {
+            sdk_version: "29",
+            cflags: ["-U__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__"],
+        },
+    },
 }
+
 aidl_interface {
     name: "test-piece-ndk-sdk-30",
     local_include_dir: "tests_1",
@@ -130,8 +148,17 @@
         "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
     ],
     unstable: true,
-    backend: { ndk: { sdk_version: "30", }, },
+    backend: {
+        rust: {
+            enabled: true,
+        },
+        ndk: {
+            sdk_version: "30",
+            cflags: ["-U__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__"],
+        },
+    },
 }
+
 aidl_interface {
     name: "test-piece-ndk-sdk-31",
     local_include_dir: "tests_1",
@@ -142,7 +169,82 @@
         "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
     ],
     unstable: true,
-    backend: { ndk: { sdk_version: "31", }, },
+    backend: {
+        rust: {
+            enabled: true,
+        },
+        ndk: {
+            sdk_version: "31",
+            cflags: ["-U__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__"],
+        },
+    },
+}
+
+aidl_interface {
+    name: "test-piece-ndk-sdk-32",
+    local_include_dir: "tests_1",
+    flags: ["-Werror"],
+    srcs: [
+        "tests_1/some_package/IFoo.aidl",
+        "tests_1/some_package/Thing.aidl",
+        "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
+    ],
+    unstable: true,
+    backend: {
+        rust: {
+            enabled: true,
+        },
+        ndk: {
+            sdk_version: "32",
+            cflags: ["-U__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__"],
+        },
+    },
+}
+
+aidl_interface {
+    name: "test-piece-ndk-sdk-33",
+    local_include_dir: "tests_1",
+    flags: ["-Werror"],
+    srcs: [
+        "tests_1/some_package/IFoo.aidl",
+        "tests_1/some_package/Thing.aidl",
+        "tests_1/some_package/sub_package/*.aidl", // testing glob w/o filegroup
+    ],
+    unstable: true,
+    backend: {
+        rust: {
+            enabled: true,
+        },
+        ndk: {
+            sdk_version: "33",
+            cflags: ["-U__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__"],
+        },
+    },
+}
+
+aidl_interface {
+    name: "tests-vintf",
+    local_include_dir: "tests_vintf",
+    srcs: ["tests_vintf/vintf/IFoo.aidl"],
+    stability: "vintf",
+    backend: {
+        rust: {
+            enabled: true,
+        },
+        ndk: {
+            sdk_version: "31",
+        },
+        java: {
+            sdk_version: "system_current",
+        },
+    },
+    versions_with_info: [
+        {
+            version: "1",
+            imports: [],
+        },
+    ],
+
 }
 
 aidl_interface {
@@ -157,6 +259,9 @@
         "test-piece-1-V3",
     ],
     backend: {
+        rust: {
+            enabled: true,
+        },
         java: {
             platform_apis: true,
         },
@@ -176,19 +281,34 @@
     local_include_dir: "tests_1",
     flags: ["-Werror"],
     srcs: [
+        "tests_1/other_package/Enum.aidl",
         "tests_1/other_package/IBaz.aidl",
     ],
     imports: [
         "test-piece-2-V1",
     ],
     backend: {
+        rust: {
+            enabled: true,
+        },
         java: {
             platform_apis: true,
             gen_trace: true,
         },
     },
     gen_trace: true,
-    versions: ["1"],
+    versions_with_info: [
+        {
+            version: "1",
+            imports: ["test-piece-2-V1"],
+        },
+    ],
+}
+
+cc_test_library {
+    name: "client-using-test-piece-3",
+    srcs: ["client-using-test-piece-3.cpp"],
+    shared_libs: ["test-piece-3-V2-cpp"],
 }
 
 aidl_interface {
@@ -202,6 +322,9 @@
         "test-piece-1-V3",
     ],
     backend: {
+        rust: {
+            enabled: true,
+        },
         java: {
             platform_apis: true,
         },
@@ -223,6 +346,9 @@
         "test-piece-2-V1",
     ],
     backend: {
+        rust: {
+            enabled: true,
+        },
         java: {
             platform_apis: true,
         },
diff --git a/build/aidl_api.go b/build/aidl_api.go
index ba935ba..7d9b49e 100644
--- a/build/aidl_api.go
+++ b/build/aidl_api.go
@@ -16,6 +16,7 @@
 
 import (
 	"android/soong/android"
+	"reflect"
 
 	"fmt"
 	"io"
@@ -55,8 +56,10 @@
 	AidlRoot  string   // base directory for the input aidl file
 	Stability *string
 	Imports   []string
+	Headers   []string
 	Versions  []string
 	Dumpapi   DumpApiProperties
+	Frozen    *bool
 }
 
 type aidlApi struct {
@@ -92,6 +95,27 @@
 	return nextVersion(m.properties.Versions)
 }
 
+func (m *aidlApi) hasVersion() bool {
+	return len(m.properties.Versions) > 0
+}
+
+func (m *aidlApi) latestVersion() string {
+	if !m.hasVersion() {
+		return "0"
+	}
+	return m.properties.Versions[len(m.properties.Versions)-1]
+}
+
+func (m *aidlApi) isFrozen() bool {
+	return proptools.Bool(m.properties.Frozen)
+}
+
+// in order to keep original behavior for certain operations, we may want to
+// check if frozen is set.
+func (m *aidlApi) isExplicitlyUnFrozen() bool {
+	return m.properties.Frozen != nil && !proptools.Bool(m.properties.Frozen)
+}
+
 type apiDump struct {
 	version  string
 	dir      android.Path
@@ -249,6 +273,11 @@
 					}
 				}
 				rbc.Text("]}' ").
+					Text(android.PathForModuleSrc(ctx, "Android.bp").String()).
+					Text("&&").
+					BuiltTool("bpmodify").
+					Text("-w -m " + m.properties.BaseName).
+					Text("-parameter frozen -set-bool true").
 					Text(android.PathForModuleSrc(ctx, "Android.bp").String())
 			}, isFreezingApi)
 		} else {
@@ -257,7 +286,8 @@
 					imports = append(imports, im)
 				} else {
 					versionSuffix := importIfaces[im].latestVersion()
-					if !importIfaces[im].hasVersion() {
+					if !importIfaces[im].hasVersion() ||
+						importIfaces[im].isExplicitlyUnFrozen() {
 						versionSuffix = importIfaces[im].nextVersion()
 					}
 					imports = append(imports, im+"-V"+versionSuffix)
@@ -271,6 +301,11 @@
 				rbc.BuiltTool("bpmodify").
 					Text("-w -m " + m.properties.BaseName).
 					Text("-parameter versions_with_info -add-literal '" + data + "' ").
+					Text(android.PathForModuleSrc(ctx, "Android.bp").String()).
+					Text("&&").
+					BuiltTool("bpmodify").
+					Text("-w -m " + m.properties.BaseName).
+					Text("-parameter frozen -set-bool true").
 					Text(android.PathForModuleSrc(ctx, "Android.bp").String())
 			}, isFreezingApi)
 		}
@@ -303,11 +338,16 @@
 		m.migrateAndAppendVersion(ctx, rb, &version, transitive)
 	} else {
 		actionWord = "Updating"
+		if m.isFrozen() {
+			rb.Command().BuiltTool("bpmodify").
+				Text("-w -m " + m.properties.BaseName).
+				Text("-parameter frozen -set-bool false").
+				Text(android.PathForModuleSrc(ctx, "Android.bp").String())
+
+		}
 		// We are updating the current version. Don't copy .hash to the current dump
 		rb.Command().Text("mkdir -p " + targetDir)
-		rb.Command().Text("rm -rf " + targetDir + "/*")
-		rb.Command().Text("cp -rf " + dump.dir.String() + "/* " + targetDir).Implicits(dump.files)
-
+		rb.Command().Text("rsync --recursive --update --delete-before " + dump.dir.String() + "/* " + targetDir).Implicits(dump.files)
 		m.migrateAndAppendVersion(ctx, rb, nil, false)
 	}
 
@@ -348,6 +388,15 @@
 			// add imported module's checkapiTimestamps as implicits to make sure that imported apiDump is up-to-date
 			deps.implicits = append(deps.implicits, api.checkApiTimestamps.Paths()...)
 			deps.implicits = append(deps.implicits, api.checkHashTimestamps.Paths()...)
+			deps.implicits = append(deps.implicits, api.hasDevelopment)
+		case interfaceHeadersDepTag:
+			headerInfo, ok := ctx.OtherModuleProvider(dep, AidlInterfaceHeadersProvider).(AidlInterfaceHeadersInfo)
+			if !ok {
+				ctx.PropertyErrorf("headers", "module %v does not provide AidlInterfaceHeadersInfo", dep.Name())
+				return
+			}
+			deps.implicits = append(deps.implicits, headerInfo.Srcs...)
+			deps.imports = append(deps.imports, headerInfo.IncludeDir)
 		}
 	})
 	return deps
@@ -398,7 +447,12 @@
 	// In case when it is finalized, we should never allow updating the already frozen API.
 	// If it's not finalized, we let users to update the current version by invoking
 	// `m <name>-update-api`.
-	messageFile := android.PathForSource(ctx, "system/tools/aidl/build/message_check_equality.txt")
+	var messageFile android.SourcePath
+	if m.isFrozen() {
+		messageFile = android.PathForSource(ctx, "system/tools/aidl/build/message_check_equality_frozen.txt")
+	} else {
+		messageFile = android.PathForSource(ctx, "system/tools/aidl/build/message_check_equality.txt")
+	}
 	sdkIsFinal := !ctx.Config().DefaultAppTargetSdk(ctx).IsPreview()
 	if sdkIsFinal {
 		messageFile = android.PathForSource(ctx, "system/tools/aidl/build/message_check_equality_release.txt")
@@ -434,24 +488,89 @@
 	return timestampFile
 }
 
+// Get the `latest` versions of the imported AIDL interfaces. If an interface is frozen, this is the
+// last frozen version, if it is `frozen: false` this is the last frozen version + 1, if `frozen` is
+// not set this is the last frozen version because we don't know if there are changes or not to the
+// interface.
+// map["foo":"3", "bar":1]
+func (m *aidlApi) getLatestImportVersions(ctx android.ModuleContext) map[string]string {
+	var latest_versions = make(map[string]string)
+	ctx.VisitDirectDeps(func(dep android.Module) {
+		switch ctx.OtherModuleDependencyTag(dep).(type) {
+		case apiDepTag:
+			api := dep.(*aidlApi)
+			if len(api.properties.Versions) > 0 {
+				if api.properties.Frozen == nil || api.isFrozen() {
+					latest_versions[api.properties.BaseName] = api.latestVersion()
+				} else {
+					latest_versions[api.properties.BaseName] = api.nextVersion()
+				}
+			} else {
+				latest_versions[api.properties.BaseName] = "1"
+			}
+		}
+	})
+	return latest_versions
+}
+
 func (m *aidlApi) checkForDevelopment(ctx android.ModuleContext, latestVersionDump *apiDump, totDump apiDump) android.WritablePath {
 	hasDevPath := android.PathForModuleOut(ctx, "has_development")
 	rb := android.NewRuleBuilder(pctx, ctx)
 	rb.Command().Text("rm -f " + hasDevPath.String())
 	if latestVersionDump != nil {
-		hasDevCommand := rb.Command()
-		hasDevCommand.BuiltTool("aidl").FlagWithArg("--checkapi=", "equal")
-		if m.properties.Stability != nil {
-			hasDevCommand.FlagWithArg("--stability ", *m.properties.Stability)
+		current_imports := m.getImports(ctx, currentVersion)
+		last_frozen_imports := m.getImports(ctx, m.properties.Versions[len(m.properties.Versions)-1])
+		var latest_versions = m.getLatestImportVersions(ctx)
+		// replace any "latest" version with the version number from latest_versions
+		for import_name, latest_version := range current_imports {
+			if latest_version == "latest" {
+				current_imports[import_name] = latest_versions[import_name]
+			}
+		}
+		for import_name, latest_version := range last_frozen_imports {
+			if latest_version == "latest" {
+				last_frozen_imports[import_name] = latest_versions[import_name]
+			}
+		}
+		different_imports := false
+		if !reflect.DeepEqual(current_imports, last_frozen_imports) {
+			if m.isFrozen() {
+				ctx.ModuleErrorf("This interface is 'frozen: true' but the imports have changed. Set 'frozen: false' to allow changes: \n Version %s imports: %s\n Version %s imports: %s\n",
+					currentVersion,
+					fmt.Sprint(current_imports),
+					m.properties.Versions[len(m.properties.Versions)-1],
+					fmt.Sprint(last_frozen_imports))
+				return hasDevPath
+			}
+			different_imports = true
 		}
 		// checkapi(latest, tot) should use imports for nextVersion(=tot)
-		deps := getDeps(ctx, m.getImports(ctx, m.nextVersion()))
-		hasDevCommand.
-			FlagForEachArg("-I", deps.imports).Implicits(deps.implicits).
-			FlagForEachInput("-p", deps.preprocessed).
-			Text(latestVersionDump.dir.String()).Implicits(latestVersionDump.files).
-			Text(totDump.dir.String()).Implicits(totDump.files).
-			Text("2> /dev/null; echo $? >").Output(hasDevPath)
+		hasDevCommand := rb.Command()
+		if !different_imports {
+			hasDevCommand.BuiltTool("aidl").FlagWithArg("--checkapi=", "equal")
+			if m.properties.Stability != nil {
+				hasDevCommand.FlagWithArg("--stability ", *m.properties.Stability)
+			}
+			deps := getDeps(ctx, m.getImports(ctx, m.nextVersion()))
+			hasDevCommand.
+				FlagForEachArg("-I", deps.imports).Implicits(deps.implicits).
+				FlagForEachInput("-p", deps.preprocessed).
+				Text(latestVersionDump.dir.String()).Implicits(latestVersionDump.files).
+				Text(totDump.dir.String()).Implicits(totDump.files)
+			if m.isExplicitlyUnFrozen() {
+				// Throw an error if checkapi returns with no differences
+				msg := fmt.Sprintf("echo \"Interface %s can not be marked \\`frozen: false\\` if there are no changes "+
+					"between the current version and the last frozen version.\"", m.properties.BaseName)
+				hasDevCommand.
+					Text(fmt.Sprintf("2> /dev/null && %s && exit -1 || echo $? >", msg)).Output(hasDevPath)
+			} else {
+				hasDevCommand.
+					Text("2> /dev/null; echo $? >").Output(hasDevPath)
+			}
+		} else {
+			// We know there are different imports which means has_development must be true
+			hasDevCommand.Text("echo 1 >").Output(hasDevPath)
+		}
 	} else {
 		rb.Command().Text("echo 1 >").Output(hasDevPath)
 	}
@@ -508,7 +627,7 @@
 			if !dump.hashFile.Valid() {
 				// We should show the source path of hash_gen because aidl_hash_gen cannot be built due to build error.
 				cmd := fmt.Sprintf(`(croot && system/tools/aidl/build/hash_gen.sh %s %s %s)`, apiDir, versionForHashGen(ver), hashFilePath)
-				ctx.ModuleErrorf("A frozen aidl_interface must have '.hash' file, but %s-V%s doesn't have it. Use the command below to generate hash.\n%s\n",
+				ctx.ModuleErrorf("A frozen aidl_interface must have '.hash' file, but %s-V%s doesn't have it. Use the command below to generate a hash (DANGER: this should not normally happen. If an interface is changed downstream, it may cause undefined behavior, test failures, unexplained weather conditions, or otherwise broad malfunction of society. DO NOT RUN THIS COMMAND TO BREAK APIS. DO NOT!).\n%s\n",
 					m.properties.BaseName, ver, cmd)
 			}
 			dumps = append(dumps, dump)
@@ -580,7 +699,7 @@
 	return m
 }
 
-func addApiModule(mctx android.LoadHookContext, i *aidlInterface) string {
+func addApiModule(mctx android.DefaultableHookContext, i *aidlInterface) string {
 	apiModule := i.ModuleBase.Name() + aidlApiSuffix
 	srcs, aidlRoot := i.srcsForVersion(mctx, i.nextVersion())
 	mctx.CreateModule(aidlApiFactory, &nameProperties{
@@ -591,8 +710,10 @@
 		AidlRoot:  aidlRoot,
 		Stability: i.properties.Stability,
 		Imports:   i.properties.Imports,
+		Headers:   i.properties.Headers,
 		Versions:  i.getVersions(),
 		Dumpapi:   i.properties.Dumpapi,
+		Frozen:    i.properties.Frozen,
 	})
 	return apiModule
 }
diff --git a/build/aidl_api/test-piece-3/current/other_package/Enum.aidl b/build/aidl_api/test-piece-3/current/other_package/Enum.aidl
new file mode 100644
index 0000000..5862b2c
--- /dev/null
+++ b/build/aidl_api/test-piece-3/current/other_package/Enum.aidl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package other_package;
+enum Enum {
+  ZERO = 0,
+  ONE = 1,
+}
diff --git a/build/aidl_api/test-piece-3/current/other_package/IBaz.aidl b/build/aidl_api/test-piece-3/current/other_package/IBaz.aidl
index bc3d50c..e64e56a 100644
--- a/build/aidl_api/test-piece-3/current/other_package/IBaz.aidl
+++ b/build/aidl_api/test-piece-3/current/other_package/IBaz.aidl
@@ -34,4 +34,5 @@
 package other_package;
 interface IBaz {
   void CanYouDealWithThisBar(in some_package.IBar bar);
+  const int ZERO = 0;
 }
diff --git a/build/aidl_api/tests-vintf/1/.hash b/build/aidl_api/tests-vintf/1/.hash
new file mode 100644
index 0000000..f7e48ad
--- /dev/null
+++ b/build/aidl_api/tests-vintf/1/.hash
@@ -0,0 +1 @@
+76be80502c7d4b9097cbed126e03a5a618c4cca3
diff --git a/build/aidl_api/tests-vintf/1/vintf/IFoo.aidl b/build/aidl_api/tests-vintf/1/vintf/IFoo.aidl
new file mode 100644
index 0000000..6661ebb
--- /dev/null
+++ b/build/aidl_api/tests-vintf/1/vintf/IFoo.aidl
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vintf;
+@VintfStability
+interface IFoo {
+  vintf.IFoo.Foo[] abar(in vintf.IFoo.Foo[] f);
+  ParcelFileDescriptor afd(in ParcelFileDescriptor fd);
+  vintf.IFoo.E ae(in vintf.IFoo.E e);
+  vintf.IFoo.A aa(in vintf.IFoo.A a);
+  parcelable Foo {
+    String a;
+  }
+  union A {
+    String a;
+    int b;
+  }
+  enum E {
+    A = 0,
+    B = 1,
+    C = 2,
+  }
+}
diff --git a/build/aidl_api/tests-vintf/current/vintf/IFoo.aidl b/build/aidl_api/tests-vintf/current/vintf/IFoo.aidl
new file mode 100644
index 0000000..6661ebb
--- /dev/null
+++ b/build/aidl_api/tests-vintf/current/vintf/IFoo.aidl
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package vintf;
+@VintfStability
+interface IFoo {
+  vintf.IFoo.Foo[] abar(in vintf.IFoo.Foo[] f);
+  ParcelFileDescriptor afd(in ParcelFileDescriptor fd);
+  vintf.IFoo.E ae(in vintf.IFoo.E e);
+  vintf.IFoo.A aa(in vintf.IFoo.A a);
+  parcelable Foo {
+    String a;
+  }
+  union A {
+    String a;
+    int b;
+  }
+  enum E {
+    A = 0,
+    B = 1,
+    C = 2,
+  }
+}
diff --git a/build/aidl_gen_rule.go b/build/aidl_gen_rule.go
index 3dd0fde..9e7c950 100644
--- a/build/aidl_gen_rule.go
+++ b/build/aidl_gen_rule.go
@@ -63,22 +63,24 @@
 )
 
 type aidlGenProperties struct {
-	Srcs            []string `android:"path"`
-	AidlRoot        string   // base directory for the input aidl file
-	Imports         []string
-	Stability       *string
-	Min_sdk_version *string
-	Platform_apis   bool
-	Lang            string // target language [java|cpp|ndk|rust]
-	BaseName        string
-	GenLog          bool
-	Version         string
-	GenRpc          bool
-	GenTrace        bool
-	Unstable        *bool
-	NotFrozen       bool
-	Visibility      []string
-	Flags           []string
+	Srcs                []string `android:"path"`
+	AidlRoot            string   // base directory for the input aidl file
+	Imports             []string
+	Headers             []string
+	Stability           *string
+	Min_sdk_version     *string
+	Platform_apis       bool
+	Lang                string // target language [java|cpp|ndk|rust]
+	BaseName            string
+	GenLog              bool
+	Version             string
+	GenRpc              bool
+	GenTrace            bool
+	Unstable            *bool
+	NotFrozen           bool
+	RequireFrozenReason string
+	Visibility          []string
+	Flags               []string
 }
 
 type aidlGenRule struct {
@@ -114,12 +116,12 @@
 func (g *aidlGenRule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
 	srcs, imports := getPaths(ctx, g.properties.Srcs, g.properties.AidlRoot)
 
+	g.deps = getDeps(ctx, g.getImports(ctx))
+
 	if ctx.Failed() {
 		return
 	}
 
-	g.deps = getDeps(ctx, g.getImports(ctx))
-
 	genDirTimestamp := android.PathForModuleGen(ctx, "timestamp") // $out/gen/timestamp
 	g.implicitInputs = append(g.implicitInputs, genDirTimestamp)
 	g.implicitInputs = append(g.implicitInputs, g.deps.implicits...)
@@ -170,8 +172,13 @@
 	implicits := g.implicitInputs
 
 	optionalFlags := append([]string{}, g.properties.Flags...)
-	if g.properties.Version != "" {
-		optionalFlags = append(optionalFlags, "--version "+g.properties.Version)
+	if proptools.Bool(g.properties.Unstable) != true {
+		// default version is 1 for any stable interface
+		version := "1"
+		if g.properties.Version != "" {
+			version = g.properties.Version
+		}
+		optionalFlags = append(optionalFlags, "--version "+version)
 
 		hash := "notfrozen"
 		if !strings.HasPrefix(baseDir, ctx.Config().SoongOutDir()) {
@@ -244,12 +251,11 @@
 			prefix = "aidl"
 		}
 
-		headers = append(headers, g.genHeaderDir.Join(ctx, prefix, packagePath,
-			typeName+".h"))
-		headers = append(headers, g.genHeaderDir.Join(ctx, prefix, packagePath,
-			"Bp"+baseName+".h"))
-		headers = append(headers, g.genHeaderDir.Join(ctx, prefix, packagePath,
-			"Bn"+baseName+".h"))
+		if g.properties.Lang != langCppAnalyzer {
+			headers = append(headers, g.genHeaderDir.Join(ctx, prefix, packagePath, typeName+".h"))
+			headers = append(headers, g.genHeaderDir.Join(ctx, prefix, packagePath, "Bp"+baseName+".h"))
+			headers = append(headers, g.genHeaderDir.Join(ctx, prefix, packagePath, "Bn"+baseName+".h"))
+		}
 
 		if g.properties.GenLog {
 			optionalFlags = append(optionalFlags, "--log")
diff --git a/build/aidl_interface.go b/build/aidl_interface.go
index 05b6f3e..c91cbe4 100644
--- a/build/aidl_interface.go
+++ b/build/aidl_interface.go
@@ -16,6 +16,7 @@
 
 import (
 	"android/soong/android"
+	"android/soong/bazel"
 	"android/soong/cc"
 	"android/soong/java"
 	"android/soong/phony"
@@ -41,6 +42,7 @@
 	langJava                  = "java"
 	langNdk                   = "ndk"
 	langRust                  = "rust"
+	langCppAnalyzer           = "cpp-analyzer"
 	// TODO(b/161456198) remove the NDK platform backend as the 'platform' variant of the NDK
 	// backend serves the same purpose.
 	langNdkPlatform = "ndk_platform"
@@ -48,9 +50,7 @@
 	currentVersion = "current"
 )
 
-var (
-	pctx = android.NewPackageContext("android/aidl")
-)
+var pctx = android.NewPackageContext("android/aidl")
 
 func init() {
 	pctx.Import("android/soong/android")
@@ -58,7 +58,7 @@
 	pctx.HostBinToolVariable("aidlHashGen", "aidl_hash_gen")
 	pctx.SourcePathVariable("aidlToJniCmd", "system/tools/aidl/build/aidl_to_jni.py")
 	pctx.SourcePathVariable("aidlRustGlueCmd", "system/tools/aidl/build/aidl_rust_glue.py")
-	android.RegisterModuleType("aidl_interface", aidlInterfaceFactory)
+	android.RegisterModuleType("aidl_interface", AidlInterfaceFactory)
 	android.PreArchMutators(registerPreArchMutators)
 	android.PreArchBp2BuildMutators(registerPreArchMutators)
 	android.PostDepsMutators(registerPostDepsMutators)
@@ -102,22 +102,24 @@
 	return false
 }
 
-// AildVersionInfo keeps the *-source module for each (aidl_interface & lang) and the list of
+// AidlVersionInfo keeps the *-source module for each (aidl_interface & lang) and the list of
 // not-frozen versions (which shouldn't be used by other modules)
-type AildVersionInfo struct {
-	notFrozen []string
-	sourceMap map[string]string
+type AidlVersionInfo struct {
+	notFrozen            []string
+	requireFrozenReasons []string
+	sourceMap            map[string]string
 }
 
-var AidlVersionInfoProvider = blueprint.NewMutatorProvider(AildVersionInfo{}, "checkAidlGeneratedModules")
+var AidlVersionInfoProvider = blueprint.NewMutatorProvider(AidlVersionInfo{}, "checkAidlGeneratedModules")
 
 // Merges `other` version info into this one.
 // Returns the pair of mismatching versions when there's conflict. Otherwise returns nil.
 // For example, when a module depends on 'foo-V2-ndk', the map contains an entry of (foo, foo-V2-ndk-source).
 // Merging (foo, foo-V1-ndk-source) and (foo, foo-V2-ndk-source) will fail and returns
 // {foo-V1-ndk-source, foo-V2-ndk-source}.
-func (info *AildVersionInfo) merge(other AildVersionInfo) []string {
+func (info *AidlVersionInfo) merge(other AidlVersionInfo) []string {
 	info.notFrozen = append(info.notFrozen, other.notFrozen...)
+	info.requireFrozenReasons = append(info.requireFrozenReasons, other.requireFrozenReasons...)
 
 	if other.sourceMap == nil {
 		return nil
@@ -137,15 +139,15 @@
 	return nil
 }
 
-func reportUsingNotFrozenError(ctx android.BaseModuleContext, notFrozen []string) {
+func reportUsingNotFrozenError(ctx android.BaseModuleContext, notFrozen []string, requireFrozenReason []string) {
 	// TODO(b/154066686): Replace it with a common method instead of listing up module types.
 	// Test libraries are exempted.
 	if android.InList(ctx.ModuleType(), []string{"cc_test_library", "android_test", "cc_benchmark", "cc_test"}) {
 		return
 	}
-	for _, name := range notFrozen {
-		ctx.ModuleErrorf("%v is disallowed in release version because it is unstable, and its \"owner\" property is missing.",
-			name)
+	for i, name := range notFrozen {
+		reason := requireFrozenReason[i]
+		ctx.ModuleErrorf("%v is an unfrozen development version, and it can't be used because %q", name, reason)
 	}
 }
 
@@ -172,29 +174,32 @@
 	}
 	if gen, ok := mctx.Module().(*aidlGenRule); ok {
 		var notFrozen []string
+		var requireFrozenReasons []string
 		if gen.properties.NotFrozen {
 			notFrozen = []string{strings.TrimSuffix(mctx.ModuleName(), "-source")}
+			requireFrozenReasons = []string{gen.properties.RequireFrozenReason}
 		}
-		mctx.SetProvider(AidlVersionInfoProvider, AildVersionInfo{
-			notFrozen: notFrozen,
+		mctx.SetProvider(AidlVersionInfoProvider, AidlVersionInfo{
+			notFrozen:            notFrozen,
+			requireFrozenReasons: requireFrozenReasons,
 			sourceMap: map[string]string{
 				gen.properties.BaseName + "-" + gen.properties.Lang: gen.Name(),
 			},
 		})
 		return
 	}
-	// Collect/merge AildVersionInfos from direct dependencies
-	var info AildVersionInfo
+	// Collect/merge AidlVersionInfos from direct dependencies
+	var info AidlVersionInfo
 	mctx.VisitDirectDeps(func(dep android.Module) {
 		if mctx.OtherModuleHasProvider(dep, AidlVersionInfoProvider) {
-			otherInfo := mctx.OtherModuleProvider(dep, AidlVersionInfoProvider).(AildVersionInfo)
+			otherInfo := mctx.OtherModuleProvider(dep, AidlVersionInfoProvider).(AidlVersionInfo)
 			if violators := info.merge(otherInfo); violators != nil {
 				reportMultipleVersionError(mctx, violators)
 			}
 		}
 	})
 	if !isAidlGeneratedModule(mctx.Module()) && len(info.notFrozen) > 0 {
-		reportUsingNotFrozenError(mctx, info.notFrozen)
+		reportUsingNotFrozenError(mctx, info.notFrozen, info.requireFrozenReasons)
 	}
 	if mctx.Failed() {
 		return
@@ -244,7 +249,9 @@
 
 type CommonBackendProperties struct {
 	// Whether to generate code in the corresponding backend.
-	// Default: true
+	// Default:
+	//   - for Java/NDK/CPP backends - True
+	//   - for Rust backend - False
 	Enabled        *bool
 	Apex_available []string
 
@@ -259,6 +266,15 @@
 
 type CommonNativeBackendProperties struct {
 	CommonBackendProperties
+
+	// Must be NDK libraries, for stable types.
+	Additional_shared_libraries []string
+
+	// cflags to forward to native compilation. This is expected to be
+	// used more for AIDL compiler developers than being actually
+	// practical.
+	Cflags []string
+
 	// Whether to generate additional code for gathering information
 	// about the transactions.
 	// Default: false
@@ -330,6 +346,12 @@
 	// interface must be kept stable as long as it is used.
 	Stability *string
 
+	// If true, this interface is frozen and does not have any changes since the last
+	// frozen version.
+	// If false, there are changes to this interface between the last frozen version (N) and
+	// the current version (N + 1).
+	Frozen *bool
+
 	// Deprecated: Use `versions_with_info` instead. Don't use `versions` property directly.
 	Versions []string
 
@@ -409,10 +431,16 @@
 
 	// --dumpapi options
 	Dumpapi DumpApiProperties
+
+	// List of aidl_interface_headers modules that provide include dependencies
+	// for the AIDL tool.
+	Headers []string
 }
 
 type aidlInterface struct {
 	android.ModuleBase
+	android.BazelModuleBase
+	android.DefaultableModuleBase
 
 	properties aidlInterfaceProperties
 
@@ -483,12 +511,24 @@
 	switch lang {
 	case langCpp:
 		ver = i.properties.Backend.Cpp.Gen_trace
+		if ver == nil {
+			// Enable tracing for all cpp backends by default
+			ver = proptools.BoolPtr(true)
+		}
 	case langJava:
 		ver = i.properties.Backend.Java.Gen_trace
+		if ver == nil && proptools.Bool(i.properties.Backend.Java.Platform_apis) {
+			// Enable tracing for all Java backends using platform APIs
+			// TODO(161393989) Once we generate ATRACE_TAG_APP instead of ATRACE_TAG_AIDL,
+			// this can be removed and we can start generating traces in all apps.
+			ver = proptools.BoolPtr(true)
+		}
 	case langNdk, langNdkPlatform:
 		ver = i.properties.Backend.Ndk.Gen_trace
 	case langRust: // unsupported b/236880829
 		ver = i.properties.Backend.Rust.Gen_trace
+	case langCppAnalyzer:
+		*ver = false
 	default:
 		panic(fmt.Errorf("unsupported language backend %q\n", lang))
 	}
@@ -513,6 +553,10 @@
 	blueprint.BaseDependencyTag
 }
 
+type interfaceHeadersDepTag struct {
+	blueprint.BaseDependencyTag
+}
+
 var (
 	// Dep from *-source (aidlGenRule) to *-api (aidlApi)
 	apiDep = apiDepTag{name: "api"}
@@ -520,6 +564,8 @@
 	importApiDep = apiDepTag{name: "imported-api"}
 	// Dep to original *-interface (aidlInterface)
 	interfaceDep = interfaceDepTag{}
+	// Dep for a header interface
+	interfaceHeadersDep = interfaceHeadersDepTag{}
 )
 
 func addImportedInterfaceDeps(ctx android.BottomUpMutatorContext, imports []string) {
@@ -555,6 +601,10 @@
 			return
 		}
 		addImportedInterfaceDeps(mctx, i.properties.Imports)
+
+		for _, header := range i.properties.Headers {
+			mctx.AddDependency(i, interfaceHeadersDep, header)
+		}
 	case *aidlImplementationGenerator:
 		mctx.AddDependency(i, interfaceDep, i.properties.AidlInterfaceName+aidlInterfaceSuffix)
 		addImportedInterfaceDeps(mctx, i.properties.Imports)
@@ -573,6 +623,9 @@
 			name, _ := parseModuleWithVersion(anImport)
 			mctx.AddDependency(i, importApiDep, name+aidlApiSuffix)
 		}
+		for _, header := range i.properties.Headers {
+			mctx.AddDependency(i, interfaceHeadersDep, header)
+		}
 	case *aidlGenRule:
 		mctx.AddDependency(i, interfaceDep, i.properties.BaseName+aidlInterfaceSuffix)
 		addImportedInterfaceDeps(mctx, i.properties.Imports)
@@ -580,6 +633,9 @@
 			// for checkapi timestamps
 			mctx.AddDependency(i, apiDep, i.properties.BaseName+aidlApiSuffix)
 		}
+		for _, header := range i.properties.Headers {
+			mctx.AddDependency(i, interfaceHeadersDep, header)
+		}
 	}
 }
 
@@ -600,8 +656,17 @@
 			anImport := other.ModuleBase.Name()
 			anImportWithVersion := tag.anImport
 			_, version := parseModuleWithVersion(tag.anImport)
-			if version != "" {
-				candidateVersions := concat(other.getVersions(), []string{other.nextVersion()})
+
+			candidateVersions := other.getVersions()
+			if !proptools.Bool(other.properties.Frozen) {
+				candidateVersions = concat(candidateVersions, []string{other.nextVersion()})
+			}
+
+			if version == "" {
+				if !proptools.Bool(other.properties.Unstable) {
+					mctx.PropertyErrorf("imports", "%q depends on %q but does not specify a version (must be one of %q)", i.ModuleBase.Name(), anImport, candidateVersions)
+				}
+			} else {
 				if !android.InList(version, candidateVersions) {
 					mctx.PropertyErrorf("imports", "%q depends on %q version %q(%q), which doesn't exist. The version must be one of %q", i.ModuleBase.Name(), anImport, version, anImportWithVersion, candidateVersions)
 				}
@@ -625,11 +690,17 @@
 				mctx.PropertyErrorf("backend.rust.enabled",
 					"Rust backend not enabled in the imported AIDL interface %q", anImport)
 			}
+
+			if i.isFrozen() && other.isExplicitlyUnFrozen() && version == "" {
+				mctx.PropertyErrorf("frozen",
+					"%q imports %q which is not frozen. Either %q must set 'frozen: false' or must explicitly import %q where * is one of %q",
+					i.ModuleBase.Name(), anImport, i.ModuleBase.Name(), anImport+"-V*", candidateVersions)
+			}
 		})
 	}
 }
 
-func (i *aidlInterface) checkGenTrace(mctx android.LoadHookContext) {
+func (i *aidlInterface) checkGenTrace(mctx android.DefaultableHookContext) {
 	if !proptools.Bool(i.properties.Gen_trace) {
 		return
 	}
@@ -638,7 +709,7 @@
 	}
 }
 
-func (i *aidlInterface) checkStability(mctx android.LoadHookContext) {
+func (i *aidlInterface) checkStability(mctx android.DefaultableHookContext) {
 	if i.properties.Stability == nil {
 		return
 	}
@@ -654,7 +725,7 @@
 		mctx.PropertyErrorf("stability", "must be empty or \"vintf\"")
 	}
 }
-func (i *aidlInterface) checkVersions(mctx android.LoadHookContext) {
+func (i *aidlInterface) checkVersions(mctx android.DefaultableHookContext) {
 	if len(i.properties.Versions) > 0 && len(i.properties.Versions_with_info) > 0 {
 		mctx.ModuleErrorf("versions:%q and versions_with_info:%q cannot be used at the same time. Use versions_with_info instead of versions.", i.properties.Versions, i.properties.Versions_with_info)
 	}
@@ -699,14 +770,10 @@
 		mctx.PropertyErrorf("versions", "should be sorted, but is %v", i.getVersions())
 	}
 }
-func (i *aidlInterface) checkVndkUseVersion(mctx android.LoadHookContext) {
+func (i *aidlInterface) checkVndkUseVersion(mctx android.DefaultableHookContext) {
 	if i.properties.Vndk_use_version == nil {
 		return
 	}
-	if !i.hasVersion() {
-		mctx.PropertyErrorf("vndk_use_version", "This does not make sense when no 'versions' are specified.")
-
-	}
 	if *i.properties.Vndk_use_version == i.nextVersion() {
 		return
 	}
@@ -752,6 +819,16 @@
 	return i.properties.VersionsInternal
 }
 
+func (i *aidlInterface) isFrozen() bool {
+	return proptools.Bool(i.properties.Frozen)
+}
+
+// in order to keep original behavior for certain operations, we may want to
+// check if frozen is set.
+func (i *aidlInterface) isExplicitlyUnFrozen() bool {
+	return i.properties.Frozen != nil && !proptools.Bool(i.properties.Frozen)
+}
+
 func hasVersionSuffix(moduleName string) bool {
 	hasVersionSuffix, _ := regexp.MatchString("-V\\d+$", moduleName)
 	return hasVersionSuffix
@@ -775,7 +852,35 @@
 	})
 }
 
-func aidlInterfaceHook(mctx android.LoadHookContext, i *aidlInterface) {
+func (i *aidlInterface) checkRequireFrozenAndReason(mctx android.EarlyModuleContext) (bool, string) {
+	if proptools.Bool(i.properties.Unstable) {
+		return false, "it's an unstable interface"
+	}
+
+	if proptools.Bool(i.properties.Frozen) {
+		return true, "it's explicitly marked as `frozen: true`"
+	}
+
+	if i.Owner() == "" {
+		if !mctx.Config().DefaultAppTargetSdk(mctx).IsPreview() {
+			return true, "this is a release branch - freeze it or set 'owners:'"
+		} else if mctx.Config().IsEnvTrue("AIDL_FROZEN_REL") {
+			return true, "this is a release branch (simulated by setting AIDL_FROZEN_REL) - freeze it or set 'owners:'"
+		}
+	} else {
+		// has an OWNER
+		// REL branches don't enforce downstream interfaces or owned interfaces
+		// to be frozen. Instead, these interfaces are verified by other tests
+		// like vts_treble_vintf_vendor_test
+		if android.InList(i.Owner(), strings.Fields(mctx.Config().Getenv("AIDL_FROZEN_OWNERS"))) {
+			return true, "the owner field is in environment variable AIDL_FROZEN_OWNERS"
+		}
+	}
+
+	return false, "by default, we don't require the interface to be frozen"
+}
+
+func aidlInterfaceHook(mctx android.DefaultableHookContext, i *aidlInterface) {
 	if hasVersionSuffix(i.ModuleBase.Name()) {
 		mctx.PropertyErrorf("name", "aidl_interface should not have '-V<number> suffix")
 	}
@@ -807,26 +912,35 @@
 		}
 	}
 
+	if i.isFrozen() {
+		if !i.hasVersion() {
+			mctx.PropertyErrorf("frozen", "cannot be frozen without versions")
+			return
+		}
+	}
+
 	if !unstable && mctx.Namespace().Path != "." && i.Owner() == "" {
 		mctx.PropertyErrorf("owner", "aidl_interface in a soong_namespace must have the 'owner' property set.")
 	}
 
-	sdkIsFinal := !mctx.Config().DefaultAppTargetSdk(mctx).IsPreview()
-	requireFrozenNoOwner := i.Owner() == "" && (sdkIsFinal || mctx.Config().IsEnvTrue("AIDL_FROZEN_REL"))
-	requireFrozenWithOwner := i.Owner() != "" && android.InList(i.Owner(), strings.Fields(mctx.Config().Getenv("AIDL_FROZEN_OWNERS")))
-	requireFrozenByOwner := requireFrozenNoOwner || requireFrozenWithOwner
-
-	// Two different types of 'unstable' here
-	// - 'unstable: true' meaning the module is never stable
-	// - current unfrozen ToT version
-	//
-	// OEM branches may remove 'i.Owner()' here to apply the check to all interfaces, in
-	// addition to core platform interfaces. Otherwise, we rely on vts_treble_vintf_vendor_test.
-	requireFrozenVersion := !unstable && requireFrozenByOwner
+	requireFrozenVersion, requireFrozenReason := i.checkRequireFrozenAndReason(mctx)
 
 	// surface error early, main check is via checkUnstableModuleMutator
 	if requireFrozenVersion && !i.hasVersion() {
-		mctx.PropertyErrorf("versions", "must be set (need to be frozen) when \"unstable\" is false, PLATFORM_VERSION_CODENAME is REL, and \"owner\" property is missing.")
+		mctx.PropertyErrorf("versions", "must be set (need to be frozen) because: %q", requireFrozenReason)
+	}
+
+	vndkEnabled := proptools.Bool(i.properties.VndkProperties.Vndk.Enabled) ||
+		proptools.Bool(i.properties.Backend.Cpp.CommonNativeBackendProperties.VndkProperties.Vndk.Enabled) ||
+		proptools.Bool(i.properties.Backend.Ndk.CommonNativeBackendProperties.VndkProperties.Vndk.Enabled)
+
+	if vndkEnabled && !proptools.Bool(i.properties.Unstable) {
+		if i.properties.Frozen == nil {
+			mctx.PropertyErrorf("frozen", "true or false must be specified when the VNDK is enabled on a versioned interface (not `unstable: true`)")
+		}
+		if !proptools.Bool(i.properties.Frozen) && i.properties.Vndk_use_version == nil {
+			mctx.PropertyErrorf("vndk_use_version", "must be specified if interface is unfrozen (or specify 'frozen: false')")
+		}
 	}
 
 	versions := i.getVersions()
@@ -847,12 +961,18 @@
 		if !shouldGenerate {
 			continue
 		}
-		libs = append(libs, addLibrary(mctx, i, nextVersion, lang, requireFrozenVersion))
+		libs = append(libs, addLibrary(mctx, i, nextVersion, lang, requireFrozenVersion, requireFrozenReason))
 		for _, version := range versions {
-			libs = append(libs, addLibrary(mctx, i, version, lang, false))
+			libs = append(libs, addLibrary(mctx, i, version, lang, false, "this is a known frozen version"))
 		}
 	}
 
+	// In the future, we may want to force the -cpp backend to be on host,
+	// and limit its visibility, even if it's not created normally
+	if i.shouldGenerateCppBackend() && len(i.properties.Imports) == 0 {
+		libs = append(libs, addLibrary(mctx, i, nextVersion, langCppAnalyzer, false, "analysis always uses latest version even if frozen"))
+	}
+
 	if unstable {
 		apiDirRoot := filepath.Join(aidlApiDir, i.ModuleBase.Name())
 		aidlDumps, _ := mctx.GlobWithDeps(filepath.Join(mctx.ModuleDir(), apiDirRoot, "**/*.aidl"), nil)
@@ -864,12 +984,6 @@
 		addApiModule(mctx, i)
 	}
 
-	if proptools.Bool(i.properties.VndkProperties.Vndk.Enabled) {
-		if "vintf" != proptools.String(i.properties.Stability) {
-			mctx.PropertyErrorf("stability", "must be \"vintf\" if the module is for VNDK.")
-		}
-	}
-
 	// Reserve this module name for future use
 	mctx.CreateModule(phony.PhonyFactory, &phonyProperties{
 		Name: proptools.StringPtr(i.ModuleBase.Name()),
@@ -966,6 +1080,8 @@
 	}
 
 	paths, imports := getPaths(ctx, srcs, root_dir)
+	imports = append(imports, deps.imports...)
+	imports = append(imports, i.properties.Include_dirs...)
 
 	preprocessCommand := rb.Command().BuiltTool("aidl").
 		FlagWithOutput("--preprocess ", preprocessed).
@@ -974,7 +1090,7 @@
 		preprocessCommand.FlagWithArg("--stability ", *i.properties.Stability)
 	}
 	preprocessCommand.FlagForEachInput("-p", deps.preprocessed)
-	preprocessCommand.FlagForEachArg("-I", concat(imports, i.properties.Include_dirs))
+	preprocessCommand.FlagForEachArg("-I", imports)
 	preprocessCommand.Inputs(paths)
 	name := i.BaseModuleName()
 	if version != "" {
@@ -988,10 +1104,183 @@
 	ctx.AddReverseDependency(ctx.Module(), nil, aidlMetadataSingletonName)
 }
 
-func aidlInterfaceFactory() android.Module {
+func AidlInterfaceFactory() android.Module {
 	i := &aidlInterface{}
 	i.AddProperties(&i.properties)
 	android.InitAndroidModule(i)
-	android.AddLoadHook(i, func(ctx android.LoadHookContext) { aidlInterfaceHook(ctx, i) })
+	android.InitBazelModule(i)
+	android.InitDefaultableModule(i)
+	i.SetDefaultableHook(func(ctx android.DefaultableHookContext) { aidlInterfaceHook(ctx, i) })
 	return i
 }
+
+type aidlInterfaceAttributes struct {
+	aidlLibraryAttributes
+	Versions           bazel.StringListAttribute
+	Stability          *string
+	Versions_with_info []versionWithInfoAttribute
+	Java_config        *javaConfigAttributes
+	Cpp_config         *cppConfigAttributes
+	Ndk_config         *ndkConfigAttributes
+	// Backend_Configs    backendConfigAttributes
+	Unstable *bool
+}
+
+type javaConfigAttributes struct {
+	commonBackendAttributes
+}
+type cppConfigAttributes struct {
+	commonNativeBackendAttributes
+}
+type ndkConfigAttributes struct {
+	commonNativeBackendAttributes
+}
+
+type commonBackendAttributes struct {
+	Enabled         bool
+	Min_sdk_version *string
+}
+
+type commonNativeBackendAttributes struct {
+	commonBackendAttributes
+}
+
+type versionWithInfoAttribute struct {
+	Version string
+	// Versions_with_info.Deps in Bazel is analogous to Versions_with_info.Imports in Soong.
+	// Deps is chosen to be consistent with other Bazel rules/macros for AIDL
+	Deps bazel.LabelListAttribute
+}
+
+type aidlLibraryAttributes struct {
+	Srcs                bazel.LabelListAttribute
+	Hdrs                bazel.LabelListAttribute
+	Deps                bazel.LabelListAttribute
+	Strip_import_prefix *string
+	Flags               []string
+}
+
+// getBazelLabelListForImports returns a bazel label list converted from
+// aidl_interface.imports or aidl_interface.versions_with_info.imports prop
+func getBazelLabelListForImports(ctx android.BazelConversionPathContext, imports []string) bazel.LabelList {
+	type nameAndVersion struct {
+		name    string
+		version string
+	}
+	// An aidl_interface with a version designation doesn't correspond to a specific
+	// module, but rather just imforms Soong on which collection of sources to provide
+	// from a particular interface module.
+	// However in Bazel, we will be creating an aidl_library for each version, so we can
+	// depend directly on a "versioned" module. But, we must look up the "unversioned"
+	// module name in BazelLabelForModuleDeps and then re-attach the version information.
+	namesAndVersions := make([]nameAndVersion, len(imports))
+	names := make([]string, len(imports))
+	for i, dep := range imports {
+		// Split dep into two parts
+		name, version := parseModuleWithVersion(dep)
+		if version == "" {
+			version = "-latest"
+		} else {
+			version = "-V" + version
+		}
+		namesAndVersions[i] = nameAndVersion{
+			name:    name,
+			version: version,
+		}
+		names[i] = name
+	}
+	// Look up bazel label by name without version
+	bazelLabels := android.BazelLabelForModuleDeps(ctx, names)
+	for i := range bazelLabels.Includes {
+		// Re-attach the version to the name
+		bazelLabels.Includes[i].Label = bazelLabels.Includes[i].Label + namesAndVersions[i].version
+	}
+	return bazelLabels
+}
+
+func (i *aidlInterface) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
+	imports := getBazelLabelListForImports(ctx, i.properties.Imports)
+	headers := android.BazelLabelForModuleDeps(ctx, i.properties.Headers)
+	imports.Append(headers)
+
+	var deps bazel.LabelListAttribute
+	if !imports.IsEmpty() {
+		deps = bazel.MakeLabelListAttribute(imports)
+	}
+
+	var versions bazel.StringListAttribute
+	if len(i.properties.Versions) > 0 {
+		versions = bazel.MakeStringListAttribute(append([]string{}, i.properties.Versions...))
+	}
+
+	var javaConfig *javaConfigAttributes
+	var cppConfig *cppConfigAttributes
+	var ndkConfig *ndkConfigAttributes
+	if i.shouldGenerateJavaBackend() {
+		javaConfig = &javaConfigAttributes{}
+		javaConfig.Enabled = true
+		javaConfig.Min_sdk_version = i.minSdkVersion(langJava)
+	}
+	if i.shouldGenerateCppBackend() {
+		cppConfig = &cppConfigAttributes{}
+		cppConfig.Enabled = true
+		cppConfig.Min_sdk_version = i.minSdkVersion(langCpp)
+	}
+	if i.shouldGenerateNdkBackend() {
+		ndkConfig = &ndkConfigAttributes{}
+		ndkConfig.Enabled = true
+		ndkConfig.Min_sdk_version = i.minSdkVersion(langNdk)
+	}
+
+	var versionsWithInfos []versionWithInfoAttribute
+	if len(i.properties.Versions_with_info) > 0 {
+		for _, versionWithInfo := range i.properties.Versions_with_info {
+			imports := getBazelLabelListForImports(ctx, versionWithInfo.Imports)
+			var attributes versionWithInfoAttribute
+			if !imports.IsEmpty() {
+				attributes = versionWithInfoAttribute{
+					Version: versionWithInfo.Version,
+					Deps:    bazel.MakeLabelListAttribute(imports),
+				}
+			} else {
+				attributes = versionWithInfoAttribute{
+					Version: versionWithInfo.Version,
+				}
+			}
+			versionsWithInfos = append(versionsWithInfos, attributes)
+		}
+	}
+
+	srcsAttr := bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, i.properties.Srcs))
+	var stripImportPrefixAttr *string = nil
+	if i.properties.Local_include_dir != "" && !srcsAttr.IsEmpty() {
+		stripImportPrefixAttr = &i.properties.Local_include_dir
+	}
+
+	attrs := &aidlInterfaceAttributes{
+		aidlLibraryAttributes: aidlLibraryAttributes{
+			Srcs:                srcsAttr,
+			Flags:               i.properties.Flags,
+			Deps:                deps,
+			Strip_import_prefix: stripImportPrefixAttr,
+		},
+		Versions:           versions,
+		Stability:          i.properties.Stability,
+		Versions_with_info: versionsWithInfos,
+		Java_config:        javaConfig,
+		Cpp_config:         cppConfig,
+		Ndk_config:         ndkConfig,
+		Unstable:           i.properties.Unstable,
+	}
+
+	interfaceName := strings.TrimSuffix(i.Name(), "_interface")
+
+	ctx.CreateBazelTargetModule(
+		bazel.BazelTargetModuleProperties{
+			Rule_class:        "aidl_interface",
+			Bzl_load_location: "//build/bazel/rules/aidl:interface.bzl",
+		},
+		android.CommonAttributes{Name: interfaceName},
+		attrs,
+	)
+}
diff --git a/build/aidl_interface_backends.go b/build/aidl_interface_backends.go
index efbbc76..71f8964 100644
--- a/build/aidl_interface_backends.go
+++ b/build/aidl_interface_backends.go
@@ -20,22 +20,28 @@
 	"android/soong/java"
 	"android/soong/rust"
 
+	"fmt"
 	"path/filepath"
 	"strings"
 
 	"github.com/google/blueprint/proptools"
 )
 
-func addLibrary(mctx android.LoadHookContext, i *aidlInterface, version string, lang string, notFrozen bool) string {
+func addLibrary(mctx android.DefaultableHookContext, i *aidlInterface, version string, lang string, notFrozen bool, requireFrozenReason string) string {
 	if lang == langJava {
-		return addJavaLibrary(mctx, i, version, notFrozen)
+		return addJavaLibrary(mctx, i, version, notFrozen, requireFrozenReason)
 	} else if lang == langRust {
-		return addRustLibrary(mctx, i, version, notFrozen)
+		return addRustLibrary(mctx, i, version, notFrozen, requireFrozenReason)
+	} else if lang == langCppAnalyzer {
+		return addCppAnalyzerLibrary(mctx, i, version, notFrozen, requireFrozenReason)
+	} else if lang == langCpp || lang == langNdk || lang == langNdkPlatform {
+		return addCppLibrary(mctx, i, version, lang, notFrozen, requireFrozenReason)
+	} else {
+		panic(fmt.Errorf("unsupported language backend %q\n", lang))
 	}
-	return addCppLibrary(mctx, i, version, lang, notFrozen)
 }
 
-func addCppLibrary(mctx android.LoadHookContext, i *aidlInterface, version string, lang string, notFrozen bool) string {
+func addCppLibrary(mctx android.DefaultableHookContext, i *aidlInterface, version string, lang string, notFrozen bool, requireFrozenReason string) string {
 	cppSourceGen := i.versionedName(version) + "-" + lang + "-source"
 	cppModuleGen := i.versionedName(version) + "-" + lang
 
@@ -73,29 +79,31 @@
 	mctx.CreateModule(aidlGenFactory, &nameProperties{
 		Name: proptools.StringPtr(cppSourceGen),
 	}, &aidlGenProperties{
-		Srcs:            srcs,
-		AidlRoot:        aidlRoot,
-		Imports:         i.getImportsForVersion(version),
-		Stability:       i.properties.Stability,
-		Min_sdk_version: i.minSdkVersion(lang),
-		Lang:            lang,
-		BaseName:        i.ModuleBase.Name(),
-		GenLog:          genLog,
-		Version:         i.versionForInitVersionCompat(version),
-		GenTrace:        genTrace,
-		Unstable:        i.properties.Unstable,
-		NotFrozen:       notFrozen,
-		Flags:           i.flagsForAidlGenRule(version),
+		Srcs:                srcs,
+		AidlRoot:            aidlRoot,
+		Imports:             i.getImportsForVersion(version),
+		Headers:             i.properties.Headers,
+		Stability:           i.properties.Stability,
+		Min_sdk_version:     i.minSdkVersion(lang),
+		Lang:                lang,
+		BaseName:            i.ModuleBase.Name(),
+		GenLog:              genLog,
+		Version:             i.versionForInitVersionCompat(version),
+		GenTrace:            genTrace,
+		Unstable:            i.properties.Unstable,
+		NotFrozen:           notFrozen,
+		RequireFrozenReason: requireFrozenReason,
+		Flags:               i.flagsForAidlGenRule(version),
 	})
 
 	importExportDependencies := []string{}
-	var sharedLibDependency []string
+	sharedLibDependency := commonProperties.Additional_shared_libraries
 	var headerLibs []string
 	var sdkVersion *string
 	var stl *string
 	var cpp_std *string
 	var hostSupported *bool
-	var addCflags []string
+	addCflags := commonProperties.Cflags
 	targetProp := ccTargetProperties{
 		Darwin: darwinProperties{Enabled: proptools.BoolPtr(false)},
 	}
@@ -186,18 +194,121 @@
 				Target:                    targetProp,
 				Tidy:                      proptools.BoolPtr(true),
 				// Do the tidy check only for the generated headers
-				Tidy_flags:            []string{"--header-filter=" + android.PathForOutput(mctx).String() + ".*"},
-				Tidy_checks_as_errors: []string{"*"},
+				Tidy_flags: []string{"--header-filter=" + android.PathForOutput(mctx).String() + ".*"},
+				Tidy_checks_as_errors: []string{
+					"*",
+					"-clang-analyzer-deadcode.DeadStores", // b/253079031
+					"-clang-analyzer-cplusplus.NewDeleteLeaks",  // b/253079031
+					"-clang-analyzer-optin.performance.Padding", // b/253079031
+				},
+				Include_build_directory: proptools.BoolPtr(false), // b/254682497
 			}, &i.properties.VndkProperties,
 			&commonProperties.VndkProperties,
 			&overrideVndkProperties,
+			// the logic to create implementation libraries has been reimplemented
+			// in a Bazel macro, so these libraries should not be converted with
+			// bp2build
+			// TODO(b/237810289) perhaps do something different here so that we aren't
+			// also disabling these modules in mixed builds
+			&bazelProperties{
+				&Bazel_module{
+					Bp2build_available: proptools.BoolPtr(false),
+				},
+			},
 		},
 	})
 
 	return cppModuleGen
 }
 
-func addJavaLibrary(mctx android.LoadHookContext, i *aidlInterface, version string, notFrozen bool) string {
+func addCppAnalyzerLibrary(mctx android.DefaultableHookContext, i *aidlInterface, version string, notFrozen bool, requireFrozenReason string) string {
+	cppAnalyzerSourceGen := i.versionedName("") + "-cpp-analyzer-source"
+	cppAnalyzerModuleGen := i.versionedName("") + "-cpp-analyzer"
+
+	srcs, aidlRoot := i.srcsForVersion(mctx, version)
+	if len(srcs) == 0 {
+		return ""
+	}
+
+	mctx.CreateModule(aidlGenFactory, &nameProperties{
+		Name: proptools.StringPtr(cppAnalyzerSourceGen),
+	}, &aidlGenProperties{
+		Srcs:                srcs,
+		AidlRoot:            aidlRoot,
+		Imports:             i.getImportsForVersion(version),
+		Stability:           i.properties.Stability,
+		Min_sdk_version:     i.minSdkVersion(langCpp),
+		Lang:                langCppAnalyzer,
+		BaseName:            i.ModuleBase.Name(),
+		Version:             i.versionForInitVersionCompat(version),
+		Unstable:            i.properties.Unstable,
+		NotFrozen:           notFrozen,
+		RequireFrozenReason: requireFrozenReason,
+		Flags:               i.flagsForAidlGenRule(version),
+	})
+
+	importExportDependencies := []string{}
+	var hostSupported *bool
+	var addCflags []string // not using cpp backend cflags for now
+	targetProp := ccTargetProperties{
+		Darwin: darwinProperties{Enabled: proptools.BoolPtr(false)},
+	}
+
+	importExportDependencies = append(importExportDependencies, "libbinder", "libutils")
+	hostSupported = i.properties.Host_supported
+
+	vendorAvailable := i.properties.Vendor_available
+	odmAvailable := i.properties.Odm_available
+	productAvailable := i.properties.Product_available
+	recoveryAvailable := i.properties.Recovery_available
+	productAvailable = nil
+
+	g := aidlImplementationGeneratorProperties{
+		ModuleProperties: []interface{}{
+			&ccProperties{
+				Name:                      proptools.StringPtr(cppAnalyzerModuleGen),
+				Vendor_available:          vendorAvailable,
+				Odm_available:             odmAvailable,
+				Product_available:         productAvailable,
+				Recovery_available:        recoveryAvailable,
+				Host_supported:            hostSupported,
+				Defaults:                  []string{"aidl-cpp-module-defaults"},
+				Double_loadable:           i.properties.Double_loadable,
+				Installable:               proptools.BoolPtr(true),
+				Generated_sources:         []string{cppAnalyzerSourceGen},
+				Generated_headers:         []string{cppAnalyzerSourceGen},
+				Export_generated_headers:  []string{cppAnalyzerSourceGen},
+				Shared_libs:               append(importExportDependencies, i.versionedName(version)+"-"+langCpp),
+				Static_libs:               []string{"aidl-analyzer-main"},
+				Export_shared_lib_headers: importExportDependencies,
+				Cflags:                    append(addCflags, "-Wextra", "-Wall", "-Werror", "-Wextra-semi"),
+				Min_sdk_version:           i.minSdkVersion(langCpp),
+				Target:                    targetProp,
+				Tidy:                      proptools.BoolPtr(true),
+				// Do the tidy check only for the generated headers
+				Tidy_flags: []string{"--header-filter=" + android.PathForOutput(mctx).String() + ".*"},
+				Tidy_checks_as_errors: []string{
+					"*",
+					"-clang-diagnostic-deprecated-declarations", // b/253081572
+					"-clang-analyzer-deadcode.DeadStores",       // b/253079031
+					"-clang-analyzer-cplusplus.NewDeleteLeaks",  // b/253079031
+					"-clang-analyzer-optin.performance.Padding", // b/253079031
+				},
+			},
+			// TODO(b/237810289) disable converting -cpp-analyzer module in bp2build
+			&bazelProperties{
+				&Bazel_module{
+					Bp2build_available: proptools.BoolPtr(false),
+				},
+			},
+		},
+	}
+
+	mctx.CreateModule(wrapLibraryFactory(cc.BinaryFactory), g.ModuleProperties...)
+	return cppAnalyzerModuleGen
+}
+
+func addJavaLibrary(mctx android.DefaultableHookContext, i *aidlInterface, version string, notFrozen bool, requireFrozenReason string) string {
 	javaSourceGen := i.versionedName(version) + "-java-source"
 	javaModuleGen := i.versionedName(version) + "-java"
 	srcs, aidlRoot := i.srcsForVersion(mctx, version)
@@ -221,20 +332,22 @@
 	mctx.CreateModule(aidlGenFactory, &nameProperties{
 		Name: proptools.StringPtr(javaSourceGen),
 	}, &aidlGenProperties{
-		Srcs:            srcs,
-		AidlRoot:        aidlRoot,
-		Imports:         i.getImportsForVersion(version),
-		Stability:       i.properties.Stability,
-		Min_sdk_version: minSdkVersion,
-		Platform_apis:   proptools.Bool(i.properties.Backend.Java.Platform_apis),
-		Lang:            langJava,
-		BaseName:        i.ModuleBase.Name(),
-		Version:         version,
-		GenRpc:          proptools.Bool(i.properties.Backend.Java.Gen_rpc),
-		GenTrace:        i.genTrace(langJava),
-		Unstable:        i.properties.Unstable,
-		NotFrozen:       notFrozen,
-		Flags:           i.flagsForAidlGenRule(version),
+		Srcs:                srcs,
+		AidlRoot:            aidlRoot,
+		Imports:             i.getImportsForVersion(version),
+		Headers:             i.properties.Headers,
+		Stability:           i.properties.Stability,
+		Min_sdk_version:     minSdkVersion,
+		Platform_apis:       proptools.Bool(i.properties.Backend.Java.Platform_apis),
+		Lang:                langJava,
+		BaseName:            i.ModuleBase.Name(),
+		Version:             version,
+		GenRpc:              proptools.Bool(i.properties.Backend.Java.Gen_rpc),
+		GenTrace:            i.genTrace(langJava),
+		Unstable:            i.properties.Unstable,
+		NotFrozen:           notFrozen,
+		RequireFrozenReason: requireFrozenReason,
+		Flags:               i.flagsForAidlGenRule(version),
 	})
 
 	mctx.CreateModule(aidlImplementationGeneratorFactory, &nameProperties{
@@ -244,22 +357,35 @@
 		AidlInterfaceName: i.ModuleBase.Name(),
 		Version:           version,
 		Imports:           i.getImportsForVersion(version),
-		ModuleProperties: []interface{}{&javaProperties{
-			Name:            proptools.StringPtr(javaModuleGen),
-			Installable:     proptools.BoolPtr(true),
-			Defaults:        []string{"aidl-java-module-defaults"},
-			Sdk_version:     sdkVersion,
-			Platform_apis:   i.properties.Backend.Java.Platform_apis,
-			Srcs:            []string{":" + javaSourceGen},
-			Apex_available:  i.properties.Backend.Java.Apex_available,
-			Min_sdk_version: i.minSdkVersion(langJava),
-		}, &i.properties.Backend.Java.LintProperties},
+		ModuleProperties: []interface{}{
+			&javaProperties{
+				Name:            proptools.StringPtr(javaModuleGen),
+				Installable:     proptools.BoolPtr(true),
+				Defaults:        []string{"aidl-java-module-defaults"},
+				Sdk_version:     sdkVersion,
+				Platform_apis:   i.properties.Backend.Java.Platform_apis,
+				Srcs:            []string{":" + javaSourceGen},
+				Apex_available:  i.properties.Backend.Java.Apex_available,
+				Min_sdk_version: i.minSdkVersion(langJava),
+			},
+			&i.properties.Backend.Java.LintProperties,
+			// the logic to create implementation libraries has been reimplemented
+			// in a Bazel macro, so these libraries should not be converted with
+			// bp2build
+			// TODO(b/237810289) perhaps do something different here so that we aren't
+			// also disabling these modules in mixed builds
+			&bazelProperties{
+				&Bazel_module{
+					Bp2build_available: proptools.BoolPtr(false),
+				},
+			},
+		},
 	})
 
 	return javaModuleGen
 }
 
-func addRustLibrary(mctx android.LoadHookContext, i *aidlInterface, version string, notFrozen bool) string {
+func addRustLibrary(mctx android.DefaultableHookContext, i *aidlInterface, version string, notFrozen bool, requireFrozenReason string) string {
 	rustSourceGen := i.versionedName(version) + "-rust-source"
 	rustModuleGen := i.versionedName(version) + "-rust"
 	srcs, aidlRoot := i.srcsForVersion(mctx, version)
@@ -273,17 +399,19 @@
 	mctx.CreateModule(aidlGenFactory, &nameProperties{
 		Name: proptools.StringPtr(rustSourceGen),
 	}, &aidlGenProperties{
-		Srcs:            srcs,
-		AidlRoot:        aidlRoot,
-		Imports:         i.getImportsForVersion(version),
-		Stability:       i.properties.Stability,
-		Min_sdk_version: i.minSdkVersion(langRust),
-		Lang:            langRust,
-		BaseName:        i.ModuleBase.Name(),
-		Version:         i.versionForInitVersionCompat(version),
-		Unstable:        i.properties.Unstable,
-		NotFrozen:       notFrozen,
-		Flags:           i.flagsForAidlGenRule(version),
+		Srcs:                srcs,
+		AidlRoot:            aidlRoot,
+		Imports:             i.getImportsForVersion(version),
+		Headers:             i.properties.Headers,
+		Stability:           i.properties.Stability,
+		Min_sdk_version:     i.minSdkVersion(langRust),
+		Lang:                langRust,
+		BaseName:            i.ModuleBase.Name(),
+		Version:             i.versionForInitVersionCompat(version),
+		Unstable:            i.properties.Unstable,
+		NotFrozen:           notFrozen,
+		RequireFrozenReason: requireFrozenReason,
+		Flags:               i.flagsForAidlGenRule(version),
 	})
 
 	versionedRustName := fixRustName(i.versionedName(version))
@@ -364,8 +492,8 @@
 
 func (i *aidlInterface) isModuleForVndk(version string) bool {
 	if i.properties.Vndk_use_version != nil {
-		if !i.hasVersion() {
-			panic("does not make sense, vndk_use_version specififed")
+		if !i.hasVersion() && version != *i.properties.Vndk_use_version {
+			panic("unrecognized vndk_use_version")
 		}
 		// Will be exactly one of the version numbers
 		return version == *i.properties.Vndk_use_version
diff --git a/build/aidl_interface_bp2build_test.go b/build/aidl_interface_bp2build_test.go
new file mode 100644
index 0000000..78c6399
--- /dev/null
+++ b/build/aidl_interface_bp2build_test.go
@@ -0,0 +1,336 @@
+package aidl
+
+import (
+	"android/soong/android"
+	"android/soong/bp2build"
+	"testing"
+)
+
+func runAidlInterfaceTestCase(t *testing.T, tc bp2build.Bp2buildTestCase) {
+	t.Helper()
+	bp2build.RunBp2BuildTestCase(
+		t,
+		func(ctx android.RegistrationContext) {
+			ctx.RegisterModuleType("aidl_interface", AidlInterfaceFactory)
+			ctx.RegisterModuleType("aidl_interface_headers", AidlInterfaceHeadersFactory)
+		},
+		tc,
+	)
+}
+
+func TestAidlInterfaceHeaders(t *testing.T) {
+	runAidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{
+		Description: `aidl_interface_headers`,
+		Blueprint: `
+			aidl_interface_headers {
+				name: "aidl-interface-headers",
+				include_dir: "src",
+				srcs: [
+					"src/A.aidl",
+				],
+			}`,
+		ExpectedBazelTargets: []string{
+			bp2build.MakeBazelTargetNoRestrictions("aidl_library", "aidl-interface-headers", bp2build.AttrNameToString{
+				"strip_import_prefix": `"src"`,
+				"hdrs":                `["src/A.aidl"]`,
+			}),
+		},
+	})
+}
+
+func TestAidlInterface(t *testing.T) {
+	runAidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{
+		Description: `aidl_interface with single "latest" aidl_interface import`,
+		Blueprint: `
+			aidl_interface_headers {
+				name: "aidl-interface-headers",
+			}
+			aidl_interface {
+				name: "aidl-interface-import",
+				versions: [
+					"1",
+					"2",
+				],
+			}
+			aidl_interface {
+				name: "aidl-interface1",
+				flags: ["--flag1"],
+				imports: [
+				"aidl-interface-import-V1",
+				],
+				headers: [
+					"aidl-interface-headers",
+				],
+				versions: [
+					"1",
+					"2",
+					"3",
+				],
+			}`,
+		ExpectedBazelTargets: []string{
+			bp2build.MakeBazelTargetNoRestrictions("aidl_library", "aidl-interface-headers", bp2build.AttrNameToString{}),
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "aidl-interface-import", bp2build.AttrNameToString{
+				"java_config": `{
+        "enabled": True,
+    }`,
+				"cpp_config": `{
+        "enabled": True,
+    }`,
+				"ndk_config": `{
+        "enabled": True,
+    }`,
+				"versions": `[
+        "1",
+        "2",
+    ]`,
+			}),
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "aidl-interface1", bp2build.AttrNameToString{
+				"java_config": `{
+        "enabled": True,
+    }`,
+				"cpp_config": `{
+        "enabled": True,
+    }`,
+				"ndk_config": `{
+        "enabled": True,
+    }`,
+				"deps": `[
+        ":aidl-interface-import-V1",
+        ":aidl-interface-headers",
+    ]`,
+				"flags": `["--flag1"]`,
+				"versions": `[
+        "1",
+        "2",
+        "3",
+    ]`,
+			}),
+		},
+	})
+}
+
+func TestAidlInterfaceWithNoProperties(t *testing.T) {
+	runAidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{
+		Description: `aidl_interface no properties set`,
+		Blueprint: `
+			aidl_interface {
+				name: "aidl-interface1",
+			}`,
+		ExpectedBazelTargets: []string{
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "aidl-interface1", bp2build.AttrNameToString{
+				"java_config": `{
+        "enabled": True,
+    }`,
+				"cpp_config": `{
+        "enabled": True,
+    }`,
+				"ndk_config": `{
+        "enabled": True,
+    }`,
+			}),
+		},
+	})
+}
+
+func TestAidlInterfaceWithDisabledBackends(t *testing.T) {
+	runAidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{
+		Description: `aidl_interface with some backends disabled`,
+		Blueprint: `
+			aidl_interface {
+				name: "aidl-interface1",
+				backend: {
+					ndk: {
+						enabled: false,
+					},
+					cpp: {
+						enabled: false,
+					},
+				},
+			}`,
+		ExpectedBazelTargets: []string{
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "aidl-interface1", bp2build.AttrNameToString{
+				"java_config": `{
+        "enabled": True,
+    }`,
+			}),
+		},
+	})
+}
+
+func TestAidlInterfaceWithLatestImport(t *testing.T) {
+	runAidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{
+		Description: `aidl_interface with single "latest" aidl_interface import`,
+		Blueprint: `
+			aidl_interface {
+				name: "aidl-interface-import",
+				versions: [
+					"1",
+					"2",
+				],
+			}
+			aidl_interface {
+				name: "aidl-interface1",
+				imports: [
+					"aidl-interface-import",
+				],
+				versions: [
+					"1",
+					"2",
+					"3",
+				],
+			}`,
+		ExpectedBazelTargets: []string{
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "aidl-interface-import", bp2build.AttrNameToString{
+				"java_config": `{
+        "enabled": True,
+    }`,
+				"cpp_config": `{
+        "enabled": True,
+    }`,
+				"ndk_config": `{
+        "enabled": True,
+    }`,
+				"versions": `[
+        "1",
+        "2",
+    ]`,
+			}),
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "aidl-interface1", bp2build.AttrNameToString{
+				"java_config": `{
+        "enabled": True,
+    }`,
+				"cpp_config": `{
+        "enabled": True,
+    }`,
+				"ndk_config": `{
+        "enabled": True,
+    }`,
+				"deps": `[":aidl-interface-import-latest"]`,
+				"versions": `[
+        "1",
+        "2",
+        "3",
+    ]`,
+			}),
+		},
+	})
+}
+
+func TestAidlInterfaceWithVersionedImport(t *testing.T) {
+	runAidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{
+		Description: `aidl_interface with single versioned aidl_interface import`,
+		Blueprint: `
+			aidl_interface {
+				name: "aidl-interface-import",
+				versions: [
+					"1",
+					"2",
+				],
+			}
+			aidl_interface {
+				name: "aidl-interface1",
+				imports: [
+					"aidl-interface-import-V2",
+				],
+				versions: [
+					"1",
+					"2",
+					"3",
+				],
+			}`,
+		ExpectedBazelTargets: []string{
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "aidl-interface-import", bp2build.AttrNameToString{
+				"java_config": `{
+        "enabled": True,
+    }`,
+				"cpp_config": `{
+        "enabled": True,
+    }`,
+				"ndk_config": `{
+        "enabled": True,
+    }`,
+				"versions": `[
+        "1",
+        "2",
+    ]`,
+			}),
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "aidl-interface1", bp2build.AttrNameToString{
+				"java_config": `{
+        "enabled": True,
+    }`,
+				"cpp_config": `{
+        "enabled": True,
+    }`,
+				"ndk_config": `{
+        "enabled": True,
+    }`,
+				"deps": `[":aidl-interface-import-V2"]`,
+				"versions": `[
+        "1",
+        "2",
+        "3",
+    ]`,
+			}),
+		},
+	})
+}
+
+func TestAidlInterfaceWithCppAndNdkConfigs(t *testing.T) {
+	runAidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{
+		Description: `aidl_interface with cpp and ndk configs`,
+		Blueprint: `
+			aidl_interface {
+				name: "foo",
+                backend: {
+                    java: {
+                        enabled: false,
+                    },
+                    cpp: {
+                        min_sdk_version: "2",
+                    },
+                    ndk: {
+                        min_sdk_version: "1",
+                    },
+                }
+			}`,
+		ExpectedBazelTargets: []string{
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "foo", bp2build.AttrNameToString{
+				"cpp_config": `{
+        "enabled": True,
+        "min_sdk_version": "2",
+    }`,
+				"ndk_config": `{
+        "enabled": True,
+        "min_sdk_version": "1",
+    }`,
+			}),
+		},
+	})
+}
+
+func TestAidlInterfaceWithUnstablePropSet(t *testing.T) {
+	runAidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{
+		Description: `aidl_interface with unstable prop set`,
+		Blueprint: `
+			aidl_interface {
+				name: "foo",
+				unstable: true,
+                backend: {
+                    java: {
+                        enabled: false,
+                    },
+                    cpp: {
+                        enabled: false,
+                    },
+                }
+			}`,
+		ExpectedBazelTargets: []string{
+			bp2build.MakeBazelTargetNoRestrictions("aidl_interface", "foo", bp2build.AttrNameToString{
+				"unstable": "True",
+				"ndk_config": `{
+        "enabled": True,
+    }`,
+			}),
+		},
+	})
+}
diff --git a/build/aidl_interface_defaults.go b/build/aidl_interface_defaults.go
new file mode 100644
index 0000000..50d93e3
--- /dev/null
+++ b/build/aidl_interface_defaults.go
@@ -0,0 +1,32 @@
+package aidl
+
+import (
+	"android/soong/android"
+)
+
+func init() {
+	android.RegisterModuleType("aidl_interface_defaults", AidlInterfaceDefaultsFactory)
+}
+
+type Defaults struct {
+	android.ModuleBase
+	android.DefaultsModuleBase
+}
+
+func (d *Defaults) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+}
+
+func (d *Defaults) DepsMutator(ctx android.BottomUpMutatorContext) {
+}
+
+func AidlInterfaceDefaultsFactory() android.Module {
+	module := &Defaults{}
+
+	module.AddProperties(
+		&aidlInterfaceProperties{},
+	)
+
+	android.InitDefaultsModule(module)
+
+	return module
+}
diff --git a/build/aidl_interface_headers.go b/build/aidl_interface_headers.go
new file mode 100644
index 0000000..6ad2a8c
--- /dev/null
+++ b/build/aidl_interface_headers.go
@@ -0,0 +1,90 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package aidl
+
+import (
+	"path/filepath"
+
+	"android/soong/android"
+	"android/soong/bazel"
+
+	"github.com/google/blueprint"
+	"github.com/google/blueprint/proptools"
+)
+
+func init() {
+	android.RegisterModuleType("aidl_interface_headers", AidlInterfaceHeadersFactory)
+}
+
+type AidlInterfaceHeadersInfo struct {
+	Srcs       android.Paths
+	IncludeDir string
+}
+
+var AidlInterfaceHeadersProvider = blueprint.NewProvider(AidlInterfaceHeadersInfo{})
+
+type aidlInterfaceHeadersProperties struct {
+	// List of .aidl files which compose this interface.
+	Srcs []string `android:"path"`
+
+	// Relative path for includes. assumes AIDL path is relative to current directory.
+	Include_dir *string
+}
+
+type aidlInterfaceHeaders struct {
+	android.ModuleBase
+	android.BazelModuleBase
+
+	properties aidlInterfaceHeadersProperties
+
+	srcs android.Paths
+}
+
+// Modules which provide AIDL sources that are only used to provide "-I" flags to the
+// aidl tool. No language bindings are generated from these modules. Typically this will
+// be used to provide includes for UnstructuredParcelable AIDL definitions such as those
+// coming from framework modules.
+func AidlInterfaceHeadersFactory() android.Module {
+	i := &aidlInterfaceHeaders{}
+	i.AddProperties(&i.properties)
+	android.InitAndroidModule(i)
+	android.InitBazelModule(i)
+	return i
+}
+
+func (i *aidlInterfaceHeaders) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
+	srcs := android.BazelLabelForModuleSrc(ctx, i.properties.Srcs)
+
+	attrs := &aidlLibraryAttributes{
+		Hdrs:                bazel.MakeLabelListAttribute(srcs),
+		Strip_import_prefix: i.properties.Include_dir,
+	}
+
+	ctx.CreateBazelTargetModule(
+		bazel.BazelTargetModuleProperties{
+			Rule_class:        "aidl_library",
+			Bzl_load_location: "//build/bazel/rules/aidl:library.bzl",
+		},
+		android.CommonAttributes{Name: i.Name()},
+		attrs,
+	)
+}
+
+func (i *aidlInterfaceHeaders) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+	ctx.SetProvider(AidlInterfaceHeadersProvider, AidlInterfaceHeadersInfo{
+		Srcs:       android.PathsForModuleSrc(ctx, i.properties.Srcs),
+		IncludeDir: filepath.Join(ctx.ModuleDir(), proptools.String(i.properties.Include_dir)),
+	})
+}
diff --git a/build/aidl_rust_glue.py b/build/aidl_rust_glue.py
index acbd871..a110618 100755
--- a/build/aidl_rust_glue.py
+++ b/build/aidl_rust_glue.py
@@ -87,7 +87,7 @@
       lib_rs_file.write("  pub(crate) use %s::mangled::*;\n" % imp)
     lib_rs_file.write("}\n")
 
-if __name__ == "__main__":
+def execute():
   parser = argparse.ArgumentParser(description='Generate the top-level lib.rs.')
   parser.add_argument('output', help='Path to output .rs file')
   parser.add_argument('root', help='Common ancestor of all input files')
@@ -100,3 +100,6 @@
     sys.exit(1)
 
   sys.exit(main(args.output, args.root, args.inputs, args.imports))
+
+if __name__ == "__main__":
+  execute()
diff --git a/build/aidl_test.go b/build/aidl_test.go
index 17d002c..904ffbc 100644
--- a/build/aidl_test.go
+++ b/build/aidl_test.go
@@ -95,12 +95,19 @@
 			name: "libbinder",
 			recovery_available: true,
 		}
+		cc_library_static {
+			name: "aidl-analyzer-main",
+			host_supported: true,
+			vendor_available: true,
+			recovery_available: true,
+		}
 		cc_library {
 			name: "libutils",
 			recovery_available: true,
 		}
 		cc_library {
 			name: "libcutils",
+			recovery_available: true,
 		}
 		cc_library {
 			name: "libbinder_ndk",
@@ -173,7 +180,9 @@
 	preparers = append(preparers,
 		rust.PrepareForTestWithRustBuildComponents,
 		android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
-			ctx.RegisterModuleType("aidl_interface", aidlInterfaceFactory)
+			ctx.RegisterModuleType("aidl_interface", AidlInterfaceFactory)
+			ctx.RegisterModuleType("aidl_interface_headers", AidlInterfaceHeadersFactory)
+			ctx.RegisterModuleType("aidl_interface_defaults", AidlInterfaceDefaultsFactory)
 			ctx.RegisterSingletonModuleType("aidl_interfaces_metadata", aidlInterfacesMetadataSingletonFactory)
 			ctx.RegisterModuleType("rust_defaults", func() android.Module {
 				return rust.DefaultsFactory()
@@ -253,7 +262,7 @@
 			},
 		},
 	}`
-	expectedError := `module "foo_interface": versions: must be set \(need to be frozen\) when "unstable" is false, PLATFORM_VERSION_CODENAME is REL, and "owner" property is missing.`
+	expectedError := `module "foo_interface": versions: must be set \(need to be frozen\) because`
 	testAidlError(t, expectedError, vintfWithoutVersionBp, setReleaseEnv())
 	testAidlError(t, expectedError, vintfWithoutVersionBp, setTestFreezeEnv())
 
@@ -282,9 +291,10 @@
 		"aidl_api/foo/1/.hash":      nil,
 	})
 
-	expectedError := `foo-V2-java is disallowed in release version because it is unstable.`
-	testAidlError(t, expectedError, unstableVersionUsageInJavaBp, setReleaseEnv(), files)
-	testAidlError(t, expectedError, unstableVersionUsageInJavaBp, setTestFreezeEnv(), files)
+	expectedError1 := `foo-V2-java is an unfrozen development version, and it can't be used because "this is a release branch - freeze it or set 'owners:'"`
+	testAidlError(t, expectedError1, unstableVersionUsageInJavaBp, setReleaseEnv(), files)
+	expectedError2 := `foo-V2-java is an unfrozen development version, and it can't be used because "this is a release branch \(simulated by setting AIDL_FROZEN_REL\) - freeze it or set 'owners:'"`
+	testAidlError(t, expectedError2, unstableVersionUsageInJavaBp, setTestFreezeEnv(), files)
 	testAidl(t, unstableVersionUsageInJavaBp, files)
 
 	// A stable version can be used in release version
@@ -332,12 +342,335 @@
 		"aidl_api/xxx/1/.hash":      nil,
 	})
 
-	expectedError := `xxx-V2-java is disallowed in release version because it is unstable.`
+	expectedError := `xxx-V2-java is an unfrozen development version`
 	testAidlError(t, expectedError, unstableVersionUsageInJavaBp, setReleaseEnv(), files)
 	testAidlError(t, expectedError, unstableVersionUsageInJavaBp, setTestFreezeEnv(), files)
 	testAidl(t, unstableVersionUsageInJavaBp, files)
 }
 
+func TestFrozenTrueSimple(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "foo",
+		versions: ["1"],
+		frozen: true,
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+	})
+
+	testAidl(t, frozenTest, files, setReleaseEnv())
+	testAidl(t, frozenTest, files, setTestFreezeEnv())
+	testAidl(t, frozenTest, files)
+}
+
+func TestFrozenWithNoVersions(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "foo",
+		frozen: true,
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+	})
+
+	expectedError := `cannot be frozen without versions`
+	testAidlError(t, expectedError, frozenTest, files, setReleaseEnv())
+	testAidlError(t, expectedError, frozenTest, files, setTestFreezeEnv())
+	testAidlError(t, expectedError, frozenTest, files)
+}
+
+func TestFrozenImportingFrozen(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "xxx",
+		srcs: ["IFoo.aidl"],
+		frozen: true,
+		versions: ["1"],
+	}
+	aidl_interface {
+		name: "foo",
+		imports: ["xxx-V1"],
+		versions: ["1"],
+		frozen: true,
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+		"aidl_api/xxx/1/foo.1.aidl": nil,
+		"aidl_api/xxx/1/.hash":      nil,
+	})
+
+	testAidl(t, frozenTest, files, setReleaseEnv())
+	testAidl(t, frozenTest, files, setTestFreezeEnv())
+	testAidl(t, frozenTest, files)
+}
+
+func TestFrozenImportingVersionUnfrozen(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "xxx",
+		srcs: ["IFoo.aidl"],
+		frozen: false,
+		versions: ["1"],
+	}
+	aidl_interface {
+		name: "foo",
+		imports: ["xxx-V1"],
+		versions: ["1"],
+		frozen: true,
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+		"aidl_api/xxx/1/foo.1.aidl": nil,
+		"aidl_api/xxx/1/.hash":      nil,
+	})
+
+	testAidl(t, frozenTest, files, setReleaseEnv())
+	testAidl(t, frozenTest, files, setTestFreezeEnv())
+	testAidl(t, frozenTest, files)
+}
+
+func TestFrozenImportingUnfrozenWithFrozen(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "xxx",
+		srcs: ["IFoo.aidl"],
+		frozen: false,
+		versions: ["1"],
+	}
+	aidl_interface {
+		name: "foo",
+		imports: ["xxx"],
+		versions: ["1"],
+		frozen: true,
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+		"aidl_api/xxx/1/foo.1.aidl": nil,
+		"aidl_api/xxx/1/.hash":      nil,
+	})
+
+	expectedError := `"foo" imports "xxx" which is not frozen. Either "foo" must`
+	testAidlError(t, expectedError, frozenTest, files, setReleaseEnv())
+	testAidlError(t, expectedError, frozenTest, files, setTestFreezeEnv())
+	testAidlError(t, expectedError, frozenTest, files)
+}
+
+func TestFrozenImportingUnfrozen(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "xxx",
+		srcs: ["IFoo.aidl"],
+		frozen: false,
+	}
+	aidl_interface {
+		name: "foo",
+		imports: ["xxx"],
+		versions: ["1"],
+		frozen: true,
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+		"aidl_api/xxx/1/foo.1.aidl": nil,
+		"aidl_api/xxx/1/.hash":      nil,
+	})
+
+	expectedError := `versions: must be set \(need to be frozen\) because`
+	testAidlError(t, expectedError, frozenTest, files, setReleaseEnv())
+	testAidlError(t, expectedError, frozenTest, files, setTestFreezeEnv())
+
+	expectedError = `"foo" imports "xxx" which is not frozen. Either "foo" must`
+	testAidlError(t, expectedError, frozenTest, files)
+}
+
+// This is allowed to keep legacy behavior. It could be prevented directly after API-freeze
+// if all frozen interfaces are explicitly marked `frozen: true,`.
+func TestFrozenImportingUnSpecified(t *testing.T) {
+	frozenTrueSimple := `
+	aidl_interface {
+		name: "xxx",
+		srcs: ["IFoo.aidl"],
+		versions: ["1"],
+	}
+	aidl_interface {
+		name: "foo",
+		imports: ["xxx-V1"],
+		versions: ["1"],
+		frozen: true,
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+		"aidl_api/xxx/1/foo.1.aidl": nil,
+		"aidl_api/xxx/1/.hash":      nil,
+	})
+
+	testAidl(t, frozenTrueSimple, files, setReleaseEnv())
+	testAidl(t, frozenTrueSimple, files, setTestFreezeEnv())
+	testAidl(t, frozenTrueSimple, files)
+}
+
+// Keeping legacy behavior if "frozen" is not specified
+func TestImportingNewLegacy(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "xxx",
+		srcs: ["IFoo.aidl"],
+		versions: ["1"],
+	}
+	aidl_interface {
+		name: "foo",
+		imports: ["xxx-V2"],
+		versions_with_info: [
+			{version: "1", imports: ["xxx-V1"]},
+		],
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+		"aidl_api/xxx/1/foo.1.aidl": nil,
+		"aidl_api/xxx/1/.hash":      nil,
+	})
+
+	testAidl(t, frozenTest, files, setReleaseEnv())
+	testAidl(t, frozenTest, files, setTestFreezeEnv())
+	testAidl(t, frozenTest, files)
+}
+
+// We don't have a way to know if if "xxx" has changes to it and will
+// need a new version without the "frozen" attribute. So we keep the
+// legacy behavior and assume "foo" is still importing the old version.
+func TestFrozenImportingNewLegacy(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "xxx",
+		srcs: ["IFoo.aidl"],
+		versions: ["1"],
+	}
+	aidl_interface {
+		name: "foo",
+		imports: ["xxx-V1"],
+		frozen: true,
+		versions_with_info: [
+			{version: "1", imports: ["xxx-V1"]},
+		],
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+		"aidl_api/xxx/1/foo.1.aidl": nil,
+		"aidl_api/xxx/1/.hash":      nil,
+	})
+
+	testAidl(t, frozenTest, files, setReleaseEnv())
+	testAidl(t, frozenTest, files, setTestFreezeEnv())
+	testAidl(t, frozenTest, files)
+}
+
+func TestFrozenImportingNewImplicit(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "xxx",
+		srcs: ["IFoo.aidl"],
+		frozen: false,
+		versions: ["1"],
+	}
+	aidl_interface {
+		name: "foo",
+		imports: ["xxx"],
+		frozen: true,
+		versions_with_info: [
+			{version: "1", imports: ["xxx-V1"]},
+		],
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+		"aidl_api/xxx/1/foo.1.aidl": nil,
+		"aidl_api/xxx/1/.hash":      nil,
+	})
+
+	expectedError := `"foo" imports "xxx" which is not frozen. Either "foo" must`
+	testAidlError(t, expectedError, frozenTest, files, setReleaseEnv())
+	testAidlError(t, expectedError, frozenTest, files, setTestFreezeEnv())
+	testAidlError(t, expectedError, frozenTest, files)
+}
+
+func TestFrozenImportingNewExplicit(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "xxx",
+		srcs: ["IFoo.aidl"],
+		frozen: false,
+		versions: ["1"],
+	}
+	aidl_interface {
+		name: "foo",
+		imports: ["xxx-V2"],
+		frozen: true,
+		versions_with_info: [
+			{version: "1", imports: ["xxx-V1"]},
+		],
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+		"aidl_api/xxx/1/foo.1.aidl": nil,
+		"aidl_api/xxx/1/.hash":      nil,
+	})
+
+	expectedError := "This interface is 'frozen: true' but the imports have changed. Set 'frozen: false' to allow changes: \\n Version current imports: map\\[xxx:2\\]\\n Version 1 imports: map\\[xxx:1\\]\\n"
+	testAidlError(t, expectedError, frozenTest, files, setReleaseEnv())
+	testAidlError(t, expectedError, frozenTest, files, setTestFreezeEnv())
+	testAidlError(t, expectedError, frozenTest, files)
+}
+
+func TestNonFrozenImportingNewImplicit(t *testing.T) {
+	frozenTest := `
+	aidl_interface {
+		name: "xxx",
+		srcs: ["IFoo.aidl"],
+		frozen: false,
+		versions: ["1"],
+	}
+	aidl_interface {
+		name: "foo",
+		imports: ["xxx-V1"],
+		frozen: false,
+		versions_with_info: [
+			{version: "1", imports: ["xxx-V1"]},
+		],
+		srcs: ["IFoo.aidl"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+		"aidl_api/xxx/1/foo.1.aidl": nil,
+		"aidl_api/xxx/1/.hash":      nil,
+	})
+
+	testAidl(t, frozenTest, files, setReleaseEnv())
+	testAidl(t, frozenTest, files, setTestFreezeEnv())
+	testAidl(t, frozenTest, files)
+}
+
 // The module which has never been frozen and is not "unstable" is not allowed in release version.
 func TestNonVersionedModuleUsageInRelease(t *testing.T) {
 	nonVersionedModuleUsageInJavaBp := `
@@ -353,7 +686,7 @@
 		libs: ["foo-V1-java"],
 	}`
 
-	expectedError := `"foo_interface": versions: must be set \(need to be frozen\) when "unstable" is false, PLATFORM_VERSION_CODENAME is REL, and "owner" property is missing.`
+	expectedError := `"foo_interface": versions: must be set \(need to be frozen\) because`
 	testAidlError(t, expectedError, nonVersionedModuleUsageInJavaBp, setReleaseEnv())
 	testAidlError(t, expectedError, nonVersionedModuleUsageInJavaBp, setTestFreezeEnv())
 	testAidl(t, nonVersionedModuleUsageInJavaBp)
@@ -392,7 +725,7 @@
 		libs: ["foo-V1-java"],
 	}`
 
-	expectedError := `"foo_interface": versions: must be set \(need to be frozen\) when "unstable" is false, PLATFORM_VERSION_CODENAME is REL, and "owner" property is missing.`
+	expectedError := `"foo_interface": versions: must be set \(need to be frozen\) because`
 	testAidl(t, nonVersionedModuleUsageInJavaBp, setReleaseEnv())
 	testAidlError(t, expectedError, nonVersionedModuleUsageInJavaBp, setTestFreezeEnv())
 	testAidl(t, nonVersionedModuleUsageInJavaBp)
@@ -464,7 +797,7 @@
 		libs: ["foo-V2-java"],
 	}`
 
-	expectedError := `Android.bp:10:2: module \"bar\" variant \"android_common\": foo-V2-java is disallowed in release version because it is unstable, and its \"owner\" property is missing.`
+	expectedError := `Android.bp:10:2: module \"bar\" variant \"android_common\": foo-V2-java is an unfrozen development version`
 	testAidlError(t, expectedError, nonVersionedModuleUsageInJavaBp, setReleaseEnv())
 	testAidlError(t, expectedError, nonVersionedModuleUsageInJavaBp, setTestFreezeEnv())
 	testAidl(t, nonVersionedModuleUsageInJavaBp, withFiles(map[string][]byte{
@@ -493,12 +826,38 @@
 		"aidl_api/foo/1/.hash":      nil,
 	})
 
-	expectedError := `Android.bp:11:2: module \"bar\" variant \"android_common\": foo-V2-java is disallowed in release version because it is unstable, and its \"owner\" property is missing.`
+	expectedError := `Android.bp:11:2: module \"bar\" variant \"android_common\": foo-V2-java is an unfrozen development version`
 	testAidl(t, nonVersionedModuleUsageInJavaBp, setReleaseEnv(), files)
 	testAidlError(t, expectedError, nonVersionedModuleUsageInJavaBp, setTestFreezeEnv(), files)
 	testAidl(t, nonVersionedModuleUsageInJavaBp, files)
 }
 
+func TestFrozenModuleUsageInAllEnvs(t *testing.T) {
+	bp := `
+	aidl_interface {
+		name: "foo",
+        frozen: true,
+		srcs: [
+			"IFoo.aidl",
+		],
+		versions: ["1"],
+	}
+
+	java_library {
+		name: "bar",
+		libs: ["foo-V2-java"],
+	}`
+	files := withFiles(map[string][]byte{
+		"aidl_api/foo/1/foo.1.aidl": nil,
+		"aidl_api/foo/1/.hash":      nil,
+	})
+
+	expectedError := `Android.bp:11:2: module \"bar\" variant \"android_common\": foo-V2-java is an unfrozen development version`
+	testAidlError(t, expectedError, bp, setReleaseEnv(), files)
+	testAidlError(t, expectedError, bp, setTestFreezeEnv(), files)
+	testAidlError(t, expectedError, bp, files)
+}
+
 func TestUnstableVersionedModuleOwnedByOtherUsageInRelease(t *testing.T) {
 	nonVersionedModuleUsageInJavaBp := `
 	aidl_interface {
@@ -848,9 +1207,28 @@
 		}
 	`)
 
-	ctx, _ := testAidl(t, `
+	testAidlError(t, `imports: "foo" depends on "bar" but does not specify a version`, `
 		aidl_interface {
 			name: "foo",
+            unstable: true,
+			srcs: [
+				"IFoo.aidl",
+			],
+			imports: [
+				"bar",
+			]
+		}
+		aidl_interface {
+			name: "bar",
+			srcs: [
+				"IBar.aidl",
+			],
+		}
+	`)
+
+	ctx, _ := testAidl(t, `
+		aidl_interface_defaults {
+			name: "foo-defaults",
 			srcs: [
 				"IFoo.aidl",
 			],
@@ -864,6 +1242,10 @@
 			]
 		}
 		aidl_interface {
+			name: "foo",
+			defaults: ["foo-defaults"],
+		}
+		aidl_interface {
 			name: "bar.1",
 			srcs: [
 				"IBar.aidl",
@@ -1025,25 +1407,26 @@
 	}))
 }
 
-func TestUnstableVndkModule(t *testing.T) {
-	testAidlError(t, `module "myiface_interface": stability: must be "vintf" if the module is for VNDK.`, `
+func TestVndkRequiresFrozen(t *testing.T) {
+	testAidlError(t, `frozen: true or false must be specified when the VNDK is enabled on a versioned interface`, `
 		aidl_interface {
 			name: "myiface",
-			srcs: ["IFoo.aidl"],
 			vendor_available: true,
 			product_available: true,
-			unstable: true,
+			srcs: ["IFoo.aidl"],
 			vndk: {
 				enabled: true,
 			},
 		}
 	`)
-	testAidlError(t, `module "myiface_interface": stability: must be "vintf" if the module is for VNDK.`, `
+	testAidlError(t, `vndk_use_version: must be specified if interface is unfrozen`, `
 		aidl_interface {
 			name: "myiface",
 			vendor_available: true,
 			product_available: true,
 			srcs: ["IFoo.aidl"],
+			stability: "vintf",
+			frozen: false,
 			vndk: {
 				enabled: true,
 			},
@@ -1056,6 +1439,8 @@
 			product_available: true,
 			srcs: ["IFoo.aidl"],
 			stability: "vintf",
+			frozen: false,
+			vndk_use_version: "1",
 			vndk: {
 				enabled: true,
 			},
@@ -1097,6 +1482,7 @@
 				srcs: ["a/Foo.aidl"],
 				imports: ["bar-iface-V2"],
 				versions: ["1"],
+				headers: ["boq-iface-headers"],
 			}
 		`),
 		"foo/a/Foo.aidl": nil,
@@ -1129,13 +1515,21 @@
 		"baz/aidl_api/baz-iface/current/b/Baz.aidl": nil,
 		"baz/aidl_api/baz-iface/1/b/Baz.aidl":       nil,
 		"baz/aidl_api/baz-iface/1/.hash":            nil,
+
+		"boq/Android.bp": []byte(`
+			aidl_interface_headers {
+				name: "boq-iface-headers",
+				srcs: ["b/Boq.aidl"],
+			}
+		`),
+		"boq/b/Baz.aidl": nil,
 	})
 	ctx, _ := testAidl(t, ``, customizer)
 
 	// checkapidump rule is to compare "compatibility" between ToT(dump) and "current"
 	{
 		rule := ctx.ModuleForTests("foo-iface-api", "").Output("checkapi_dump.timestamp")
-		android.AssertStringEquals(t, "checkapi(dump == current) imports", "", rule.Args["imports"])
+		android.AssertStringEquals(t, "checkapi(dump == current) imports", "-Iboq", rule.Args["imports"])
 		android.AssertStringDoesContain(t, "checkapi(dump == current) optionalFlags",
 			rule.Args["optionalFlags"],
 			"-pout/soong/.intermediates/bar/bar-iface_interface/2/preprocessed.aidl")
@@ -1153,7 +1547,9 @@
 	// compile (v1)
 	{
 		rule := ctx.ModuleForTests("foo-iface-V1-cpp-source", "").Output("a/Foo.cpp")
-		android.AssertStringEquals(t, "compile(old=1) should import aidl_api/1", "-Ifoo/aidl_api/foo-iface/1", rule.Args["imports"])
+		android.AssertStringEquals(t, "compile(old=1) should import aidl_api/1",
+			"-Ifoo/aidl_api/foo-iface/1 -Iboq",
+			rule.Args["imports"])
 		android.AssertStringDoesContain(t, "compile(old=1) should import bar.preprocessed",
 			rule.Args["optionalFlags"],
 			"-pout/soong/.intermediates/bar/bar-iface_interface/2/preprocessed.aidl")
@@ -1161,7 +1557,7 @@
 	// compile ToT(v2)
 	{
 		rule := ctx.ModuleForTests("foo-iface-V2-cpp-source", "").Output("a/Foo.cpp")
-		android.AssertStringEquals(t, "compile(tot=2) should import base dirs of srcs", "-Ifoo", rule.Args["imports"])
+		android.AssertStringEquals(t, "compile(tot=2) should import base dirs of srcs", "-Ifoo -Iboq", rule.Args["imports"])
 		android.AssertStringDoesContain(t, "compile(tot=2) should import bar.preprocessed",
 			rule.Args["optionalFlags"],
 			"-pout/soong/.intermediates/bar/bar-iface_interface/2/preprocessed.aidl")
@@ -1701,7 +2097,7 @@
 			aidl_interface {
 				name: "foo",
 				srcs: ["IFoo.aidl"],
-				imports: ["common"],
+				imports: ["common-V3"],
 				versions_with_info: [
 					{version: "1", imports: ["common-V1"]},
 					{version: "2", imports: ["common-V2"]},
@@ -1760,13 +2156,14 @@
 		for _, testcase := range []struct {
 			string
 			bool
-		}{{"common", true}, {"common-V3", true}, {"common-V2", false}} {
+		}{{"common-V3", true}, {"common-V2", false}} {
 			im := testcase.string
 			customizers := []android.FixturePreparer{
 				withFiles(map[string][]byte{
 					"common/Android.bp": []byte(`
 				  aidl_interface {
 						name: "common",
+						frozen: false,
 						srcs: ["ICommon.aidl"],
 						versions: ["1", "2"],
 					}
@@ -1780,6 +2177,7 @@
 						name: "foo",
 						srcs: ["IFoo.aidl"],
 						imports: ["%s"],
+						frozen: false,
 						versions_with_info: [
 							{version: "1", imports: ["common-V1"]},
 							{version: "2", imports: ["common-V2"]},
diff --git a/build/client-using-test-piece-3.cpp b/build/client-using-test-piece-3.cpp
new file mode 100644
index 0000000..dd52b2e
--- /dev/null
+++ b/build/client-using-test-piece-3.cpp
@@ -0,0 +1,6 @@
+#include <other_package/IBaz.h>
+
+// Enum type should be available here since IBaz.h includes Enum.h
+void acceptEnum(other_package::Enum n) {
+  (void)n;
+}
diff --git a/build/message_check_equality_frozen.txt b/build/message_check_equality_frozen.txt
new file mode 100644
index 0000000..08b169a
--- /dev/null
+++ b/build/message_check_equality_frozen.txt
@@ -0,0 +1,9 @@
+###############################################################################
+# ERROR: AIDL API change detected on frozen interface                         #
+###############################################################################
+Above AIDL file(s) has changed. The AIDL API is marked `frozen: true` so it
+cannot be modified. Change this to `frozen: false`, then run `m %s-update-api`
+to reflect the changes to the current version so that it is reviewed by
+android-aidl-api-council@google.com.
+And then you need to change dependency on %s-V(n)-* to %s-V(n+1)-* to use
+new APIs.
diff --git a/build/properties.go b/build/properties.go
index a37453a..95c925d 100644
--- a/build/properties.go
+++ b/build/properties.go
@@ -55,9 +55,11 @@
 	Product_available         *bool
 	Recovery_available        *bool
 	Host_supported            *bool
+	Installable               *bool
 	Generated_sources         []string
 	Generated_headers         []string
 	Shared_libs               []string
+	Static_libs               []string
 	Export_shared_lib_headers []string
 	Export_generated_headers  []string
 	Header_libs               []string
@@ -72,6 +74,7 @@
 	Tidy                      *bool
 	Tidy_flags                []string
 	Tidy_checks_as_errors     []string
+	Include_build_directory   *bool
 }
 
 type javaProperties struct {
@@ -102,6 +105,13 @@
 	Min_sdk_version  *string
 }
 
+type Bazel_module struct {
+	Bp2build_available *bool
+}
+type bazelProperties struct {
+	*Bazel_module
+}
+
 type phonyProperties struct {
 	Name     *string
 	Required []string
diff --git a/build/tests_1/other_package/Enum.aidl b/build/tests_1/other_package/Enum.aidl
new file mode 100644
index 0000000..dc005a5
--- /dev/null
+++ b/build/tests_1/other_package/Enum.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package other_package;
+
+enum Enum { ZERO, ONE }
diff --git a/build/tests_1/other_package/IBaz.aidl b/build/tests_1/other_package/IBaz.aidl
index 3d75b6a..9d04692 100644
--- a/build/tests_1/other_package/IBaz.aidl
+++ b/build/tests_1/other_package/IBaz.aidl
@@ -16,8 +16,10 @@
 
 package other_package;
 
+import other_package.Enum;
 import some_package.IBar;
 
 interface IBaz {
+    const int ZERO = Enum.ZERO;
     void CanYouDealWithThisBar(in IBar bar);
 }
diff --git a/build/tests_bp2build/Android.bp b/build/tests_bp2build/Android.bp
new file mode 100644
index 0000000..c9875d8
--- /dev/null
+++ b/build/tests_bp2build/Android.bp
@@ -0,0 +1,87 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "system_tools_aidl_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["system_tools_aidl_license"],
+}
+
+aidl_interface {
+    name: "example-dep-aidl-interfaces",
+    local_include_dir: "src",
+    srcs: [
+        "src/a/b/AB.aidl",
+    ],
+    backend: {
+        java: {
+            min_sdk_version: "29",
+        },
+        ndk: {
+            enabled: false,
+        },
+        cpp: {
+            enabled: false,
+        },
+    },
+    versions: [
+        "1",
+    ],
+
+}
+
+aidl_interface {
+    name: "example-aidl-interfaces",
+    local_include_dir: "src",
+    srcs: [
+        "src/c/d/CD.aidl",
+        "src/c/d/CD2.aidl",
+    ],
+    backend: {
+        java: {
+            min_sdk_version: "29",
+        },
+        ndk: {
+            enabled: false,
+        },
+        cpp: {
+            enabled: false,
+        },
+    },
+    imports: ["example-dep-aidl-interfaces-V1"],
+    versions: [
+        "1",
+        "2",
+    ],
+}
+
+java_library {
+    name: "example-aidl-latest",
+    sdk_version: "system_current",
+    min_sdk_version: "29",
+    static_libs: [
+        "example-aidl-interfaces-V2-java",
+    ],
+}
+
+java_library {
+    name: "example-aidl-test",
+    sdk_version: "system_current",
+    min_sdk_version: "29",
+    srcs: ["src/android/Test.java"],
+    static_libs: ["example-aidl-latest"],
+}
diff --git a/build/tests_bp2build/aidl_api/example-aidl-interfaces/1/.hash b/build/tests_bp2build/aidl_api/example-aidl-interfaces/1/.hash
new file mode 100644
index 0000000..0dc8683
--- /dev/null
+++ b/build/tests_bp2build/aidl_api/example-aidl-interfaces/1/.hash
@@ -0,0 +1 @@
+75e4c4fe9993977f16577571a51e8f40468ab7bf
diff --git a/build/tests_bp2build/aidl_api/example-aidl-interfaces/1/c/d/CD.aidl b/build/tests_bp2build/aidl_api/example-aidl-interfaces/1/c/d/CD.aidl
new file mode 100644
index 0000000..412a297
--- /dev/null
+++ b/build/tests_bp2build/aidl_api/example-aidl-interfaces/1/c/d/CD.aidl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package c.d;
+parcelable CD {
+    int cd;
+    a.b.AB ab;
+}
diff --git a/build/tests_bp2build/aidl_api/example-aidl-interfaces/2/.hash b/build/tests_bp2build/aidl_api/example-aidl-interfaces/2/.hash
new file mode 100644
index 0000000..f340630
--- /dev/null
+++ b/build/tests_bp2build/aidl_api/example-aidl-interfaces/2/.hash
@@ -0,0 +1 @@
+b40733528cd90cf1c4457b08e3be2cc05ea146bd
diff --git a/build/tests_bp2build/aidl_api/example-aidl-interfaces/2/c/d/CD.aidl b/build/tests_bp2build/aidl_api/example-aidl-interfaces/2/c/d/CD.aidl
new file mode 100644
index 0000000..412a297
--- /dev/null
+++ b/build/tests_bp2build/aidl_api/example-aidl-interfaces/2/c/d/CD.aidl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package c.d;
+parcelable CD {
+    int cd;
+    a.b.AB ab;
+}
diff --git a/build/tests_bp2build/aidl_api/example-aidl-interfaces/2/c/d/CD2.aidl b/build/tests_bp2build/aidl_api/example-aidl-interfaces/2/c/d/CD2.aidl
new file mode 100644
index 0000000..392354c
--- /dev/null
+++ b/build/tests_bp2build/aidl_api/example-aidl-interfaces/2/c/d/CD2.aidl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package c.d;
+parcelable CD2 {
+    int cd;
+    a.b.AB ab;
+}
diff --git a/build/tests_bp2build/aidl_api/example-aidl-interfaces/current/c/d/CD.aidl b/build/tests_bp2build/aidl_api/example-aidl-interfaces/current/c/d/CD.aidl
new file mode 100644
index 0000000..412a297
--- /dev/null
+++ b/build/tests_bp2build/aidl_api/example-aidl-interfaces/current/c/d/CD.aidl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package c.d;
+parcelable CD {
+    int cd;
+    a.b.AB ab;
+}
diff --git a/build/tests_bp2build/aidl_api/example-aidl-interfaces/current/c/d/CD2.aidl b/build/tests_bp2build/aidl_api/example-aidl-interfaces/current/c/d/CD2.aidl
new file mode 100644
index 0000000..392354c
--- /dev/null
+++ b/build/tests_bp2build/aidl_api/example-aidl-interfaces/current/c/d/CD2.aidl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package c.d;
+parcelable CD2 {
+    int cd;
+    a.b.AB ab;
+}
diff --git a/build/tests_bp2build/aidl_api/example-dep-aidl-interfaces/1/.hash b/build/tests_bp2build/aidl_api/example-dep-aidl-interfaces/1/.hash
new file mode 100644
index 0000000..f76e098
--- /dev/null
+++ b/build/tests_bp2build/aidl_api/example-dep-aidl-interfaces/1/.hash
@@ -0,0 +1 @@
+19b952f31738360300aa261bef511d97d6001196
diff --git a/build/tests_bp2build/aidl_api/example-dep-aidl-interfaces/1/a/b/AB.aidl b/build/tests_bp2build/aidl_api/example-dep-aidl-interfaces/1/a/b/AB.aidl
new file mode 100644
index 0000000..5293957
--- /dev/null
+++ b/build/tests_bp2build/aidl_api/example-dep-aidl-interfaces/1/a/b/AB.aidl
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package a.b;
+parcelable AB {
+    int ab;
+}
diff --git a/build/tests_bp2build/aidl_api/example-dep-aidl-interfaces/current/a/b/AB.aidl b/build/tests_bp2build/aidl_api/example-dep-aidl-interfaces/current/a/b/AB.aidl
new file mode 100644
index 0000000..5293957
--- /dev/null
+++ b/build/tests_bp2build/aidl_api/example-dep-aidl-interfaces/current/a/b/AB.aidl
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+//     the interface (from the latest frozen version), the build system will
+//     prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package a.b;
+parcelable AB {
+    int ab;
+}
diff --git a/build/tests_bp2build/src/a/b/AB.aidl b/build/tests_bp2build/src/a/b/AB.aidl
new file mode 100644
index 0000000..8665cbc
--- /dev/null
+++ b/build/tests_bp2build/src/a/b/AB.aidl
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package a.b;
+
+parcelable AB {
+    int ab;
+}
diff --git a/build/tests_bp2build/src/a/b/AB2.aidl b/build/tests_bp2build/src/a/b/AB2.aidl
new file mode 100644
index 0000000..31d0cbc
--- /dev/null
+++ b/build/tests_bp2build/src/a/b/AB2.aidl
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package a.b;
+
+parcelable AB2 {
+    int ab;
+}
diff --git a/build/tests_bp2build/src/android/Test.java b/build/tests_bp2build/src/android/Test.java
new file mode 100644
index 0000000..3238977
--- /dev/null
+++ b/build/tests_bp2build/src/android/Test.java
@@ -0,0 +1,23 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package android;
+
+import c.d.CD;
+import c.d.CD2;
+
+class Test {
+  CD cd;
+  CD2 cd2;
+}
diff --git a/build/tests_bp2build/src/c/d/CD.aidl b/build/tests_bp2build/src/c/d/CD.aidl
new file mode 100644
index 0000000..17a3af4
--- /dev/null
+++ b/build/tests_bp2build/src/c/d/CD.aidl
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package c.d;
+
+import a.b.AB;
+
+parcelable CD {
+    int cd;
+    AB ab;
+}
diff --git a/build/tests_bp2build/src/c/d/CD2.aidl b/build/tests_bp2build/src/c/d/CD2.aidl
new file mode 100644
index 0000000..e10f959
--- /dev/null
+++ b/build/tests_bp2build/src/c/d/CD2.aidl
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package c.d;
+
+import a.b.AB;
+
+parcelable CD2 {
+    int cd;
+    AB ab;
+}
diff --git a/build/tests_vintf/vintf/IFoo.aidl b/build/tests_vintf/vintf/IFoo.aidl
new file mode 100644
index 0000000..67d3ab1
--- /dev/null
+++ b/build/tests_vintf/vintf/IFoo.aidl
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package vintf;
+
+@VintfStability
+interface IFoo {
+    parcelable Foo {
+        String a;
+    }
+    union A {
+        String a;
+        int b;
+    }
+    enum E { A, B, C }
+
+    Foo[] abar(in Foo[] f);
+    ParcelFileDescriptor afd(in ParcelFileDescriptor fd);
+    E ae(in E e);
+    A aa(in A a);
+}
diff --git a/check_valid.cpp b/check_valid.cpp
index e7bcb8d..b572d7d 100644
--- a/check_valid.cpp
+++ b/check_valid.cpp
@@ -23,6 +23,7 @@
 namespace aidl {
 
 using TypePredicate = std::function<bool(const AidlTypeSpecifier&)>;
+using DefinedTypePredicate = std::function<bool(const AidlDefinedType&)>;
 
 namespace {
 bool IsListOf(const AidlTypeSpecifier& type, TypePredicate pred) {
@@ -40,6 +41,7 @@
 struct CheckTypeVisitor : AidlVisitor {
   bool success = true;
   std::vector<TypePredicate> checkers;
+  std::vector<DefinedTypePredicate> defined_checkers;
 
   void Visit(const AidlTypeSpecifier& type) override {
     for (auto& checker : checkers) {
@@ -48,8 +50,23 @@
       }
     }
   }
+  void Visit(const AidlInterface& t) override { CheckDefinedType(t); }
+  void Visit(const AidlEnumDeclaration& t) override { CheckDefinedType(t); }
+  void Visit(const AidlStructuredParcelable& t) override { CheckDefinedType(t); }
+  void Visit(const AidlUnionDecl& t) override { CheckDefinedType(t); }
+  void Visit(const AidlParcelable& t) override { CheckDefinedType(t); }
 
   void Check(TypePredicate checker) { checkers.push_back(std::move(checker)); }
+  void Check(DefinedTypePredicate checker) { defined_checkers.push_back(std::move(checker)); }
+
+ private:
+  void CheckDefinedType(const AidlDefinedType& type) {
+    for (auto& checker : defined_checkers) {
+      if (!checker(type)) {
+        success = false;
+      }
+    }
+  }
 };
 
 bool CheckValid(const AidlDocument& doc, const Options& options) {
@@ -80,6 +97,74 @@
     return true;
   });
 
+  // Check all nested types for potential #include cycles that would contain
+  // them. The algorithm performs a depth-first search on a graph with the
+  // following properties:
+  //
+  // * Graph nodes are top-level (non-nested) types, under the assumption that
+  //   there is a 1:1 mapping between top-level types and included headers. This
+  //   implies that a cycle between these types will be equivalent to a cycle
+  //   between headers.
+  //
+  // * Each edge U -> V represents a "declare V before U" relationship between
+  //   types. This means that V.h needs to be included by U.h, or the V type
+  //   needs to be forward-declared before U. For any type U, its neighbors
+  //   are all nodes V such that U or its nested types have a reference to V
+  //   or any type nested in it.
+  //
+  // * The algorithm tries to find a cycle containing start_type. Such a
+  //   cycle exists if the following hold true:
+  //   * There exists a path from start_type to another top-level type T
+  //     (different from start_type)
+  //   * There is a back edge from T to start_type which closes the cycle
+  v.Check([&](const AidlDefinedType& start_type) {
+    if (start_type.GetParentType() == nullptr) {
+      return true;
+    }
+
+    std::set<const AidlDefinedType*> visited;
+    std::function<bool(const AidlDefinedType*)> dfs = [&](const AidlDefinedType* type) {
+      if (!visited.insert(type).second) {
+        // Already visited
+        return false;
+      }
+
+      for (const auto& t : Collect<AidlTypeSpecifier>(*type)) {
+        auto defined_type = t->GetDefinedType();
+        if (!defined_type) {
+          // Skip primitive/builtin types
+          continue;
+        }
+
+        auto top_type = defined_type->GetRootType();
+        if (top_type == type) {
+          // Skip type references within the same top-level type
+          continue;
+        }
+
+        if (defined_type == &start_type) {
+          // Found a cycle back to the starting nested type
+          return true;
+        }
+
+        if (dfs(top_type)) {
+          // Found a cycle while visiting the top type for the next node
+          return true;
+        }
+      }
+
+      return false;
+    };
+
+    bool has_cycle = dfs(start_type.GetRootType());
+    if (has_cycle) {
+      AIDL_ERROR(start_type) << "has cyclic references to nested types.";
+      return false;
+    }
+
+    return true;
+  });
+
   VisitTopDown(v, doc);
   return v.success;
 }
diff --git a/generate_cpp.cpp b/generate_cpp.cpp
index 1699ad3..fcbe007 100644
--- a/generate_cpp.cpp
+++ b/generate_cpp.cpp
@@ -31,7 +31,7 @@
 
 #include "aidl_language.h"
 #include "aidl_to_cpp.h"
-#include "code_writer.h"
+
 #include "logging.h"
 #include "os.h"
 
@@ -67,11 +67,12 @@
 const char kBinderStatusLiteral[] = "::android::binder::Status";
 const char kIBinderHeader[] = "binder/IBinder.h";
 const char kIInterfaceHeader[] = "binder/IInterface.h";
+const char kBinderDelegateHeader[] = "binder/Delegate.h";
 const char kParcelHeader[] = "binder/Parcel.h";
 const char kStabilityHeader[] = "binder/Stability.h";
 const char kStatusHeader[] = "binder/Status.h";
 const char kString16Header[] = "utils/String16.h";
-const char kTraceHeader[] = "utils/Trace.h";
+const char kTraceHeader[] = "binder/Trace.h";
 const char kStrongPointerHeader[] = "utils/StrongPointer.h";
 const char kAndroidBaseMacrosHeader[] = "android-base/macros.h";
 
@@ -190,8 +191,9 @@
   out.Write("%s %s;\n", kBinderStatusLiteral, kStatusVarName);
 
   if (options.GenTraces()) {
-    out.Write("::android::ScopedTrace %s(ATRACE_TAG_AIDL, \"AIDL::cpp::%s::%s::cppClient\");\n",
-              kTraceVarName, interface.GetName().c_str(), method.GetName().c_str());
+    out.Write(
+        "::android::binder::ScopedTrace %s(ATRACE_TAG_AIDL, \"AIDL::cpp::%s::%s::cppClient\");\n",
+        kTraceVarName, interface.GetName().c_str(), method.GetName().c_str());
   }
 
   if (options.GenLog()) {
@@ -465,8 +467,9 @@
   out.Write("}\n");
 
   if (options.GenTraces()) {
-    out.Write("::android::ScopedTrace %s(ATRACE_TAG_AIDL, \"AIDL::cpp::%s::%s::cppServer\");\n",
-              kTraceVarName, interface.GetName().c_str(), method.GetName().c_str());
+    out.Write(
+        "::android::binder::ScopedTrace %s(ATRACE_TAG_AIDL, \"AIDL::cpp::%s::%s::cppServer\");\n",
+        kTraceVarName, interface.GetName().c_str(), method.GetName().c_str());
   }
 
   if (interface.EnforceExpression() || method.GetType().EnforceExpression()) {
@@ -774,6 +777,42 @@
   LeaveNamespace(out, interface);
 }
 
+// Some interfaces are declared in .aidl files, but defined elsewhere.
+// These interfaces can not have Delegators and need to be avoided.
+// TODO(b/242920522) These should all be defined in .aidl files.
+bool isKnownUndefinedInterface(const std::string& canonicalName) {
+  static const auto* kKnownUndefinedInterfaces = new std::set<std::string>{
+      "android.hardware.ICamera", "android.hardware.ICameraClient",
+      "android.IOMXNode",         "android.IMediaExtractor",
+      "android.IDataSource",
+  };
+  return kKnownUndefinedInterfaces->find(canonicalName) != kKnownUndefinedInterfaces->end();
+};
+
+bool isDelegateable(const AidlTypeSpecifier& type) {
+  return type.GetDefinedType() && type.GetDefinedType()->AsInterface() &&
+         !isKnownUndefinedInterface(type.GetDefinedType()->GetCanonicalName()) && !type.IsArray();
+}
+
+void wrapDelegate(CodeWriter& out, const std::string& argName, const AidlTypeSpecifier& type,
+                  bool in) {
+  const std::string argRef = in ? argName : "*" + argName;
+  const std::string targetArgName = in ? "_" + argName : argName;
+  const std::string targetArgRef = in ? targetArgName : "*" + targetArgName;
+  // input binders need local variables for each arg to pass to the delegate
+  // because the parameters are const
+  if (in) {
+    out << "::android::sp<::" << Join(type.GetSplitName(), "::") << "Delegator> " << targetArgName
+        << ";\n";
+  }
+  out << "if (" << argRef << ") {\n";
+  out.Indent();
+  out << targetArgRef << " = ::android::sp<::" << Join(type.GetSplitName(), "::")
+      << "Delegator>::cast(delegate(" << argRef << "));\n";
+  out.Dedent();
+  out << "}\n";
+}
+
 void GenerateServerClassDecl(CodeWriter& out, const AidlInterface& interface,
                              const AidlTypenames& typenames, const Options& options) {
   const string bn_name = ClassName(interface, ClassNames::SERVER);
@@ -816,7 +855,7 @@
   out << "explicit " << d_name << "("
       << StringPrintf("const ::android::sp<%s> &impl", iface.c_str()) << ") "
       << StringPrintf(": %s(impl)", kDelegateImplVarName) << " {}\n\n";
-
+  out << "::android::sp<" << iface << "> getImpl() { return " << kDelegateImplVarName << "; }\n";
   for (const auto& method : interface.GetMethods()) {
     if (method->IsUserDefined()) {
       GenerateMethodDecl(out, typenames, *method, /*clazz=*/"");
@@ -824,19 +863,52 @@
       GenerateDeprecated(out, *method);
 
       std::vector<std::string> args;
+
+      // arg name, type
+      std::vector<pair<const std::string, const AidlTypeSpecifier&>> outBinders;
+      std::vector<pair<const std::string, const AidlTypeSpecifier&>> inBinders;
       for (const auto& arg : method->GetArguments()) {
-        if (IsNonCopyableType(arg->GetType(), typenames)) {
-          args.push_back(StringPrintf("std::move(%s)", arg->GetName().c_str()));
+        if (isDelegateable(arg->GetType())) {
+          if (arg->IsOut()) {
+            outBinders.push_back({arg->GetName(), arg->GetType()});
+          } else if (arg->IsIn()) {
+            inBinders.push_back({arg->GetName(), arg->GetType()});
+          } else {
+            AIDL_FATAL(*arg) << "inout interface?";
+          }
+          AIDL_FATAL_IF(!arg->IsIn() && !arg->IsOut(), *arg) << "Not in or out?";
+          args.push_back("_" + arg->GetName());
         } else {
-          args.push_back(arg->GetName());
+          if (IsNonCopyableType(arg->GetType(), typenames)) {
+            args.push_back(StringPrintf("std::move(%s)", arg->GetName().c_str()));
+          } else {
+            args.push_back(arg->GetName());
+          }
         }
       }
       if (method->GetType().GetName() != "void") {
+        if (isDelegateable(method->GetType())) {
+          outBinders.push_back({kReturnVarName, method->GetType()});
+        }
         args.push_back(kReturnVarName);
       }
-      out << " {\n"
-          << "  return " << kDelegateImplVarName << "->" << method->GetName() << "("
-          << base::Join(args, ", ") << ");\n";
+      out << " {\n";
+      out.Indent();
+      for (const auto binder : inBinders) {
+        wrapDelegate(out, binder.first, binder.second, true);
+      }
+      if (outBinders.empty()) {
+        out << "return " << kDelegateImplVarName << "->" << method->GetName() << "("
+            << base::Join(args, ", ") << ");\n";
+      } else {
+        out << "auto _status = " << kDelegateImplVarName << "->" << method->GetName() << "("
+            << base::Join(args, ", ") << ");\n";
+        for (const auto& binder : outBinders) {
+          wrapDelegate(out, binder.first, binder.second, false);
+        }
+        out << "return _status;\n";
+      }
+      out.Dedent();
       out << "}\n";
     } else if (method->GetName() == kGetInterfaceVersion && options.Version()) {
       out << "int32_t " << kGetInterfaceVersion << "()"
@@ -863,6 +935,43 @@
   out << "};  // class " << d_name << "\n";
 }
 
+// Collect all includes for the type's server header. Nested types are visited as well via
+// VisitTopDown.
+void GenerateServerHeaderIncludes(CodeWriter& out, const AidlDefinedType& defined_type,
+                                  const AidlTypenames& typenames, const Options& options) {
+  struct Visitor : AidlVisitor {
+    const AidlTypenames& typenames;
+    const Options& options;
+    std::set<std::string> includes;
+    Visitor(const AidlTypenames& typenames, const Options& options)
+        : typenames(typenames), options(options) {}
+
+    // Collect includes for each type reference
+    void Visit(const AidlTypeSpecifier& type) override {
+      // Add Bn* header files for types used in this header. The *Delegator
+      // definitions require them.
+      const auto defined_type = type.GetDefinedType();
+      if (defined_type && defined_type->AsInterface()) {
+        if (!isKnownUndefinedInterface(defined_type->GetCanonicalName())) {
+          includes.insert(HeaderFile(*defined_type, ClassNames::SERVER, /*use_os_sep=*/false));
+        }
+      }
+    }
+
+    // Collect implementation-specific includes for each type definition
+    void Visit(const AidlInterface& iface) override {
+      includes.insert(HeaderFile(iface, ClassNames::SERVER, false));
+    }
+  } v(typenames, options);
+  VisitTopDown(v, defined_type);
+
+  v.includes.insert(kBinderDelegateHeader);
+  for (const auto& path : v.includes) {
+    out << "#include <" << path << ">\n";
+  }
+  out << "\n";
+}
+
 void GenerateServerHeader(CodeWriter& out, const AidlInterface& interface,
                           const AidlTypenames& typenames, const Options& options) {
   out << "#pragma once\n\n";
@@ -872,6 +981,7 @@
     out << "#include <functional>\n";  // for std::function
     out << "#include <android/binder_to_string.h>\n";
   }
+  GenerateServerHeaderIncludes(out, interface, typenames, options);
   out << "\n";
   EnterNamespace(out, interface);
   GenerateServerClassDecl(out, interface, typenames, options);
@@ -1091,6 +1201,7 @@
                              const AidlTypenames& typenames, const Options& options) {
   const string clazz = parcel.GetName();
 
+  ClangDiagnosticIgnoreDeprecated guard(out, HasDeprecatedField(parcel));
   out << TemplateDecl(parcel);
   out << "class";
   GenerateDeprecated(out, parcel);
@@ -1113,8 +1224,8 @@
 
   const string canonical_name = parcel.GetCanonicalName();
   out << "static const ::android::String16& getParcelableDescriptor() {\n"
-      << "  static const ::android::StaticString16 DESCIPTOR (u\"" << canonical_name << "\");\n"
-      << "  return DESCIPTOR;\n"
+      << "  static const ::android::StaticString16 DESCRIPTOR (u\"" << canonical_name << "\");\n"
+      << "  return DESCRIPTOR;\n"
       << "}\n";
 
   GenerateToString(out, parcel);
@@ -1145,21 +1256,24 @@
   EnterNamespace(out, parcel);
   GenerateConstantDefinitions(out, parcel, typenames, TemplateDecl(parcel), q_name);
 
-  out << TemplateDecl(parcel);
-  out << "::android::status_t " << q_name << "::readFromParcel(const ::android::Parcel* "
-      << kParcelVarName << ") {\n";
-  out.Indent();
-  GenerateReadFromParcel(out, parcel, typenames);
-  out.Dedent();
-  out << "}\n";
+  {
+    ClangDiagnosticIgnoreDeprecated guard(out, HasDeprecatedField(parcel));
+    out << TemplateDecl(parcel);
+    out << "::android::status_t " << q_name << "::readFromParcel(const ::android::Parcel* "
+        << kParcelVarName << ") {\n";
+    out.Indent();
+    GenerateReadFromParcel(out, parcel, typenames);
+    out.Dedent();
+    out << "}\n";
 
-  out << TemplateDecl(parcel);
-  out << "::android::status_t " << q_name << "::writeToParcel(::android::Parcel* " << kParcelVarName
-      << ") const {\n";
-  out.Indent();
-  GenerateWriteToParcel(out, parcel, typenames);
-  out.Dedent();
-  out << "}\n";
+    out << TemplateDecl(parcel);
+    out << "::android::status_t " << q_name << "::writeToParcel(::android::Parcel* "
+        << kParcelVarName << ") const {\n";
+    out.Indent();
+    GenerateWriteToParcel(out, parcel, typenames);
+    out.Dedent();
+    out << "}\n";
+  }
   LeaveNamespace(out, parcel);
 }
 
@@ -1188,31 +1302,6 @@
 
 using namespace internals;
 
-// Ensures that output_file is  <out_dir>/<packagename>/<typename>.cpp
-bool ValidateOutputFilePath(const string& output_file, const Options& options,
-                            const AidlDefinedType& defined_type) {
-  const auto& out_dir =
-      !options.OutputDir().empty() ? options.OutputDir() : options.OutputHeaderDir();
-  if (output_file.empty() || !android::base::StartsWith(output_file, out_dir)) {
-    // If output_file is not set (which happens in the unit tests) or is outside of out_dir, we can
-    // help but accepting it, because the path is what the user has requested.
-    return true;
-  }
-
-  string canonical_name = defined_type.GetCanonicalName();
-  std::replace(canonical_name.begin(), canonical_name.end(), '.', OS_PATH_SEPARATOR);
-  const string expected = out_dir + canonical_name + ".cpp";
-  if (expected != output_file) {
-    AIDL_ERROR(defined_type) << "Output file is expected to be at " << expected << ", but is "
-                             << output_file << ".\n If this is an Android platform "
-                             << "build, consider providing the input AIDL files using a filegroup "
-                             << "with `path:\"<base>\"` so that the AIDL files are located at "
-                             << "<base>/<packagename>/<typename>.aidl.";
-    return false;
-  }
-  return true;
-}
-
 // Collect all includes for the type's header. Nested types are visited as well via VisitTopDown.
 void GenerateHeaderIncludes(CodeWriter& out, const AidlDefinedType& defined_type,
                             const AidlTypenames& typenames, const Options& options) {
@@ -1241,6 +1330,7 @@
 
       // For a nested interface, client/server classes are declared the same header as well.
       if (iface.GetParentType()) {
+        includes.insert(kBinderDelegateHeader);  // Delegate.h
         // client/server class provides logFunc when gen_log is on
         if (options.GenLog()) {
           includes.insert("functional");                  // std::function for logFunc
@@ -1332,6 +1422,7 @@
   }
   out << "#pragma once\n\n";
   GenerateHeaderIncludes(out, defined_type, typenames, options);
+  GenerateForwardDecls(out, defined_type, false);
   EnterNamespace(out, defined_type);
   // Each class decl contains its own nested types' class decls
   GenerateClassDecl(out, defined_type, typenames, options);
diff --git a/generate_cpp_analyzer.cpp b/generate_cpp_analyzer.cpp
new file mode 100644
index 0000000..36fc043
--- /dev/null
+++ b/generate_cpp_analyzer.cpp
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2022, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "generate_cpp_analyzer.h"
+
+#include <string>
+#include "aidl.h"
+#include "aidl_language.h"
+#include "aidl_to_cpp.h"
+#include "code_writer.h"
+#include "logging.h"
+
+using std::string;
+using std::unique_ptr;
+
+namespace android {
+namespace aidl {
+namespace cpp {
+namespace {
+
+const char kAndroidStatusVarName[] = "_aidl_ret_status";
+const char kReturnVarName[] = "_aidl_return";
+const char kDataVarName[] = "_aidl_data";
+const char kReplyVarName[] = "_aidl_reply";
+
+void GenerateAnalyzerTransaction(CodeWriter& out, const AidlInterface& interface,
+                                 const AidlMethod& method, const AidlTypenames& typenames,
+                                 const Options& options) {
+  // Reading past the interface descriptor and reply binder status
+  out << "_aidl_ret_status = ::android::OK;\n";
+  out.Write("if (!(%s.enforceInterface(android::String16(\"%s\")))) {\n", kDataVarName,
+            interface.GetDescriptor().c_str());
+  out.Write("  %s = ::android::BAD_TYPE;\n", kAndroidStatusVarName);
+  out << "  std::cout << \"  Failure: Parcel interface does not match.\" << std::endl;\n"
+      << "  break;\n"
+      << "}\n";
+
+  // Declare parameters
+  for (const unique_ptr<AidlArgument>& a : method.GetArguments()) {
+    out.Write("%s %s;\n", CppNameOf(a->GetType(), typenames).c_str(), BuildVarName(*a).c_str());
+  }
+  out << "::android::binder::Status binderStatus;\n";
+  // Declare and read the return value.
+  // Read past the binder status.
+  out.Write("binderStatus.readFromParcel(%s);\n", kReplyVarName);
+  if (method.GetType().GetName() != "void") {
+    out.Write("%s %s;\n", CppNameOf(method.GetType(), typenames).c_str(), kReturnVarName);
+    out.Write("bool returnError = false;\n");
+  }
+
+  // Read Reply
+  if (method.GetType().GetName() != "void") {
+    out.Write("%s = %s.%s(%s);\n", kAndroidStatusVarName, kReplyVarName,
+              ParcelReadMethodOf(method.GetType(), typenames).c_str(),
+              ParcelReadCastOf(method.GetType(), typenames, string("&") + kReturnVarName).c_str());
+    out.Write("if (((%s) != (android::NO_ERROR))) {\n", kAndroidStatusVarName);
+    out.Indent();
+    out.Write(
+        "std::cerr << \"Failure: error in reading return value from Parcel.\" << std::endl;\n");
+    out.Write("returnError = true;\n");
+    out.Dedent();
+    out.Write("}\n");
+  }
+
+  // Reading arguments
+  out << "do { // Single-pass loop to break if argument reading fails\n";
+  out.Indent();
+  for (const auto& a : method.GetArguments()) {
+    out.Write("%s = %s.%s(%s);\n", kAndroidStatusVarName, kDataVarName,
+              ParcelReadMethodOf(a->GetType(), typenames).c_str(),
+              ParcelReadCastOf(a->GetType(), typenames, "&" + BuildVarName(*a)).c_str());
+    out.Write("if (((%s) != (android::NO_ERROR))) {\n", kAndroidStatusVarName);
+    out.Indent();
+    out.Write("std::cerr << \"Failure: error in reading argument %s from Parcel.\" << std::endl;\n",
+              a->GetName().c_str());
+    out.Dedent();
+    out.Write("  break;\n}\n");
+  }
+  out.Dedent();
+  out << "} while(false);\n";
+
+  if (!method.GetArguments().empty() && options.GetMinSdkVersion() >= SDK_VERSION_Tiramisu) {
+    out.Write(
+        "if (!%s.enforceNoDataAvail().isOk()) {\n  %s = android::BAD_VALUE;\n  std::cout << \"  "
+        "Failure: Parcel has too much data.\" << std::endl;\n  break;\n}\n",
+        kDataVarName, kAndroidStatusVarName);
+  }
+
+  // Arguments
+  out.Write("std::cout << \"  arguments: \" << std::endl;\n");
+  for (const auto& a : method.GetArguments()) {
+    out.Write(
+        "std::cout << \"    %s: \" << ::android::internal::ToString(%s) "
+        "<< std::endl;\n",
+        a->GetName().c_str(), BuildVarName(*a).c_str());
+  }
+
+  // Return Value
+  if (method.GetType().GetName() != "void") {
+    out.Write("if (returnError) {\n");
+    out.Indent();
+    out.Write("std::cout << \"  return: <error>\" << std::endl;\n");
+    out.Dedent();
+    out.Write("} else {");
+    out.Indent();
+    out.Write("std::cout << \"  return: \" << ::android::internal::ToString(%s) << std::endl;\n",
+              kReturnVarName);
+    out.Dedent();
+    out.Write("}\n");
+  } else {
+    out.Write("std::cout << \"  return: void\" << std::endl;\n");
+  }
+}
+
+void GenerateAnalyzerSource(CodeWriter& out, const AidlDefinedType& defined_type,
+                            const AidlTypenames& typenames, const Options& options) {
+  auto interface = AidlCast<AidlInterface>(defined_type);
+  string q_name = GetQualifiedName(*interface, ClassNames::INTERFACE);
+
+  string canonicalName = defined_type.GetCanonicalName();
+  string interfaceName = defined_type.GetName();
+
+  // Includes
+  vector<string> include_list{
+      "iostream", "binder/Parcel.h", "android/binder_to_string.h",
+      HeaderFile(*interface, ClassNames::RAW, false),
+      // HeaderFile(*interface, ClassNames::INTERFACE, false),
+  };
+  for (const auto& include : include_list) {
+    out << "#include <" << include << ">\n";
+  }
+
+  out << "namespace {\n";
+  // Function Start
+  out.Write(
+      "android::status_t analyze%s(uint32_t _aidl_code, const android::Parcel& %s, const "
+      "android::Parcel& %s) {\n",
+      q_name.c_str(), kDataVarName, kReplyVarName);
+  out.Indent();
+  out.Write("android::status_t %s;\nswitch(_aidl_code) {\n", kAndroidStatusVarName);
+  out.Indent();
+
+  // Main Switch Statement
+  for (const auto& method : interface->GetMethods()) {
+    out.Write("case ::android::IBinder::FIRST_CALL_TRANSACTION + %d:\n{\n", (method->GetId()));
+    out.Indent();
+    out.Write("std::cout << \"%s.%s()\" << std::endl;\n", interfaceName.c_str(),
+              method->GetName().c_str());
+    GenerateAnalyzerTransaction(out, *interface, *method, typenames, options);
+    out.Dedent();
+    out << "}\n";
+    out << "break;\n";
+  }
+  out << "default:\n{\n  std::cout << \"  Transaction code \" << _aidl_code << \" not known.\" << "
+         "std::endl;\n";
+  out.Write("%s = android::UNKNOWN_TRANSACTION;\n}\n", kAndroidStatusVarName);
+  out.Dedent();
+  out.Write("}\nreturn %s;\n", kAndroidStatusVarName);
+  out << "// To prevent unused variable warnings\n";
+  out.Write("(void)%s; (void)%s; (void)%s;\n", kAndroidStatusVarName, kDataVarName, kReplyVarName);
+  out.Dedent();
+  out << "}\n\n} // namespace\n";
+
+  out << "\n#include <Analyzer.h>\nusing android::aidl::Analyzer;\n";
+  out.Write(
+      "__attribute__((constructor)) static void addAnalyzer() {\n"
+      "  Analyzer::installAnalyzer(std::make_unique<Analyzer>(\"%s\", \"%s\", &analyze%s));\n}\n",
+      canonicalName.c_str(), interfaceName.c_str(), q_name.c_str());
+}
+
+void GenerateAnalyzerPlaceholder(CodeWriter& out, const AidlDefinedType& /*defined_type*/,
+                                 const AidlTypenames& /*typenames*/, const Options& /*options*/) {
+  out << "// This file is intentionally left blank as placeholder for building an analyzer.\n";
+}
+
+}  // namespace
+
+bool GenerateCppAnalyzer(const string& output_file, const Options& options,
+                         const AidlTypenames& typenames, const AidlDefinedType& defined_type,
+                         const IoDelegate& io_delegate) {
+  if (!ValidateOutputFilePath(output_file, options, defined_type)) {
+    return false;
+  }
+
+  using GenFn = void (*)(CodeWriter & out, const AidlDefinedType& defined_type,
+                         const AidlTypenames& typenames, const Options& options);
+  auto gen = [&](auto file, GenFn fn) {
+    unique_ptr<CodeWriter> writer(io_delegate.GetCodeWriter(file));
+    fn(*writer, defined_type, typenames, options);
+    AIDL_FATAL_IF(!writer->Close(), defined_type) << "I/O Error!";
+    return true;
+  };
+
+  if (AidlCast<AidlInterface>(defined_type)) {
+    return gen(output_file, &GenerateAnalyzerSource);
+  } else {
+    return gen(output_file, &GenerateAnalyzerPlaceholder);
+  }
+}
+
+}  // namespace cpp
+}  // namespace aidl
+}  // namespace android
diff --git a/generate_cpp_analyzer.h b/generate_cpp_analyzer.h
new file mode 100644
index 0000000..10bc34b
--- /dev/null
+++ b/generate_cpp_analyzer.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2022, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <memory>
+#include <string>
+
+#include "aidl_language.h"
+#include "aidl_to_cpp.h"
+#include "aidl_to_cpp_common.h"
+#include "options.h"
+
+namespace android {
+namespace aidl {
+namespace cpp {
+
+bool GenerateCppAnalyzer(const string& output_file, const Options& options,
+                         const AidlTypenames& typenames, const AidlDefinedType& parsed_doc,
+                         const IoDelegate& io_delegate);
+
+}  // namespace cpp
+}  // namespace aidl
+}  // namespace android
diff --git a/generate_cpp_unittest.cpp b/generate_cpp_unittest.cpp
index d79f225..833884b 100644
--- a/generate_cpp_unittest.cpp
+++ b/generate_cpp_unittest.cpp
@@ -74,7 +74,8 @@
 const char kHeaderDir[] = "headers";
 const char kInterfaceHeaderRelPath[] = "a/IFoo.h";
 
-const string kCmdline = string("aidl-cpp ") + kInputPath + " " + kHeaderDir + " " + kOutputPath;
+const string kCmdline =
+    string("aidl-cpp -I . ") + kInputPath + " " + kHeaderDir + " " + kOutputPath;
 
 }  // namespace test_io_handling
 
diff --git a/generate_java_binder.cpp b/generate_java_binder.cpp
index b5b00b4..9c21a1c 100644
--- a/generate_java_binder.cpp
+++ b/generate_java_binder.cpp
@@ -103,6 +103,7 @@
   std::shared_ptr<Expression> GetTransactDescriptor(const AidlMethod* method);
 
  private:
+  void MakeConstructors(const AidlInterface* interfaceType);
   void MakeAsInterface(const AidlInterface* interfaceType);
 
   std::shared_ptr<Variable> transact_descriptor;
@@ -122,26 +123,7 @@
   this->extends = "android.os.Binder";
   this->interfaces.push_back(interfaceType->GetCanonicalName());
 
-  // ctor
-  auto ctor = std::make_shared<Method>();
-  ctor->modifiers = PUBLIC;
-  ctor->comment =
-      "/** Construct the stub at attach it to the "
-      "interface. */";
-  ctor->name = "Stub";
-  ctor->statements = std::make_shared<StatementBlock>();
-  if (interfaceType->IsVintfStability()) {
-    auto stability = std::make_shared<LiteralStatement>("this.markVintfStability();\n");
-    ctor->statements->Add(stability);
-  }
-  auto attach = std::make_shared<MethodCall>(
-      THIS_VALUE, "attachInterface",
-      std::vector<std::shared_ptr<Expression>>{THIS_VALUE,
-                                               std::make_shared<LiteralExpression>("DESCRIPTOR")});
-  ctor->statements->Add(attach);
-  this->elements.push_back(ctor);
-
-  // asInterface
+  MakeConstructors(interfaceType);
   MakeAsInterface(interfaceType);
 
   // asBinder
@@ -153,7 +135,7 @@
   asBinder->statements->Add(std::make_shared<ReturnStatement>(THIS_VALUE));
   this->elements.push_back(asBinder);
 
-  if (options_.GenTransactionNames()) {
+  if (options_.GenTransactionNames() || options_.GenTraces()) {
     // getDefaultTransactionName
     auto getDefaultTransactionName = std::make_shared<Method>();
     getDefaultTransactionName->comment = "/** @hide */";
@@ -233,7 +215,7 @@
   transact_statements->Add(this->transact_switch_user);
 
   // getTransactionName
-  if (options_.GenTransactionNames()) {
+  if (options_.GenTransactionNames() || options_.GenTraces()) {
     // Some transaction codes are common, e.g. INTERFACE_TRANSACTION or DUMP_TRANSACTION.
     // Common transaction codes will not be resolved to a string by getTransactionName. The method
     // will return NULL in this case.
@@ -278,6 +260,52 @@
   return transact_descriptor;
 }
 
+void StubClass::MakeConstructors(const AidlInterface* interfaceType) {
+  string ctors_code;
+  CodeWriterPtr writer = CodeWriter::ForString(&ctors_code);
+  CodeWriter& code = *writer;
+
+  if (interfaceType->UsesPermissions()) {
+    code << "private final android.os.PermissionEnforcer mEnforcer;\n";
+    code << "/** Construct the stub using the Enforcer provided. */\n";
+    code << "public Stub(android.os.PermissionEnforcer enforcer)\n";
+  } else {
+    code << "/** Construct the stub at attach it to the interface. */\n";
+    code << "public Stub()\n";
+  }
+  code << "{\n";
+  code.Indent();
+  if (interfaceType->IsVintfStability()) {
+    code << "this.markVintfStability();\n";
+  }
+  code << "this.attachInterface(this, DESCRIPTOR);\n";
+  if (interfaceType->UsesPermissions()) {
+    code << "if (enforcer == null) {\n";
+    code.Indent();
+    code << "throw new IllegalArgumentException(\"enforcer cannot be null\");\n";
+    code.Dedent();
+    code << "}\n";
+    code << "mEnforcer = enforcer;\n";
+  }
+  code.Dedent();
+  code << "}\n";
+
+  // Setup a default constructor for permissions interfaces.
+  if (interfaceType->UsesPermissions()) {
+    code << "@Deprecated\n";
+    code << "/** Default constructor. */\n";
+    code << "public Stub() {\n";
+    code.Indent();
+    code << "this(android.os.PermissionEnforcer.fromContext(\n";
+    code << "   android.app.ActivityThread.currentActivityThread().getSystemContext()));\n";
+    code.Dedent();
+    code << "}\n";
+  }
+
+  code.Close();
+  this->elements.push_back(std::make_shared<LiteralClassElement>(ctors_code));
+}
+
 void StubClass::MakeAsInterface(const AidlInterface* interfaceType) {
   auto obj = std::make_shared<Variable>("android.os.IBinder", "obj");
 
@@ -442,123 +470,80 @@
 }
 
 // Visitor for the permission declared in the @EnforcePermission annotation.
-struct PermissionVisitor {
-  shared_ptr<Expression> operator()(const perm::AllOf& quantifier) {
-    std::shared_ptr<Expression> result;
-    for (const auto& operand : quantifier.operands) {
-      auto expr = (*this)(operand);
-      if (result) {
-        result = std::make_shared<Comparison>(result, "&&", expr);
-      } else {
-        result = expr;
-      }
+class PermissionVisitor {
+ public:
+  PermissionVisitor(CodeWriter* code) : code_(code) {}
+
+  void operator()(const perm::AllOf& quantifier) {
+    std::vector<std::string> permissions;
+    permissions.reserve(quantifier.operands.size());
+    for (auto const& permission : quantifier.operands) {
+      permissions.push_back(android::aidl::perm::JavaFullName(permission));
     }
-    return result;
+    *code_ << "mEnforcer.enforcePermissionAllOf(new String[]{" << Join(permissions, ", ")
+           << "}, source);\n";
   }
 
-  shared_ptr<Expression> operator()(const perm::AnyOf& quantifier) {
-    std::shared_ptr<Expression> result;
-    for (const auto& operand : quantifier.operands) {
-      auto expr = (*this)(operand);
-      if (result) {
-        result = std::make_shared<Comparison>(result, "||", expr);
-      } else {
-        result = expr;
-      }
+  void operator()(const perm::AnyOf& quantifier) {
+    std::vector<std::string> permissions;
+    permissions.reserve(quantifier.operands.size());
+    for (auto const& permission : quantifier.operands) {
+      permissions.push_back(android::aidl::perm::JavaFullName(permission));
     }
-    return result;
+    *code_ << "mEnforcer.enforcePermissionAnyOf(new String[]{" << Join(permissions, ", ")
+           << "}, source);\n";
   }
 
-  shared_ptr<Expression> operator()(const std::string& permission) {
-    auto attributionSource =
-        std::string("new android.content.AttributionSource(getCallingUid(), null, null)");
-    for (size_t i = 0; i < method_.GetArguments().size(); i++) {
-      const auto& arg = method_.GetArguments()[i];
-      if (arg->GetType().GetName() == "android.content.AttributionSource") {
-        attributionSource = android::base::StringPrintf("_arg%zu", i);
-        break;
-      }
-    }
+  void operator()(const std::string& permission) {
     auto permissionName = android::aidl::perm::JavaFullName(permission);
-    auto checkPermission =
-        std::make_shared<MethodCall>(THIS_VALUE, "permissionCheckerWrapper",
-                                     std::vector<std::shared_ptr<Expression>>{
-                                         std::make_shared<LiteralExpression>(permissionName),
-                                         std::make_shared<MethodCall>(THIS_VALUE, "getCallingPid"),
-                                         std::make_shared<LiteralExpression>(attributionSource)});
-    return checkPermission;
+    *code_ << "mEnforcer.enforcePermission(" << permissionName << ", source);\n";
   }
 
-  const AidlMethod& method_;
+ private:
+  CodeWriter* code_;
 };
 
-static void GeneratePermissionWrapper(Class* stubClass) {
-  // TODO(b/208707422) avoid generating platform-specific API calls.
-  std::string permissionCheckerWrapperCode =
-      "private boolean permissionCheckerWrapper(\n"
-      "    String permission, int pid, android.content.AttributionSource attributionSource) {\n"
-      "  android.content.Context ctx =\n"
-      "      android.app.ActivityThread.currentActivityThread().getSystemContext();\n"
-      "  return (android.content.PermissionChecker.checkPermissionForDataDelivery(\n"
-      "          ctx, permission, pid, attributionSource, \"\" /*message*/) ==\n"
-      "      android.content.PermissionChecker.PERMISSION_GRANTED);\n"
-      "}\n";
-  auto permissionCheckerWrapper =
-      std::make_shared<LiteralClassElement>(permissionCheckerWrapperCode);
-  stubClass->elements.push_back(permissionCheckerWrapper);
-}
+static void GeneratePermissionMethod(const AidlInterface& iface, const AidlMethod& method,
+                                     const std::shared_ptr<Class>& addTo) {
+  string code;
+  CodeWriterPtr writer = CodeWriter::ForString(&code);
+  *writer << "/** Helper method to enforce permissions for " << method.GetName() << " */\n";
 
-static void GeneratePermissionCheck(const AidlMethod& method, const perm::Expression& expr,
-                                    std::shared_ptr<StatementBlock> addTo) {
-  auto ifstatement = std::make_shared<IfStatement>();
-  auto combinedExpr = std::visit(PermissionVisitor{method}, expr);
-  ifstatement->expression = std::make_shared<Comparison>(combinedExpr, "!=", TRUE_VALUE);
-  ifstatement->statements = std::make_shared<StatementBlock>();
-  ifstatement->statements->Add(std::make_shared<LiteralStatement>(
-      android::base::StringPrintf("throw new SecurityException(\"Access denied, requires: %s\");\n",
-                                  perm::AsJavaAnnotation(expr).c_str())));
-  addTo->Add(ifstatement);
-}
+  auto has_attribution_source =
+      std::any_of(method.GetArguments().begin(), method.GetArguments().end(), [](const auto& arg) {
+        return arg->GetType().GetName() == "android.content.AttributionSource";
+      });
 
-static void GeneratePermissionChecks(const AidlInterface& iface, const AidlMethod& method,
-                                     std::shared_ptr<StatementBlock> addTo) {
-  auto ifacePermExpr = iface.EnforceExpression();
-  if (ifacePermExpr) {
-    GeneratePermissionCheck(method, *ifacePermExpr.get(), addTo);
+  *writer << "protected void " << method.GetName() << "_enforcePermission("
+          << (has_attribution_source ? "android.content.AttributionSource source" : "")
+          << ") throws SecurityException {\n";
+  writer->Indent();
+
+  if (!has_attribution_source) {
+    *writer << "android.content.AttributionSource source = "
+               "new android.content.AttributionSource(getCallingUid(), null, null);\n";
   }
-  auto methodPermExpr = method.GetType().EnforceExpression();
-  if (methodPermExpr) {
-    GeneratePermissionCheck(method, *methodPermExpr.get(), addTo);
+
+  if (auto ifacePermExpr = iface.EnforceExpression(); ifacePermExpr) {
+    std::visit(PermissionVisitor(writer.get()), *ifacePermExpr.get());
+  } else if (auto methodPermExpr = method.GetType().EnforceExpression(); methodPermExpr) {
+    std::visit(PermissionVisitor(writer.get()), *methodPermExpr.get());
   }
+  writer->Dedent();
+  *writer << "}\n";
+  writer->Close();
+  addTo->elements.push_back(std::make_shared<LiteralClassElement>(code));
 }
 
-static void GenerateStubCode(const AidlInterface& iface, const AidlMethod& method, bool oneway,
+static void GenerateStubCode(const AidlMethod& method, bool oneway,
                              std::shared_ptr<Variable> transact_data,
                              std::shared_ptr<Variable> transact_reply,
                              const AidlTypenames& typenames,
                              std::shared_ptr<StatementBlock> statement_block,
                              const Options& options) {
   // try and finally
-  auto tryStatement = std::make_shared<TryStatement>();
-  auto finallyStatement = std::make_shared<FinallyStatement>();
   auto& statements = statement_block;
 
-  if (options.GenTraces()) {
-    statements->Add(tryStatement);
-    statements->Add(finallyStatement);
-    statements = tryStatement->statements;
-    tryStatement->statements->Add(std::make_shared<MethodCall>(
-        std::make_shared<LiteralExpression>("android.os.Trace"), "traceBegin",
-        std::vector<std::shared_ptr<Expression>>{
-            std::make_shared<LiteralExpression>("android.os.Trace.TRACE_TAG_AIDL"),
-            std::make_shared<StringLiteralExpression>("AIDL::java::" + iface.GetName() +
-                                                      "::" + method.GetName() + "::server")}));
-    finallyStatement->statements->Add(std::make_shared<MethodCall>(
-        std::make_shared<LiteralExpression>("android.os.Trace"), "traceEnd",
-        std::vector<std::shared_ptr<Expression>>{
-            std::make_shared<LiteralExpression>("android.os.Trace.TRACE_TAG_AIDL")}));
-  }
-
   auto realCall = std::make_shared<MethodCall>(THIS_VALUE, method.GetName());
 
   // args
@@ -621,8 +606,6 @@
     statements->Add(std::make_shared<MethodCall>(transact_data, "enforceNoDataAvail"));
   }
 
-  GeneratePermissionChecks(iface, method, statements);
-
   // the real call
   if (method.GetType().GetName() == "void") {
     statements->Add(realCall);
@@ -658,22 +641,20 @@
   }
 }
 
-static void GenerateStubCase(const AidlInterface& iface, const AidlMethod& method,
-                             const std::string& transactCodeName, bool oneway,
-                             std::shared_ptr<StubClass> stubClass, const AidlTypenames& typenames,
-                             const Options& options) {
+static void GenerateStubCase(const AidlMethod& method, const std::string& transactCodeName,
+                             bool oneway, const std::shared_ptr<StubClass>& stubClass,
+                             const AidlTypenames& typenames, const Options& options) {
   auto c = std::make_shared<Case>(transactCodeName);
 
-  GenerateStubCode(iface, method, oneway, stubClass->transact_data, stubClass->transact_reply,
-                   typenames, c->statements, options);
+  GenerateStubCode(method, oneway, stubClass->transact_data, stubClass->transact_reply, typenames,
+                   c->statements, options);
   c->statements->Add(std::make_shared<BreakStatement>());
 
   stubClass->transact_switch_user->cases.push_back(c);
 }
 
-static void GenerateStubCaseOutline(const AidlInterface& iface, const AidlMethod& method,
-                                    const std::string& transactCodeName, bool oneway,
-                                    std::shared_ptr<StubClass> stubClass,
+static void GenerateStubCaseOutline(const AidlMethod& method, const std::string& transactCodeName,
+                                    bool oneway, const std::shared_ptr<StubClass>& stubClass,
                                     const AidlTypenames& typenames, const Options& options) {
   std::string outline_name = "onTransact$" + method.GetName() + "$";
   // Generate an "outlined" method with the actual code.
@@ -690,7 +671,7 @@
     onTransact_case->exceptions.push_back("android.os.RemoteException");
     stubClass->elements.push_back(onTransact_case);
 
-    GenerateStubCode(iface, method, oneway, transact_data, transact_reply, typenames,
+    GenerateStubCode(method, oneway, transact_data, transact_reply, typenames,
                      onTransact_case->statements, options);
     onTransact_case->statements->Add(std::make_shared<ReturnStatement>(TRUE_VALUE));
   }
@@ -756,11 +737,6 @@
   out << "try {\n";
   out.Indent();
 
-  if (options.GenTraces()) {
-    auto tag = "AIDL::java::" + iface.GetName() + "::" + method.GetName() + "::client";
-    out << "android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, \"" << tag << "\");\n";
-  }
-
   // the interface identifier token: the DESCRIPTOR constant, marshalled as a
   // string
   out << "_data.writeInterfaceToken(DESCRIPTOR);\n";
@@ -871,10 +847,6 @@
   }
   out << "_data.recycle();\n";
 
-  if (options.GenTraces()) {
-    out << "android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL);\n";
-  }
-
   out.Dedent();
   out << "}\n";  // finally
 
@@ -903,7 +875,7 @@
   stubClass->elements.push_back(transactCode);
 
   // getTransactionName
-  if (options.GenTransactionNames()) {
+  if (options.GenTransactionNames() || options.GenTraces()) {
     auto c = std::make_shared<Case>(transactCodeName);
     c->statements->Add(std::make_shared<ReturnStatement>(
         std::make_shared<StringLiteralExpression>(method.GetName())));
@@ -935,10 +907,12 @@
     bool outline_stub =
         stubClass->transact_outline && stubClass->outline_methods.count(&method) != 0;
     if (outline_stub) {
-      GenerateStubCaseOutline(iface, method, transactCodeName, oneway, stubClass, typenames,
-                              options);
+      GenerateStubCaseOutline(method, transactCodeName, oneway, stubClass, typenames, options);
     } else {
-      GenerateStubCase(iface, method, transactCodeName, oneway, stubClass, typenames, options);
+      GenerateStubCase(method, transactCodeName, oneway, stubClass, typenames, options);
+    }
+    if (iface.EnforceExpression() || method.GetType().EnforceExpression()) {
+      GeneratePermissionMethod(iface, method, stubClass);
     }
   } else {
     if (method.GetName() == kGetInterfaceVersion && options.Version() > 0) {
@@ -1339,20 +1313,14 @@
   interface->elements.push_back(std::make_shared<LiteralClassElement>(constants));
 
   // all the declared methods of the interface
-  bool permissionWrapperGenerated = false;
   int max_transaction_id = 0;
   for (const auto& item : iface->GetMethods()) {
-    if ((iface->EnforceExpression() || item->GetType().EnforceExpression()) &&
-        !permissionWrapperGenerated) {
-      GeneratePermissionWrapper(stub.get());
-      permissionWrapperGenerated = true;
-    }
     GenerateMethods(*iface, *item, interface.get(), stub, proxy, item->GetId(), typenames, options);
     max_transaction_id = std::max(max_transaction_id, item->GetId());
   }
 
   // getMaxTransactionId
-  if (options.GenTransactionNames()) {
+  if (options.GenTransactionNames() || options.GenTraces()) {
     stub->elements.push_back(GenerateMaxTransactionId(max_transaction_id));
   }
 
diff --git a/generate_ndk.cpp b/generate_ndk.cpp
index d6e497f..09168ed 100644
--- a/generate_ndk.cpp
+++ b/generate_ndk.cpp
@@ -192,6 +192,7 @@
                     const AidlDefinedType& defined_type, const Options& options) {
   out << "#pragma once\n\n";
   GenerateHeaderIncludes(out, types, defined_type, options);
+  cpp::GenerateForwardDecls(out, defined_type, true);
   EnterNdkNamespace(out, defined_type);
   GenerateClassDecl(out, types, defined_type, options);
   LeaveNdkNamespace(out, defined_type);
@@ -1190,6 +1191,8 @@
 void GenerateParcelClassDecl(CodeWriter& out, const AidlTypenames& types,
                              const AidlStructuredParcelable& defined_type, const Options& options) {
   const std::string clazz = ClassName(defined_type, ClassNames::RAW);
+
+  cpp::ClangDiagnosticIgnoreDeprecated guard(out, cpp::HasDeprecatedField(defined_type));
   out << cpp::TemplateDecl(defined_type);
   out << "class";
   cpp::GenerateDeprecated(out, defined_type);
@@ -1253,6 +1256,7 @@
   out.Dedent();
   out << "};\n";
 }
+
 void GenerateParcelSource(CodeWriter& out, const AidlTypenames& types,
                           const AidlStructuredParcelable& defined_type, const Options& options) {
   std::string clazz = GetQualifiedName(defined_type);
@@ -1273,55 +1277,60 @@
 
   GenerateConstantDefinitions(out, defined_type, clazz, cpp::TemplateDecl(defined_type));
 
-  out << cpp::TemplateDecl(defined_type);
-  out << "binder_status_t " << clazz << "::readFromParcel(const AParcel* _aidl_parcel) {\n";
-  out.Indent();
-  out << "binder_status_t _aidl_ret_status = STATUS_OK;\n";
-  out << "int32_t _aidl_start_pos = AParcel_getDataPosition(_aidl_parcel);\n";
-  out << "int32_t _aidl_parcelable_size = 0;\n";
-  out << "_aidl_ret_status = AParcel_readInt32(_aidl_parcel, &_aidl_parcelable_size);\n";
-  StatusCheckReturn(out);
-  out << "if (_aidl_parcelable_size < 4) return STATUS_BAD_VALUE;\n";
-  out << "if (_aidl_start_pos > INT32_MAX - _aidl_parcelable_size) return STATUS_BAD_VALUE;\n";
-  for (const auto& variable : defined_type.GetFields()) {
-    out << "if (AParcel_getDataPosition(_aidl_parcel) - _aidl_start_pos >= _aidl_parcelable_size) "
-           "{\n"
-        << "  AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size);\n"
-        << "  return _aidl_ret_status;\n"
-        << "}\n";
-    out << "_aidl_ret_status = ";
-    ReadFromParcelFor({out, types, variable->GetType(), "_aidl_parcel", "&" + variable->GetName()});
-    out << ";\n";
+  {
+    cpp::ClangDiagnosticIgnoreDeprecated guard(out, cpp::HasDeprecatedField(defined_type));
+    out << cpp::TemplateDecl(defined_type);
+    out << "binder_status_t " << clazz << "::readFromParcel(const AParcel* _aidl_parcel) {\n";
+    out.Indent();
+    out << "binder_status_t _aidl_ret_status = STATUS_OK;\n";
+    out << "int32_t _aidl_start_pos = AParcel_getDataPosition(_aidl_parcel);\n";
+    out << "int32_t _aidl_parcelable_size = 0;\n";
+    out << "_aidl_ret_status = AParcel_readInt32(_aidl_parcel, &_aidl_parcelable_size);\n";
     StatusCheckReturn(out);
-  }
-  out << "AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size);\n"
-      << "return _aidl_ret_status;\n";
-  out.Dedent();
-  out << "}\n";
+    out << "if (_aidl_parcelable_size < 4) return STATUS_BAD_VALUE;\n";
+    out << "if (_aidl_start_pos > INT32_MAX - _aidl_parcelable_size) return STATUS_BAD_VALUE;\n";
+    for (const auto& variable : defined_type.GetFields()) {
+      out << "if (AParcel_getDataPosition(_aidl_parcel) - _aidl_start_pos >= "
+             "_aidl_parcelable_size) "
+             "{\n"
+          << "  AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size);\n"
+          << "  return _aidl_ret_status;\n"
+          << "}\n";
+      out << "_aidl_ret_status = ";
+      ReadFromParcelFor(
+          {out, types, variable->GetType(), "_aidl_parcel", "&" + variable->GetName()});
+      out << ";\n";
+      StatusCheckReturn(out);
+    }
+    out << "AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size);\n"
+        << "return _aidl_ret_status;\n";
+    out.Dedent();
+    out << "}\n";
 
-  out << cpp::TemplateDecl(defined_type);
-  out << "binder_status_t " << clazz << "::writeToParcel(AParcel* _aidl_parcel) const {\n";
-  out.Indent();
-  out << "binder_status_t _aidl_ret_status;\n";
+    out << cpp::TemplateDecl(defined_type);
+    out << "binder_status_t " << clazz << "::writeToParcel(AParcel* _aidl_parcel) const {\n";
+    out.Indent();
+    out << "binder_status_t _aidl_ret_status;\n";
 
-  out << "size_t _aidl_start_pos = AParcel_getDataPosition(_aidl_parcel);\n";
-  out << "_aidl_ret_status = AParcel_writeInt32(_aidl_parcel, 0);\n";
-  StatusCheckReturn(out);
-
-  for (const auto& variable : defined_type.GetFields()) {
-    out << "_aidl_ret_status = ";
-    WriteToParcelFor({out, types, variable->GetType(), "_aidl_parcel", variable->GetName()});
-    out << ";\n";
+    out << "size_t _aidl_start_pos = AParcel_getDataPosition(_aidl_parcel);\n";
+    out << "_aidl_ret_status = AParcel_writeInt32(_aidl_parcel, 0);\n";
     StatusCheckReturn(out);
-  }
-  out << "size_t _aidl_end_pos = AParcel_getDataPosition(_aidl_parcel);\n";
-  out << "AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos);\n";
-  out << "AParcel_writeInt32(_aidl_parcel, _aidl_end_pos - _aidl_start_pos);\n";
-  out << "AParcel_setDataPosition(_aidl_parcel, _aidl_end_pos);\n";
 
-  out << "return _aidl_ret_status;\n";
-  out.Dedent();
-  out << "}\n";
+    for (const auto& variable : defined_type.GetFields()) {
+      out << "_aidl_ret_status = ";
+      WriteToParcelFor({out, types, variable->GetType(), "_aidl_parcel", variable->GetName()});
+      out << ";\n";
+      StatusCheckReturn(out);
+    }
+    out << "size_t _aidl_end_pos = AParcel_getDataPosition(_aidl_parcel);\n";
+    out << "AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos);\n";
+    out << "AParcel_writeInt32(_aidl_parcel, _aidl_end_pos - _aidl_start_pos);\n";
+    out << "AParcel_setDataPosition(_aidl_parcel, _aidl_end_pos);\n";
+
+    out << "return _aidl_ret_status;\n";
+    out.Dedent();
+    out << "}\n";
+  }
   out << "\n";
   LeaveNdkNamespace(out, defined_type);
 }
@@ -1329,6 +1338,8 @@
 void GenerateParcelClassDecl(CodeWriter& out, const AidlTypenames& types,
                              const AidlUnionDecl& defined_type, const Options& options) {
   const std::string clazz = ClassName(defined_type, ClassNames::RAW);
+
+  cpp::ClangDiagnosticIgnoreDeprecated guard(out, cpp::HasDeprecatedField(defined_type));
   cpp::UnionWriter uw{defined_type, types,
                       [&](const AidlTypeSpecifier& type, const AidlTypenames& types) {
                         return NdkNameOf(types, type, StorageMode::STACK);
@@ -1368,6 +1379,7 @@
   out.Dedent();
   out << "};\n";
 }
+
 void GenerateParcelSource(CodeWriter& out, const AidlTypenames& types,
                           const AidlUnionDecl& defined_type, const Options& options) {
   std::string clazz = GetQualifiedName(defined_type);
@@ -1407,19 +1419,23 @@
 
   GenerateConstantDefinitions(out, defined_type, clazz, cpp::TemplateDecl(defined_type));
 
-  out << cpp::TemplateDecl(defined_type);
-  out << "binder_status_t " << clazz << "::readFromParcel(const AParcel* _parcel) {\n";
-  out.Indent();
-  uw.ReadFromParcel(out, ctx);
-  out.Dedent();
-  out << "}\n";
+  {
+    cpp::ClangDiagnosticIgnoreDeprecated guard(out, cpp::HasDeprecatedField(defined_type));
+    out << cpp::TemplateDecl(defined_type);
+    out << "binder_status_t " << clazz << "::readFromParcel(const AParcel* _parcel) {\n";
+    out.Indent();
+    uw.ReadFromParcel(out, ctx);
+    out.Dedent();
+    out << "}\n";
 
-  out << cpp::TemplateDecl(defined_type);
-  out << "binder_status_t " << clazz << "::writeToParcel(AParcel* _parcel) const {\n";
-  out.Indent();
-  uw.WriteToParcel(out, ctx);
-  out.Dedent();
-  out << "}\n";
+    out << cpp::TemplateDecl(defined_type);
+    out << "binder_status_t " << clazz << "::writeToParcel(AParcel* _parcel) const {\n";
+    out.Indent();
+    uw.WriteToParcel(out, ctx);
+    out.Dedent();
+    out << "}\n";
+  }
+
   out << "\n";
   LeaveNdkNamespace(out, defined_type);
 }
diff --git a/generate_rust.cpp b/generate_rust.cpp
index 6c79d03..e6d14e0 100644
--- a/generate_rust.cpp
+++ b/generate_rust.cpp
@@ -48,36 +48,52 @@
 static constexpr const char kGetInterfaceVersion[] = "getInterfaceVersion";
 static constexpr const char kGetInterfaceHash[] = "getInterfaceHash";
 
+struct MangledAliasVisitor : AidlVisitor {
+  CodeWriter& out;
+  MangledAliasVisitor(CodeWriter& out) : out(out) {}
+  void Visit(const AidlStructuredParcelable& type) override { VisitType(type); }
+  void Visit(const AidlInterface& type) override { VisitType(type); }
+  void Visit(const AidlEnumDeclaration& type) override { VisitType(type); }
+  void Visit(const AidlUnionDecl& type) override { VisitType(type); }
+  template <typename T>
+  void VisitType(const T& type) {
+    out << " pub use " << Qname(type) << " as " << Mangled(type) << ";\n";
+  }
+  // Return a mangled name for a type (including AIDL package)
+  template <typename T>
+  string Mangled(const T& type) const {
+    ostringstream alias;
+    for (const auto& component : Split(type.GetCanonicalName(), ".")) {
+      alias << "_" << component.size() << "_" << component;
+    }
+    return alias.str();
+  }
+  template <typename T>
+  string Typename(const T& type) const {
+    if constexpr (std::is_same_v<T, AidlInterface>) {
+      return ClassName(type, cpp::ClassNames::INTERFACE);
+    } else {
+      return type.GetName();
+    }
+  }
+  // Return a fully qualified name for a type in the current file (excluding AIDL package)
+  template <typename T>
+  string Qname(const T& type) const {
+    return Module(type) + "::r#" + Typename(type);
+  }
+  // Return a module name for a type (relative to the file)
+  template <typename T>
+  string Module(const T& type) const {
+    if (type.GetParentType()) {
+      return Module(*type.GetParentType()) + "::r#" + type.GetName();
+    } else {
+      return "super";
+    }
+  }
+};
+
 void GenerateMangledAliases(CodeWriter& out, const AidlDefinedType& type) {
-  struct Visitor : AidlVisitor {
-    CodeWriter& out;
-    Visitor(CodeWriter& out) : out(out) {}
-    void Visit(const AidlStructuredParcelable& type) override { VisitType(type); }
-    void Visit(const AidlInterface& type) override { VisitType(type); }
-    void Visit(const AidlEnumDeclaration& type) override { VisitType(type); }
-    void Visit(const AidlUnionDecl& type) override { VisitType(type); }
-    void VisitType(const AidlDefinedType& type) {
-      out << " pub use " << Qname(type) << " as " << Mangled(type) << ";\n";
-    }
-    // Return a mangled name for a type (including AIDL package)
-    string Mangled(const AidlDefinedType& type) const {
-      ostringstream alias;
-      for (const auto& component : Split(type.GetCanonicalName(), ".")) {
-        alias << "_" << component.size() << "_" << component;
-      }
-      return alias.str();
-    }
-    // Return a fully qualified name for a type in the current file (excluding AIDL package)
-    string Qname(const AidlDefinedType& type) const { return Module(type) + "::" + type.GetName(); }
-    // Return a module name for a type (relative to the file)
-    string Module(const AidlDefinedType& type) const {
-      if (type.GetParentType()) {
-        return Module(*type.GetParentType()) + "::" + type.GetName();
-      } else {
-        return "super";
-      }
-    }
-  } v(out);
+  MangledAliasVisitor v(out);
   out << "pub(crate) mod mangled {\n";
   VisitTopDown(v, type);
   out << "}\n";
@@ -148,7 +164,7 @@
     parameters += BuildArg(*arg, typenames, lifetime);
   }
 
-  return fn_prefix + "fn " + method.GetName() + lifetime_str + "(" + parameters + ") -> " +
+  return fn_prefix + "fn r#" + method.GetName() + lifetime_str + "(" + parameters + ") -> " +
          return_type;
 }
 
@@ -219,7 +235,7 @@
     out << "if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {\n";
     out << "  if let Some(_aidl_default_impl) = <Self as " << default_trait_name
         << ">::getDefaultImpl() {\n";
-    out << "    return _aidl_default_impl." << method.GetName() << "(" << default_args << ");\n";
+    out << "    return _aidl_default_impl.r#" << method.GetName() << "(" << default_args << ");\n";
     out << "  }\n";
     out << "}\n";
   }
@@ -336,7 +352,7 @@
       out << "let _aidl_data = self.build_parcel_" + method.GetName() + "(" + build_parcel_args +
                  ")?;\n";
       // Submit transaction.
-      out << "let _aidl_reply = self.binder.submit_transact(transactions::" << method.GetName()
+      out << "let _aidl_reply = self.binder.submit_transact(transactions::r#" << method.GetName()
           << ", _aidl_data, " << transact_flags << ");\n";
       // Deserialize response.
       out << "self.read_response_" + method.GetName() + "(" + read_response_args + ")\n";
@@ -351,7 +367,7 @@
       out.Dedent();
       out << "};\n";
       // Submit transaction.
-      out << "let _aidl_reply = self.binder.submit_transact(transactions::" << method.GetName()
+      out << "let _aidl_reply = self.binder.submit_transact(transactions::r#" << method.GetName()
           << ", _aidl_data, " << transact_flags << ");\n";
       // Deserialize response.
       out << "std::future::ready(self.read_response_" + method.GetName() + "(" +
@@ -370,8 +386,8 @@
       out << "let binder = self.binder.clone();\n";
       out << "P::spawn(\n";
       out.Indent();
-      out << "move || binder.submit_transact(transactions::" << method.GetName() << ", _aidl_data, "
-          << transact_flags << "),\n";
+      out << "move || binder.submit_transact(transactions::r#" << method.GetName()
+          << ", _aidl_data, " << transact_flags << "),\n";
       out << "move |_aidl_reply| async move {\n";
       out.Indent();
       // Deserialize response.
@@ -389,7 +405,7 @@
 
 void GenerateServerTransaction(CodeWriter& out, const AidlInterface& interface,
                                const AidlMethod& method, const AidlTypenames& typenames) {
-  out << "transactions::" << method.GetName() << " => {\n";
+  out << "transactions::r#" << method.GetName() << " => {\n";
   out.Indent();
 
   if (interface.EnforceExpression() || method.GetType().EnforceExpression()) {
@@ -423,7 +439,7 @@
     }
     args += TakeReference(ref_mode, arg_name);
   }
-  out << "let _aidl_return = _aidl_service." << method.GetName() << "(" << args << ");\n";
+  out << "let _aidl_return = _aidl_service.r#" << method.GetName() << "(" << args << ");\n";
 
   if (!method.IsOneway()) {
     out << "match &_aidl_return {\n";
@@ -484,7 +500,7 @@
       args += arg->GetName();
     }
     out << BuildMethod(*method, typenames) << " { "
-        << "self.0." << method->GetName() << "(" << args << ") }\n";
+        << "self.0.r#" << method->GetName() << "(" << args << ") }\n";
   }
   out.Dedent();
   out << "}\n";
@@ -539,7 +555,7 @@
     }
 
     GenerateDeprecated(out, *constant);
-    out << "pub const " << constant->GetName() << ": " << const_type << " = "
+    out << "pub const r#" << constant->GetName() << ": " << const_type << " = "
         << constant->ValueString(ConstantValueDecoratorRef) << ";\n";
   }
 }
@@ -729,7 +745,7 @@
 
       *code_writer << BuildMethod(*method, typenames) << " {\n";
       code_writer->Indent();
-      *code_writer << "self._rt.block_on(self._inner." << method->GetName() << "(" << args
+      *code_writer << "self._rt.block_on(self._inner.r#" << method->GetName() << "(" << args
                    << "))\n";
       code_writer->Dedent();
       *code_writer << "}\n";
@@ -770,7 +786,7 @@
   code_writer->Indent();
   for (const auto& method : iface->GetMethods()) {
     // Generate the transaction code constant
-    *code_writer << "pub const " << method->GetName()
+    *code_writer << "pub const r#" << method->GetName()
                  << ": binder::binder_impl::TransactionCode = "
                     "binder::binder_impl::FIRST_CALL_TRANSACTION + " +
                         std::to_string(method->GetId()) + ";\n";
@@ -840,27 +856,27 @@
 void GenerateParcelBody(CodeWriter& out, const AidlStructuredParcelable* parcel,
                         const AidlTypenames& typenames) {
   GenerateDeprecated(out, *parcel);
-  out << "pub struct " << parcel->GetName() << " {\n";
+  out << "pub struct r#" << parcel->GetName() << " {\n";
   out.Indent();
   for (const auto& variable : parcel->GetFields()) {
     GenerateDeprecated(out, *variable);
     auto field_type =
         RustNameOf(variable->GetType(), typenames, StorageMode::PARCELABLE_FIELD, Lifetime::NONE);
-    out << "pub " << variable->GetName() << ": " << field_type << ",\n";
+    out << "pub r#" << variable->GetName() << ": " << field_type << ",\n";
   }
   out.Dedent();
   out << "}\n";
 }
 
 void GenerateParcelDefault(CodeWriter& out, const AidlStructuredParcelable* parcel) {
-  out << "impl Default for " << parcel->GetName() << " {\n";
+  out << "impl Default for r#" << parcel->GetName() << " {\n";
   out.Indent();
   out << "fn default() -> Self {\n";
   out.Indent();
   out << "Self {\n";
   out.Indent();
   for (const auto& variable : parcel->GetFields()) {
-    out << variable->GetName() << ": ";
+    out << "r#" << variable->GetName() << ": ";
     if (variable->GetDefaultValue()) {
       out << variable->ValueString(ConstantValueDecorator);
     } else {
@@ -897,11 +913,11 @@
   out.Indent();
   for (const auto& variable : parcel->GetFields()) {
     if (TypeNeedsOption(variable->GetType(), typenames)) {
-      out << "let __field_ref = self." << variable->GetName()
+      out << "let __field_ref = self.r#" << variable->GetName()
           << ".as_ref().ok_or(binder::StatusCode::UNEXPECTED_NULL)?;\n";
       out << "subparcel.write(__field_ref)?;\n";
     } else {
-      out << "subparcel.write(&self." << variable->GetName() << ")?;\n";
+      out << "subparcel.write(&self.r#" << variable->GetName() << ")?;\n";
     }
   }
   out << "Ok(())\n";
@@ -918,9 +934,9 @@
     out << "if subparcel.has_more_data() {\n";
     out.Indent();
     if (TypeNeedsOption(variable->GetType(), typenames)) {
-      out << "self." << variable->GetName() << " = Some(subparcel.read()?);\n";
+      out << "self.r#" << variable->GetName() << " = Some(subparcel.read()?);\n";
     } else {
-      out << "self." << variable->GetName() << " = subparcel.read()?;\n";
+      out << "self.r#" << variable->GetName() << " = subparcel.read()?;\n";
     }
     out.Dedent();
     out << "}\n";
@@ -933,7 +949,7 @@
 void GenerateParcelBody(CodeWriter& out, const AidlUnionDecl* parcel,
                         const AidlTypenames& typenames) {
   GenerateDeprecated(out, *parcel);
-  out << "pub enum " << parcel->GetName() << " {\n";
+  out << "pub enum r#" << parcel->GetName() << " {\n";
   out.Indent();
   for (const auto& variable : parcel->GetFields()) {
     GenerateDeprecated(out, *variable);
@@ -946,7 +962,7 @@
 }
 
 void GenerateParcelDefault(CodeWriter& out, const AidlUnionDecl* parcel) {
-  out << "impl Default for " << parcel->GetName() << " {\n";
+  out << "impl Default for r#" << parcel->GetName() << " {\n";
   out.Indent();
   out << "fn default() -> Self {\n";
   out.Indent();
@@ -1024,7 +1040,7 @@
 template <typename ParcelableType>
 void GenerateParcelableTrait(CodeWriter& out, const ParcelableType* parcel,
                              const AidlTypenames& typenames) {
-  out << "impl binder::Parcelable for " << parcel->GetName() << " {\n";
+  out << "impl binder::Parcelable for r#" << parcel->GetName() << " {\n";
   out.Indent();
 
   out << "fn write_to_parcel(&self, "
@@ -1048,13 +1064,13 @@
   out << "}\n";
 
   // Emit the outer (de)serialization traits
-  out << "binder::impl_serialize_for_parcelable!(" << parcel->GetName() << ");\n";
-  out << "binder::impl_deserialize_for_parcelable!(" << parcel->GetName() << ");\n";
+  out << "binder::impl_serialize_for_parcelable!(r#" << parcel->GetName() << ");\n";
+  out << "binder::impl_deserialize_for_parcelable!(r#" << parcel->GetName() << ");\n";
 }
 
 template <typename ParcelableType>
 void GenerateMetadataTrait(CodeWriter& out, const ParcelableType* parcel) {
-  out << "impl binder::binder_impl::ParcelableMetadata for " << parcel->GetName() << " {\n";
+  out << "impl binder::binder_impl::ParcelableMetadata for r#" << parcel->GetName() << " {\n";
   out.Indent();
 
   out << "fn get_descriptor() -> &'static str { \"" << parcel->GetCanonicalName() << "\" }\n";
@@ -1097,13 +1113,13 @@
   code_writer->Indent();
 
   GenerateDeprecated(*code_writer, *enum_decl);
-  *code_writer << enum_decl->GetName() << " : [" << backing_type << "; "
+  *code_writer << "r#" << enum_decl->GetName() << " : [" << backing_type << "; "
                << std::to_string(enum_decl->GetEnumerators().size()) << "] {\n";
   code_writer->Indent();
   for (const auto& enumerator : enum_decl->GetEnumerators()) {
     auto value = enumerator->GetValue()->ValueString(aidl_backing_type, ConstantValueDecorator);
     GenerateDeprecated(*code_writer, *enumerator);
-    *code_writer << enumerator->GetName() << " = " << value << ",\n";
+    *code_writer << "r#" << enumerator->GetName() << " = " << value << ",\n";
   }
   code_writer->Dedent();
   *code_writer << "}\n";
@@ -1130,7 +1146,7 @@
   }
 
   for (const auto& nested : defined_type.GetNestedTypes()) {
-    (*code_writer) << "pub mod " << nested->GetName() << " {\n";
+    (*code_writer) << "pub mod r#" << nested->GetName() << " {\n";
     code_writer->Indent();
     GenerateClass(code_writer, *nested, types, options);
     code_writer->Dedent();
diff --git a/options.cpp b/options.cpp
index b9878b8..924f1ee 100644
--- a/options.cpp
+++ b/options.cpp
@@ -106,7 +106,7 @@
        << "          Generate dependency file next to the output file with the" << endl
        << "          name based on the input file." << endl
        << "  -b" << endl
-       << "          Trigger fail when trying to compile a parcelable." << endl
+       << "          Trigger fail when trying to compile a parcelable declaration." << endl
        << "  --ninja" << endl
        << "          Generate dependency file in a format ninja understands." << endl
        << "  --rpc" << endl
@@ -177,6 +177,8 @@
       return "ndk";
     case Options::Language::RUST:
       return "rust";
+    case Options::Language::CPP_ANALYZER:
+      return "cpp-analyzer";
     case Options::Language::UNSPECIFIED:
       return "unspecified";
     default:
@@ -223,6 +225,8 @@
       return DEFAULT_SDK_VERSION_NDK;
     case Options::Language::RUST:
       return DEFAULT_SDK_VERSION_RUST;
+    case Options::Language::CPP_ANALYZER:
+      return DEFAULT_SDK_VERSION_CPP;
     case Options::Language::UNSPECIFIED:
       return DEFAULT_SDK_VERSION_JAVA;  // The safest option
     default:
@@ -315,6 +319,9 @@
           } else if (lang == "rust") {
             language_ = Options::Language::RUST;
             task_ = Options::Task::COMPILE;
+          } else if (lang == "cpp-analyzer") {
+            language_ = Options::Language::CPP_ANALYZER;
+            task_ = Options::Task::COMPILE;
           } else {
             error_message_ << "Unsupported language: '" << lang << "'" << endl;
             return;
@@ -612,6 +619,8 @@
     return;
   }
 
+  if (min_sdk_version_ >= rpc_version) gen_rpc_ = true;
+
   AIDL_FATAL_IF(!output_dir_.empty() && output_dir_.back() != OS_PATH_SEPARATOR, output_dir_);
   AIDL_FATAL_IF(!output_header_dir_.empty() && output_header_dir_.back() != OS_PATH_SEPARATOR,
                 output_header_dir_);
diff --git a/options.h b/options.h
index 204b371..b3a7c34 100644
--- a/options.h
+++ b/options.h
@@ -39,7 +39,7 @@
 constexpr uint32_t DEFAULT_SDK_VERSION_RUST = 31;
 
 constexpr uint32_t SDK_VERSION_current = 10000;
-constexpr uint32_t SDK_VERSION_Tiramisu = SDK_VERSION_current;
+constexpr uint32_t SDK_VERSION_Tiramisu = 33;
 
 constexpr uint32_t JAVA_PROPAGATE_VERSION = SDK_VERSION_Tiramisu;
 
@@ -90,7 +90,7 @@
 
 class Options final {
  public:
-  enum class Language { UNSPECIFIED, JAVA, CPP, NDK, RUST };
+  enum class Language { UNSPECIFIED, JAVA, CPP, NDK, RUST, CPP_ANALYZER };
 
   enum class Task { HELP, COMPILE, PREPROCESS, DUMP_API, CHECK_API, DUMP_MAPPINGS };
 
@@ -121,7 +121,10 @@
   uint32_t GetMinSdkVersion() const { return min_sdk_version_; }
 
   Language TargetLanguage() const { return language_; }
-  bool IsCppOutput() const { return language_ == Language::CPP || language_ == Language::NDK; }
+  bool IsCppOutput() const {
+    return language_ == Language::CPP || language_ == Language::NDK ||
+           language_ == Language::CPP_ANALYZER;
+  }
 
   Task GetTask() const { return task_; }
 
diff --git a/options_unittest.cpp b/options_unittest.cpp
index 1121402..2931bc6 100644
--- a/options_unittest.cpp
+++ b/options_unittest.cpp
@@ -454,13 +454,13 @@
   EXPECT_EQ(30u, options->GetMinSdkVersion());
 }
 
-TEST(OPtionsTests, AcceptCodeNameAsMinSdkVersion) {
+TEST(OptionsTests, AcceptCodeNameAsMinSdkVersion) {
   const char* args[] = {
       "aidl", "--lang=java", "--min_sdk_version=Tiramisu", "--out=out", "input.aidl", nullptr,
   };
   auto options = GetOptions(args);
   EXPECT_TRUE(options->Ok());
-  EXPECT_EQ(10000u, options->GetMinSdkVersion());
+  EXPECT_EQ(33u, options->GetMinSdkVersion());
 }
 
 TEST(OptionsTest, DefaultMinSdkVersion) {
diff --git a/preprocess.cpp b/preprocess.cpp
index b332f2e..41f76ae 100644
--- a/preprocess.cpp
+++ b/preprocess.cpp
@@ -91,6 +91,9 @@
     if (const auto& cpp_header = t.GetCppHeader(); !cpp_header.empty()) {
       out << " cpp_header " << cpp_header;
     }
+    if (const auto& ndk_header = t.GetNdkHeader(); !ndk_header.empty()) {
+      out << " ndk_header " << ndk_header;
+    }
     out << ";\n";
   }
   void Visit(const AidlStructuredParcelable& t) override {
@@ -148,4 +151,4 @@
 }
 
 }  // namespace aidl
-}  // namespace android
\ No newline at end of file
+}  // namespace android
diff --git a/scripts/example_dep_build_failure_output.txt b/scripts/example_dep_build_failure_output.txt
new file mode 100644
index 0000000..50aa397
--- /dev/null
+++ b/scripts/example_dep_build_failure_output.txt
@@ -0,0 +1,88 @@
+============================================
+PLATFORM_VERSION_CODENAME=UpsideDownCake
+PLATFORM_VERSION=UpsideDownCake
+TARGET_PRODUCT=aosp_cf_x86_64_phone
+TARGET_BUILD_VARIANT=userdebug
+TARGET_ARCH=x86_64
+TARGET_ARCH_VARIANT=silvermont
+TARGET_2ND_ARCH=x86
+TARGET_2ND_ARCH_VARIANT=silvermont
+HOST_OS=linux
+HOST_OS_EXTRA=Linux-5.18.16-1rodete1-amd64-x86_64-Debian-GNU/Linux-rodete
+HOST_CROSS_OS=windows
+BUILD_ID=AOSP.MASTER
+OUT_DIR=out
+============================================
+[100% 1/1] analyzing Android.bp files and generating ninja file at out/soong/build.ninja
+FAILED: out/soong/build.ninja
+cd "$(dirname "out/host/linux-x86/bin/soong_build")" && BUILDER="$PWD/$(basename "out/host/linux-x86/bin/soong_build")" && cd / && env -i  "$BUILDER"     --top "$TOP"     --soong_out "out/soong"     --out "out"     -o out/soong/build.ninja --globListDir build --globFile out/soong/globs-build.ninja -t -l out/.module_paths/Android.bp.list --available_env out/soong/soong.environment.available --used_env out/soong/soong.environment.used.build Android.bp
+error: hardware/interfaces/automotive/audiocontrol/aidl/Android.bp:12:1: module "android.hardware.automotive.audiocontrol-V2-java" variant "android_common" (created by module "android.hardware.automotive.audiocontrol-V2-java-generator" (created by module "android.hardware.automotive.audiocontrol_interface")): depends on multiple versions of the same aidl_interface: android.media.audio.common.types-V1-java-source, android.media.audio.common.types-V2-java-source
+error: hardware/interfaces/automotive/audiocontrol/aidl/Android.bp:12:1: module "android.hardware.automotive.audiocontrol-V2-java" variant "android_common" (created by module "android.hardware.automotive.audiocontrol-V2-java-generator" (created by module "android.hardware.automotive.audiocontrol_interface")): Dependency path: 
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.hardware.audio.common-V1-java{os:android,arch:common,apex:}
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.media.audio.common.types-V1-java{os:android,arch:common,apex:}
+           via tag android.sourceOrOutputDependencyTag: { moduleName:android.media.audio.common.types-V1-java-source tag:}
+    -> android.media.audio.common.types-V1-java-source{}
+error: hardware/interfaces/automotive/audiocontrol/aidl/Android.bp:12:1: module "android.hardware.automotive.audiocontrol-V2-java" variant "android_common" (created by module "android.hardware.automotive.audiocontrol-V2-java-generator" (created by module "android.hardware.automotive.audiocontrol_interface")): Dependency path: 
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.media.audio.common.types-V2-java{os:android,arch:common,apex:}
+           via tag android.sourceOrOutputDependencyTag: { moduleName:android.media.audio.common.types-V2-java-source tag:}
+    -> android.media.audio.common.types-V2-java-source{}
+error: hardware/interfaces/automotive/audiocontrol/aidl/Android.bp:12:1: module "android.hardware.automotive.audiocontrol-V1-java" variant "android_common" (created by module "android.hardware.automotive.audiocontrol-V1-java-generator" (created by module "android.hardware.automotive.audiocontrol_interface")): depends on multiple versions of the same aidl_interface: android.media.audio.common.types-V1-java-source, android.media.audio.common.types-V2-java-source
+error: hardware/interfaces/automotive/audiocontrol/aidl/Android.bp:12:1: module "android.hardware.automotive.audiocontrol-V1-java" variant "android_common" (created by module "android.hardware.automotive.audiocontrol-V1-java-generator" (created by module "android.hardware.automotive.audiocontrol_interface")): Dependency path: 
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.hardware.audio.common-V1-java{os:android,arch:common,apex:}
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.media.audio.common.types-V1-java{os:android,arch:common,apex:}
+           via tag android.sourceOrOutputDependencyTag: { moduleName:android.media.audio.common.types-V1-java-source tag:}
+    -> android.media.audio.common.types-V1-java-source{}
+error: hardware/interfaces/automotive/audiocontrol/aidl/Android.bp:12:1: module "android.hardware.automotive.audiocontrol-V1-java" variant "android_common" (created by module "android.hardware.automotive.audiocontrol-V1-java-generator" (created by module "android.hardware.automotive.audiocontrol_interface")): Dependency path: 
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.media.audio.common.types-V2-java{os:android,arch:common,apex:}
+           via tag android.sourceOrOutputDependencyTag: { moduleName:android.media.audio.common.types-V2-java-source tag:}
+    -> android.media.audio.common.types-V2-java-source{}
+error: hardware/interfaces/audio/aidl/Android.bp:90:1: module "android.hardware.audio.core-V1-java" variant "android_common" (created by module "android.hardware.audio.core-V1-java-generator" (created by module "android.hardware.audio.core_interface")): depends on multiple versions of the same aidl_interface: android.media.audio.common.types-V1-java-source, android.media.audio.common.types-V2-java-source
+error: hardware/interfaces/audio/aidl/Android.bp:90:1: module "android.hardware.audio.core-V1-java" variant "android_common" (created by module "android.hardware.audio.core-V1-java-generator" (created by module "android.hardware.audio.core_interface")): Dependency path: 
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.hardware.audio.common-V1-java{os:android,arch:common,apex:}
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.media.audio.common.types-V1-java{os:android,arch:common,apex:}
+           via tag android.sourceOrOutputDependencyTag: { moduleName:android.media.audio.common.types-V1-java-source tag:}
+    -> android.media.audio.common.types-V1-java-source{}
+error: hardware/interfaces/audio/aidl/Android.bp:90:1: module "android.hardware.audio.core-V1-java" variant "android_common" (created by module "android.hardware.audio.core-V1-java-generator" (created by module "android.hardware.audio.core_interface")): Dependency path: 
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.media.audio.common.types-V2-java{os:android,arch:common,apex:}
+           via tag android.sourceOrOutputDependencyTag: { moduleName:android.media.audio.common.types-V2-java-source tag:}
+    -> android.media.audio.common.types-V2-java-source{}
+error: hardware/interfaces/automotive/audiocontrol/aidl/Android.bp:12:1: module "android.hardware.automotive.audiocontrol-V3-java" variant "android_common" (created by module "android.hardware.automotive.audiocontrol-V3-java-generator" (created by module "android.hardware.automotive.audiocontrol_interface")): depends on multiple versions of the same aidl_interface: android.media.audio.common.types-V1-java-source, android.media.audio.common.types-V2-java-source
+error: hardware/interfaces/automotive/audiocontrol/aidl/Android.bp:12:1: module "android.hardware.automotive.audiocontrol-V3-java" variant "android_common" (created by module "android.hardware.automotive.audiocontrol-V3-java-generator" (created by module "android.hardware.automotive.audiocontrol_interface")): Dependency path: 
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.hardware.audio.common-V1-java{os:android,arch:common,apex:}
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.media.audio.common.types-V1-java{os:android,arch:common,apex:}
+           via tag android.sourceOrOutputDependencyTag: { moduleName:android.media.audio.common.types-V1-java-source tag:}
+    -> android.media.audio.common.types-V1-java-source{}
+error: hardware/interfaces/automotive/audiocontrol/aidl/Android.bp:12:1: module "android.hardware.automotive.audiocontrol-V3-java" variant "android_common" (created by module "android.hardware.automotive.audiocontrol-V3-java-generator" (created by module "android.hardware.automotive.audiocontrol_interface")): Dependency path: 
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.media.audio.common.types-V2-java{os:android,arch:common,apex:}
+           via tag android.sourceOrOutputDependencyTag: { moduleName:android.media.audio.common.types-V2-java-source tag:}
+    -> android.media.audio.common.types-V2-java-source{}
+error: hardware/interfaces/audio/aidl/Android.bp:147:1: module "android.hardware.audio.effect-V1-java" variant "android_common" (created by module "android.hardware.audio.effect-V1-java-generator" (created by module "android.hardware.audio.effect_interface")): depends on multiple versions of the same aidl_interface: android.media.audio.common.types-V1-java-source, android.media.audio.common.types-V2-java-source
+error: hardware/interfaces/audio/aidl/Android.bp:147:1: module "android.hardware.audio.effect-V1-java" variant "android_common" (created by module "android.hardware.audio.effect-V1-java-generator" (created by module "android.hardware.audio.effect_interface")): Dependency path: 
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.hardware.audio.common-V1-java{os:android,arch:common,apex:}
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.media.audio.common.types-V1-java{os:android,arch:common,apex:}
+           via tag android.sourceOrOutputDependencyTag: { moduleName:android.media.audio.common.types-V1-java-source tag:}
+    -> android.media.audio.common.types-V1-java-source{}
+error: hardware/interfaces/audio/aidl/Android.bp:147:1: module "android.hardware.audio.effect-V1-java" variant "android_common" (created by module "android.hardware.audio.effect-V1-java-generator" (created by module "android.hardware.audio.effect_interface")): Dependency path: 
+           via tag java.dependencyTag: { name:staticlib runtimeLinked:false toolchain:false}
+    -> android.media.audio.common.types-V2-java{os:android,arch:common,apex:}
+           via tag android.sourceOrOutputDependencyTag: { moduleName:android.media.audio.common.types-V2-java-source tag:}
+    -> android.media.audio.common.types-V2-java-source{}
+ninja: build stopped: subcommand failed.
+21:43:11 soong bootstrap failed with: exit status 1
+
+#### failed to build some targets (46 seconds) ####
+
diff --git a/scripts/redundancy_check/Android.bp b/scripts/redundancy_check/Android.bp
index fb6fad4..0ad95ea 100644
--- a/scripts/redundancy_check/Android.bp
+++ b/scripts/redundancy_check/Android.bp
@@ -17,6 +17,19 @@
         "libregex",
         "libserde",
         "libserde_json",
-        "libstructopt",
+        "libclap",
     ],
 }
+
+rust_test_host {
+    name: "aidl_redundancy_check.test",
+    srcs: ["srcs/main.rs"],
+    rustlibs: [
+        "libanyhow",
+        "libregex",
+        "libserde",
+        "libserde_json",
+        "libclap",
+    ],
+    test_suites: ["general-tests"],
+}
diff --git a/scripts/redundancy_check/srcs/main.rs b/scripts/redundancy_check/srcs/main.rs
index c45a6c0..401eeb7 100644
--- a/scripts/redundancy_check/srcs/main.rs
+++ b/scripts/redundancy_check/srcs/main.rs
@@ -17,22 +17,22 @@
 //! Reports redundant AIDL libraries included in a partition.
 
 use anyhow::{Context, Result};
+use clap::Parser;
 use std::collections::BTreeMap;
 use std::fs::File;
 use std::io::BufReader;
 use std::path::{Path, PathBuf};
-use structopt::StructOpt;
 
-#[derive(StructOpt, Debug)]
+#[derive(Parser, Debug)]
 #[structopt()]
 struct Opt {
     /// JSON file with list of files installed in a partition, e.g. "$OUT/installed-files.json".
-    #[structopt(long)]
+    #[clap(long)]
     installed_files_json: PathBuf,
 
     /// JSON file with metadata for AIDL interfaces. Optional, but fewer checks are performed when
     /// unset.
-    #[structopt(long)]
+    #[clap(long)]
     aidl_metadata_json: Option<PathBuf>,
 }
 
@@ -97,7 +97,7 @@
 }
 
 fn main() -> Result<()> {
-    let args = Opt::from_args();
+    let args = Opt::parse();
 
     // Read the metadata file if available.
     let metadata_list: Option<Vec<AidlInterfaceMetadata>> = match &args.aidl_metadata_json {
@@ -130,7 +130,7 @@
     let groups: BTreeMap<(String, LibDir), Vec<&AidlInstance>> =
         instances.iter().fold(BTreeMap::new(), |mut acc, x| {
             let key = (x.name.clone(), x.lib_dir);
-            acc.entry(key).or_insert(Vec::new()).push(x);
+            acc.entry(key).or_default().push(x);
             acc
         });
     let mut total_wasted_bytes = 0;
@@ -140,7 +140,7 @@
             // Prefer the highest version, break ties favoring ndk.
             let preferred_instance = instances
                 .iter()
-                .max_by_key(|x| (x.version, if x.variant == "ndk" { 1 } else { 0 }))
+                .max_by_key(|x| (x.version, i32::from(x.variant == "ndk")))
                 .unwrap();
             let wasted_bytes: u64 =
                 instances.iter().filter(|x| *x != preferred_instance).map(|x| x.size).sum();
@@ -162,3 +162,14 @@
 
     Ok(())
 }
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use clap::CommandFactory;
+
+    #[test]
+    fn verify_opt() {
+        Opt::command().debug_assert();
+    }
+}
diff --git a/scripts/vis_aidl_ver_errors.py b/scripts/vis_aidl_ver_errors.py
new file mode 100755
index 0000000..71c3160
--- /dev/null
+++ b/scripts/vis_aidl_ver_errors.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python3
+
+# note - needs
+# sudo apt-get install python3-networkx python3-matplotlib
+import matplotlib.pyplot as plt
+import networkx as nx
+
+import re
+import fileinput
+
+# okay - not actually using this now
+# groups : 1 -> module name, 2 -> ultimate deps
+RE_highlevel = re.compile("error: [^ ]* module \"([^\"]*)\" variant \"[^\"]*\" .*? depends on multiple versions of the same aidl_interface: (.*)\n")
+
+# groups : 1 -> module name
+RE_dependencyStart = re.compile("error: [^ ]* module \"([^\"]*)\" variant \"[^\"]*\" .*? Dependency path.*\n")
+
+# groups : 1 -> module name
+RE_dependencyCont = re.compile(" *-> ([^{]*){.*\n")
+
+RE_ignore= re.compile(" *via tag.*{.*}.*\n")
+
+# [(module, module)]
+graph = []
+
+last = None
+
+for i in fileinput.input():
+    # could validate consistency of this graph based on this
+    if RE_highlevel.fullmatch(i): continue
+
+    m = RE_dependencyStart.fullmatch(i)
+    if m:
+        last = m.groups()[0]
+        continue
+
+    m = RE_dependencyCont.fullmatch(i)
+    if m:
+        curr = m.groups()[0]
+        graph += [(last, curr)]
+        last = curr
+        continue
+
+    if RE_ignore.fullmatch(i): continue
+
+    print("UNRECOGNIZED LINE", i.strip())
+
+#for a,b in graph:
+#    print(a,b)
+
+G = nx.MultiDiGraph()
+G.add_edges_from(graph)
+plt.figure(figsize=(10,10))
+nx.draw(G, connectionstyle='arc3,rad=0.01', with_labels=True)
+plt.show()
+
diff --git a/tests/aidl_integration_test.py b/tests/aidl_integration_test.py
index 5f086da..9fc3c3a 100755
--- a/tests/aidl_integration_test.py
+++ b/tests/aidl_integration_test.py
@@ -192,6 +192,36 @@
                              ' /data/framework android.aidl.sdkversion.service.AidlJavaVersionTestService',
                              background=True)
 
+class JavaPermissionClient:
+    def __init__(self, host, bitness):
+        self.name = "java_client_permission_%s" % pretty_bitness(bitness)
+        self.host = host
+        self.bitness = bitness
+    def cleanup(self):
+        self.host.run('killall ' + APP_PROCESS_FOR_PRETTY_BITNESS % pretty_bitness(self.bitness),
+                      ignore_status=True)
+    def run(self):
+        result = self.host.run('CLASSPATH=/data/framework/aidl_test_java_client_permission.jar '
+                               + APP_PROCESS_FOR_PRETTY_BITNESS % pretty_bitness(self.bitness) +
+                               ' /data/framework android.aidl.permission.tests.PermissionTests')
+        print(result.printable_string())
+        if re.search(INSTRUMENTATION_SUCCESS_PATTERN, result.stdout) is None:
+            raise TestFail(result.stdout)
+
+class JavaPermissionServer:
+    def __init__(self, host, bitness):
+        self.name = "java_server_permission_%s" % pretty_bitness(bitness)
+        self.host = host
+        self.bitness = bitness
+    def cleanup(self):
+        self.host.run('killall ' + APP_PROCESS_FOR_PRETTY_BITNESS % pretty_bitness(self.bitness),
+                      ignore_status=True)
+    def run(self):
+        return self.host.run('CLASSPATH=/data/framework/aidl_test_java_service_permission.jar '
+                             + APP_PROCESS_FOR_PRETTY_BITNESS % pretty_bitness(self.bitness) +
+                             ' /data/framework android.aidl.permission.service.PermissionTestService',
+                             background=True)
+
 def getprop(host, prop):
     return host.run('getprop "%s"' % prop).stdout.strip()
 
@@ -292,5 +322,11 @@
         server = JavaVersionTestServer(host, s_bitness, s_version)
         add_test(client, server)
 
+    # TODO(b/218914259): Interfaces with permission are only supported for the
+    # Java backend. Once C++ and/or Rust are supported, move the test back into
+    # JavaClient and JavaServer.
+    for bitness in bitnesses:
+        add_test(JavaPermissionClient(host, bitness), JavaPermissionServer(host, bitness))
+
     suite = unittest.TestLoader().loadTestsFromTestCase(TestAidl)
     sys.exit(not unittest.TextTestRunner(verbosity=2).run(suite).wasSuccessful())
diff --git a/tests/aidl_integration_test.xml b/tests/aidl_integration_test.xml
index 4e56e30..c7018fa 100644
--- a/tests/aidl_integration_test.xml
+++ b/tests/aidl_integration_test.xml
@@ -47,12 +47,15 @@
       <option name="push" value="aidl_test_java_client_sdk1.jar->/data/framework/aidl_test_java_client_sdk1.jar" />
       <option name="push" value="aidl_test_java_service_sdk1.jar->/data/framework/aidl_test_java_service_sdk1.jar" />
 
+      <option name="push" value="aidl_test_java_client_permission.jar->/data/framework/aidl_test_java_client_permission.jar" />
+      <option name="push" value="aidl_test_java_service_permission.jar->/data/framework/aidl_test_java_service_permission.jar" />
+
       <option name="cleanup" value="true" />
     </target_preparer>
 
     <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
         <option name="par-file-name" value="aidl_integration_test" />
-        <option name="test-timeout" value="2m" />
+        <option name="test-timeout" value="5m" />
     </test>
 </configuration>
 
diff --git a/tests/aidl_parser_fuzzer.dict b/tests/aidl_parser_fuzzer.dict
index 20a270a..4cbe8b8 100644
--- a/tests/aidl_parser_fuzzer.dict
+++ b/tests/aidl_parser_fuzzer.dict
@@ -6,6 +6,7 @@
 " out "
 " inout "
 " cpp_header "
+" ndk_header "
 " const "
 " true "
 " false "
@@ -49,6 +50,7 @@
 " @SystemApi "
 " @JavaPassthrough "
 " @JavaOnlyStableParcelable "
+" @NdkOnlyStableParcelable "
 " @Backing "
 " @FixedSize "
 " @Descriptor "
diff --git a/tests/aidl_test_client.h b/tests/aidl_test_client.h
index 9dc17c1..6c91174 100644
--- a/tests/aidl_test_client.h
+++ b/tests/aidl_test_client.h
@@ -19,6 +19,7 @@
 #include <android/aidl/tests/ICppJavaTests.h>
 #include <android/aidl/tests/ITestService.h>
 #include <binder/IServiceManager.h>
+#include <binder/ProcessState.h>
 #include <gtest/gtest.h>
 #include <utils/String16.h>
 
@@ -30,11 +31,13 @@
 class AidlTest : public testing::Test {
  public:
   void SetUp() override {
-    using android::getService;
     using android::OK;
     using android::String16;
+    using android::waitForService;
 
-    ASSERT_EQ(OK, getService(ITestService::descriptor, &service));
+    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
+    android::ProcessState::self()->startThreadPool();
+    service = waitForService<ITestService>(ITestService::descriptor);
     ASSERT_NE(nullptr, service);
 
     sp<android::IBinder> ibinder;
diff --git a/tests/aidl_test_client_delegate.cpp b/tests/aidl_test_client_delegate.cpp
index c17d193..aaa28b7 100644
--- a/tests/aidl_test_client_delegate.cpp
+++ b/tests/aidl_test_client_delegate.cpp
@@ -16,10 +16,13 @@
 #include "aidl_test_client.h"
 #include "gmock/gmock.h"
 
+#include "android/aidl/tests/BnNamedCallback.h"
 #include "android/aidl/tests/BnTestService.h"
 
 using android::binder::Status;
 
+using android::String16;
+using android::aidl::tests::INamedCallback;
 using android::aidl::tests::ITestService;
 using android::aidl::tests::ITestServiceDelegator;
 
@@ -55,3 +58,110 @@
   ASSERT_TRUE(status.isOk()) << status;
   EXPECT_EQ(kCustomByte, returned_value);
 }
+
+TEST_F(AidlTest, DelegatorWithBinders) {
+  auto delegator = sp<ITestServiceDelegator>::make(service);
+
+  sp<INamedCallback> callback;
+  auto status = delegator->GetOtherTestService(String16("callback1"), &callback);
+  ASSERT_TRUE(status.isOk()) << status;
+
+  bool verified = false;
+  status = delegator->VerifyName(callback, String16("callback1"), &verified);
+  ASSERT_TRUE(status.isOk()) << status;
+  EXPECT_TRUE(verified);
+}
+
+TEST_F(AidlTest, DelegatorSimpl) {
+  auto delegator = sp<ITestServiceDelegator>::make(service);
+  sp<ITestService> impl = delegator->getImpl();
+}
+
+TEST_F(AidlTest, DelegateWrapAndGet) {
+  auto delegator = delegate(service);
+  auto delegator2 = delegate(service);
+  EXPECT_EQ(delegator, delegator2);
+}
+
+TEST_F(AidlTest, DelegateWrapAndUnwrap) {
+  sp<ITestServiceDelegator> delegator = sp<ITestServiceDelegator>::cast(delegate(service));
+  EXPECT_NE(service, delegator);
+
+  sp<ITestService> service2 = delegator->getImpl();
+  EXPECT_EQ(service, service2);
+
+  auto delegator2 = delegate(sp<ITestService>::cast(delegator));
+  EXPECT_EQ(service, delegator2);
+}
+
+TEST_F(AidlTest, DelegatorSetAndGetBinder) {
+  auto delegator = sp<ITestServiceDelegator>::make(service);
+
+  sp<INamedCallback> callback;
+  auto status = delegator->GetCallback(false, &callback);
+  ASSERT_TRUE(status.isOk()) << status;
+
+  // callback will be wrapped for first time and the delegator will be sent
+  bool already_existing;
+  status = delegator->SetOtherTestService(String16("same_one"), callback, &already_existing);
+  ASSERT_TRUE(status.isOk()) << status;
+  ASSERT_FALSE(already_existing);
+
+  // unwrap the delegator here and get the original binder
+  sp<INamedCallback> callback2;
+  status = delegator->GetOtherTestService(String16("same_one"), &callback2);
+  ASSERT_TRUE(status.isOk()) << status;
+  EXPECT_EQ(callback, callback2);
+}
+
+TEST_F(AidlTest, DelegatorSettingSameBinders) {
+  auto delegator = sp<ITestServiceDelegator>::make(service);
+
+  sp<INamedCallback> callback;
+  auto status = delegator->GetCallback(false, &callback);
+  ASSERT_TRUE(status.isOk()) << status;
+
+  bool already_existing = false;
+  status = delegator->SetOtherTestService(String16("same_two"), callback, &already_existing);
+  ASSERT_TRUE(status.isOk()) << status;
+  ASSERT_FALSE(already_existing);
+
+  status = delegator->SetOtherTestService(String16("same_two"), callback, &already_existing);
+  ASSERT_TRUE(status.isOk()) << status;
+  EXPECT_TRUE(already_existing);
+}
+
+TEST_F(AidlTest, DelegatorSameBinders) {
+  auto delegator = sp<ITestServiceDelegator>::make(service);
+
+  sp<INamedCallback> callback1;
+  auto status = delegator->GetOtherTestService(String16("callback1"), &callback1);
+  ASSERT_TRUE(status.isOk()) << status;
+
+  sp<INamedCallback> callback1Copy;
+  status = delegator->GetOtherTestService(String16("callback1"), &callback1Copy);
+  ASSERT_TRUE(status.isOk()) << status;
+  EXPECT_EQ(callback1, callback1Copy);
+}
+
+TEST_F(AidlTest, DelegatorWithCallback) {
+  auto delegator = sp<ITestServiceDelegator>::make(service);
+
+  sp<INamedCallback> callback;
+  auto status = delegator->GetCallback(false, &callback);
+  ASSERT_TRUE(status.isOk()) << status;
+
+  String16 name;
+  status = callback->GetName(&name);
+  ASSERT_TRUE(status.isOk()) << status;
+  EXPECT_TRUE(name.size() != 0);
+}
+
+TEST_F(AidlTest, DelegatorWithNullCallback) {
+  auto delegator = sp<ITestServiceDelegator>::make(service);
+
+  sp<INamedCallback> callback;
+  auto status = delegator->GetCallback(true, &callback);
+  ASSERT_TRUE(status.isOk()) << status;
+  EXPECT_TRUE(callback == nullptr);
+}
diff --git a/tests/aidl_test_client_loggable_interface.cpp b/tests/aidl_test_client_loggable_interface.cpp
index a06469b..61878af 100644
--- a/tests/aidl_test_client_loggable_interface.cpp
+++ b/tests/aidl_test_client_loggable_interface.cpp
@@ -48,8 +48,8 @@
   EXPECT_TRUE(status.isOk());
   if (backendType != BackendType::CPP) GTEST_SKIP();
 
-  sp<ILoggableInterface> loggable;
-  EXPECT_EQ(android::OK, android::getService(ILoggableInterface::descriptor, &loggable));
+  sp<ILoggableInterface> loggable =
+      android::waitForService<ILoggableInterface>(ILoggableInterface::descriptor);
   ASSERT_NE(nullptr, loggable);
 
   BpLoggableInterface::TransactionLog log;
diff --git a/tests/aidl_test_client_ndk_delegate.cpp b/tests/aidl_test_client_ndk_delegate.cpp
index ec1f60c..0f567d2 100644
--- a/tests/aidl_test_client_ndk_delegate.cpp
+++ b/tests/aidl_test_client_ndk_delegate.cpp
@@ -15,6 +15,7 @@
  */
 #include <android/binder_auto_utils.h>
 #include <android/binder_manager.h>
+#include <binder/ProcessState.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -43,7 +44,9 @@
 struct AidlDelegatorTest : testing::Test {
   template <typename T>
   std::shared_ptr<T> getService() {
-    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_getService(T::descriptor));
+    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
+    android::ProcessState::self()->startThreadPool();
+    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_waitForService(T::descriptor));
     return T::fromBinder(binder);
   }
   void SetUp() override { service = getService<ITestService>(); }
diff --git a/tests/aidl_test_client_ndk_loggable_interface.cpp b/tests/aidl_test_client_ndk_loggable_interface.cpp
index 4b9f095..1f7b550 100644
--- a/tests/aidl_test_client_ndk_loggable_interface.cpp
+++ b/tests/aidl_test_client_ndk_loggable_interface.cpp
@@ -18,6 +18,7 @@
 
 #include <android/binder_auto_utils.h>
 #include <android/binder_manager.h>
+#include <binder/ProcessState.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -41,7 +42,9 @@
 struct AidlTest : testing::Test {
   template <typename T>
   std::shared_ptr<T> getService() {
-    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_getService(T::descriptor));
+    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
+    android::ProcessState::self()->startThreadPool();
+    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_waitForService(T::descriptor));
     return T::fromBinder(binder);
   }
 };
@@ -123,8 +126,8 @@
                   {"in_listValue", "[mno]"},
                   {"in_dataValue",
                    "Data{num: 42, str: abc, nestedUnion: Union{str: def}, nestedEnum: FOO}"},
-                  {"in_binderValue", "(null)"},
-                  {"in_pfdValue", "(null)"},
+                  {"in_binderValue", "binder:0x0"},
+                  {"in_pfdValue", "fd:-1"},
                   {"in_pfdArray", "[]"},
               }));
   EXPECT_THAT(log.output_args,
@@ -137,6 +140,6 @@
                                               {"in_doubleArray", "[53.000000, 54.000000]"},
                                               {"in_stringArray", "[ghi, jkl]"},
                                               {"in_listValue", "[mno]"},
-                                              {"in_pfdValue", "(null)"},
+                                              {"in_pfdValue", "fd:-1"},
                                               {"in_pfdArray", "[]"}}));
 }
diff --git a/tests/aidl_test_client_ndk_nested.cpp b/tests/aidl_test_client_ndk_nested.cpp
index 632e5be..686219c 100644
--- a/tests/aidl_test_client_ndk_nested.cpp
+++ b/tests/aidl_test_client_ndk_nested.cpp
@@ -17,6 +17,7 @@
 #include <android/binder_auto_utils.h>
 #include <android/binder_manager.h>
 #include <binder/IServiceManager.h>
+#include <binder/ProcessState.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 #include <utils/String16.h>
@@ -39,7 +40,9 @@
 struct AidlTest : testing::Test {
   template <typename T>
   std::shared_ptr<T> getService() {
-    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_getService(T::descriptor));
+    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
+    android::ProcessState::self()->startThreadPool();
+    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_waitForService(T::descriptor));
     return T::fromBinder(binder);
   }
 };
diff --git a/tests/aidl_test_client_ndk_nullables.cpp b/tests/aidl_test_client_ndk_nullables.cpp
index 7b56cf9..d80db4f 100644
--- a/tests/aidl_test_client_ndk_nullables.cpp
+++ b/tests/aidl_test_client_ndk_nullables.cpp
@@ -16,6 +16,7 @@
 
 #include <android/binder_auto_utils.h>
 #include <android/binder_manager.h>
+#include <binder/ProcessState.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -29,7 +30,9 @@
 struct AidlTest : testing::Test {
   template <typename T>
   std::shared_ptr<T> getService() {
-    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_getService(T::descriptor));
+    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
+    android::ProcessState::self()->startThreadPool();
+    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_waitForService(T::descriptor));
     return T::fromBinder(binder);
   }
   void SetUp() override {
@@ -143,4 +146,4 @@
   ASSERT_TRUE(reversed);
   std::reverse(std::begin(*reversed), std::end(*reversed));
   EXPECT_THAT(input, Eq(reversed));
-}
\ No newline at end of file
+}
diff --git a/tests/aidl_test_client_ndk_parcelables.cpp b/tests/aidl_test_client_ndk_parcelables.cpp
index 8b9cd19..37d0405 100644
--- a/tests/aidl_test_client_ndk_parcelables.cpp
+++ b/tests/aidl_test_client_ndk_parcelables.cpp
@@ -20,6 +20,7 @@
 
 #include <android/binder_auto_utils.h>
 #include <android/binder_manager.h>
+#include <binder/ProcessState.h>
 #include <gtest/gtest.h>
 
 #include <aidl/android/aidl/fixedsizearray/FixedSizeArrayExample.h>
@@ -51,7 +52,9 @@
 struct AidlTest : testing::Test {
   template <typename T>
   std::shared_ptr<T> getService() {
-    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_getService(T::descriptor));
+    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
+    android::ProcessState::self()->startThreadPool();
+    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_waitForService(T::descriptor));
     return T::fromBinder(binder);
   }
 };
diff --git a/tests/aidl_test_client_ndk_primitives_test.cpp b/tests/aidl_test_client_ndk_primitives_test.cpp
index e82354f..56df3be 100644
--- a/tests/aidl_test_client_ndk_primitives_test.cpp
+++ b/tests/aidl_test_client_ndk_primitives_test.cpp
@@ -16,6 +16,7 @@
 
 #include <android/binder_auto_utils.h>
 #include <android/binder_manager.h>
+#include <binder/ProcessState.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -28,7 +29,9 @@
 struct AidlTest : testing::Test {
   template <typename T>
   std::shared_ptr<T> getService() {
-    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_getService(T::descriptor));
+    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
+    android::ProcessState::self()->startThreadPool();
+    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_waitForService(T::descriptor));
     return T::fromBinder(binder);
   }
 };
diff --git a/tests/aidl_test_client_ndk_strings_test.cpp b/tests/aidl_test_client_ndk_strings_test.cpp
index 3623d7e..a9873bb 100644
--- a/tests/aidl_test_client_ndk_strings_test.cpp
+++ b/tests/aidl_test_client_ndk_strings_test.cpp
@@ -16,6 +16,7 @@
 
 #include <android/binder_auto_utils.h>
 #include <android/binder_manager.h>
+#include <binder/ProcessState.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -28,7 +29,9 @@
 struct AidlTest : testing::Test {
   template <typename T>
   std::shared_ptr<T> getService() {
-    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_getService(T::descriptor));
+    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
+    android::ProcessState::self()->startThreadPool();
+    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_waitForService(T::descriptor));
     return T::fromBinder(binder);
   }
   void SetUp() override {
diff --git a/tests/aidl_test_client_ndk_versioned_interface.cpp b/tests/aidl_test_client_ndk_versioned_interface.cpp
index f135943..9011e99 100644
--- a/tests/aidl_test_client_ndk_versioned_interface.cpp
+++ b/tests/aidl_test_client_ndk_versioned_interface.cpp
@@ -20,6 +20,7 @@
 
 #include <android/binder_auto_utils.h>
 #include <android/binder_manager.h>
+#include <binder/ProcessState.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -37,12 +38,15 @@
 
 struct VersionedInterfaceTest : ::testing::Test {
   void SetUp() override {
-    ndk::SpAIBinder binder = ndk::SpAIBinder(AServiceManager_getService(IFooInterface::descriptor));
+    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
+    android::ProcessState::self()->startThreadPool();
+    ndk::SpAIBinder binder =
+        ndk::SpAIBinder(AServiceManager_waitForService(IFooInterface::descriptor));
     versioned = IFooInterface::fromBinder(binder);
     ASSERT_NE(nullptr, versioned);
 
     ndk::SpAIBinder testServiceBinder =
-        ndk::SpAIBinder(AServiceManager_getService(ITestService::descriptor));
+        ndk::SpAIBinder(AServiceManager_waitForService(ITestService::descriptor));
     auto service = ITestService::fromBinder(testServiceBinder);
     auto status = service->getBackendType(&backend);
     EXPECT_TRUE(status.isOk()) << status.getDescription();
diff --git a/tests/aidl_test_client_nested.cpp b/tests/aidl_test_client_nested.cpp
index 9f637b1..116203c 100644
--- a/tests/aidl_test_client_nested.cpp
+++ b/tests/aidl_test_client_nested.cpp
@@ -38,8 +38,8 @@
 using testing::Optional;
 
 TEST_F(AidlTest, NestedService) {
-  sp<INestedService> nestedService;
-  EXPECT_EQ(android::OK, android::getService(INestedService::descriptor, &nestedService));
+  sp<INestedService> nestedService =
+      android::waitForService<INestedService>(INestedService::descriptor);
   ASSERT_NE(nullptr, nestedService);
 
   ParcelableWithNested p;
diff --git a/tests/aidl_test_client_parcelables.cpp b/tests/aidl_test_client_parcelables.cpp
index 119f513..17f194d 100644
--- a/tests/aidl_test_client_parcelables.cpp
+++ b/tests/aidl_test_client_parcelables.cpp
@@ -677,8 +677,9 @@
 }
 
 TEST_F(AidlTest, FixedSizeArrayOverBinder) {
-  sp<IRepeatFixedSizeArray> service;
-  ASSERT_EQ(OK, getService(IRepeatFixedSizeArray::descriptor, &service));
+  sp<IRepeatFixedSizeArray> service =
+      android::waitForService<IRepeatFixedSizeArray>(IRepeatFixedSizeArray::descriptor);
+  ASSERT_NE(service, nullptr);
 
   CheckRepeat(service, &IRepeatFixedSizeArray::RepeatBytes, (std::array<uint8_t, 3>{1, 2, 3}));
 
@@ -707,4 +708,4 @@
 
   CheckRepeat(service, &IRepeatFixedSizeArray::Repeat2dParcelables,
               Make2dArray<IntParcelable>({p1, p2, p3}));
-}
\ No newline at end of file
+}
diff --git a/tests/aidl_test_client_versioned_interface.cpp b/tests/aidl_test_client_versioned_interface.cpp
index 3ea983a..943752a 100644
--- a/tests/aidl_test_client_versioned_interface.cpp
+++ b/tests/aidl_test_client_versioned_interface.cpp
@@ -17,6 +17,7 @@
 #include <android/aidl/versioned/tests/BnFooInterface.h>
 #include <android/aidl/versioned/tests/IFooInterface.h>
 #include <binder/IServiceManager.h>
+#include <binder/ProcessState.h>
 #include <gtest/gtest.h>
 #include <utils/String16.h>
 
@@ -33,7 +34,9 @@
 class VersionedInterfaceTest : public AidlTest {
  public:
   void SetUp() override {
-    ASSERT_EQ(OK, android::getService(IFooInterface::descriptor, &versioned));
+    android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
+    android::ProcessState::self()->startThreadPool();
+    versioned = android::waitForService<IFooInterface>(IFooInterface::descriptor);
     ASSERT_NE(nullptr, versioned);
 
     AidlTest::SetUp();
diff --git a/tests/aidl_test_service.cpp b/tests/aidl_test_service.cpp
index a13547f..810c38c 100644
--- a/tests/aidl_test_service.cpp
+++ b/tests/aidl_test_service.cpp
@@ -15,6 +15,7 @@
  */
 
 #include <map>
+#include <mutex>
 #include <optional>
 #include <sstream>
 #include <string>
@@ -56,6 +57,9 @@
 
 #include "android/aidl/tests/nested/BnNestedService.h"
 
+#include "android/aidl/tests/BnCircular.h"
+#include "android/aidl/tests/ICircular.h"
+
 #include "android/aidl/loggable/BnLoggableInterface.h"
 #include "android/aidl/loggable/Data.h"
 
@@ -88,19 +92,23 @@
 // Generated code:
 using android::aidl::tests::BackendType;
 using android::aidl::tests::BadParcelable;
+using android::aidl::tests::BnCircular;
 using android::aidl::tests::BnCppJavaTests;
 using android::aidl::tests::BnNamedCallback;
 using android::aidl::tests::BnNewName;
 using android::aidl::tests::BnOldName;
 using android::aidl::tests::BnTestService;
 using android::aidl::tests::ByteEnum;
+using android::aidl::tests::CircularParcelable;
 using android::aidl::tests::ConstantExpressionEnum;
 using android::aidl::tests::GenericStructuredParcelable;
+using android::aidl::tests::ICircular;
 using android::aidl::tests::ICppJavaTests;
 using android::aidl::tests::INamedCallback;
 using android::aidl::tests::INewName;
 using android::aidl::tests::IntEnum;
 using android::aidl::tests::IOldName;
+using android::aidl::tests::ITestService;
 using android::aidl::tests::LongEnum;
 using android::aidl::tests::RecursiveList;
 using android::aidl::tests::SimpleParcelable;
@@ -163,6 +171,20 @@
   }
 };
 
+class Circular : public BnCircular {
+ public:
+  Circular(sp<ITestService> srv) : mSrv(srv) {}
+  ~Circular() = default;
+
+  Status GetTestService(sp<ITestService>* _aidl_return) override {
+    *_aidl_return = mSrv;
+    return Status::ok();
+  }
+
+ private:
+  sp<ITestService> mSrv;
+};
+
 template <typename T>
 Status ReverseArray(const vector<T>& input, vector<T>* repeated, vector<T>* _aidl_return) {
   ALOGI("Reversing array of length %zu", input.size());
@@ -400,8 +422,25 @@
     return ReverseArray(input, repeated, _aidl_return);
   }
 
+  Status SetOtherTestService(const String16& name, const sp<INamedCallback>& service,
+                             bool* _aidl_return) override {
+    std::lock_guard<std::mutex> guard(service_map_mutex_);
+    const auto& existing = service_map_.find(name);
+    if (existing != service_map_.end() && existing->second == service) {
+      *_aidl_return = true;
+
+      return Status::ok();
+    } else {
+      *_aidl_return = false;
+      service_map_[name] = service;
+
+      return Status::ok();
+    }
+  }
+
   Status GetOtherTestService(const String16& name,
                              sp<INamedCallback>* returned_service) override {
+    std::lock_guard<std::mutex> guard(service_map_mutex_);
     if (service_map_.find(name) == service_map_.end()) {
       sp<INamedCallback> new_item(new NamedCallback(name));
       service_map_[name] = new_item;
@@ -761,6 +800,13 @@
     return Status::ok();
   }
 
+  Status GetCircular(CircularParcelable* cp, sp<ICircular>* _aidl_return) override {
+    auto srv = sp<ITestService>::fromExisting(this);
+    cp->testService = srv;
+    *_aidl_return = new Circular(srv);
+    return Status::ok();
+  }
+
   android::status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply,
                                uint32_t flags) override {
     if (code == ::android::IBinder::FIRST_CALL_TRANSACTION + 0 /* UnimplementedMethod */) {
@@ -773,6 +819,7 @@
 
  private:
   map<String16, sp<INamedCallback>> service_map_;
+  std::mutex service_map_mutex_;
 };
 
 class VersionedService : public android::aidl::versioned::tests::BnFooInterface {
diff --git a/tests/android/aidl/tests/CircularParcelable.aidl b/tests/android/aidl/tests/CircularParcelable.aidl
new file mode 100644
index 0000000..c314a59
--- /dev/null
+++ b/tests/android/aidl/tests/CircularParcelable.aidl
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.aidl.tests;
+
+import android.aidl.tests.ITestService;
+
+parcelable CircularParcelable {
+    @nullable ITestService testService;
+}
diff --git a/tests/android/aidl/tests/ICircular.aidl b/tests/android/aidl/tests/ICircular.aidl
new file mode 100644
index 0000000..10c857f
--- /dev/null
+++ b/tests/android/aidl/tests/ICircular.aidl
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.aidl.tests;
+
+import android.aidl.tests.ITestService;
+
+interface ICircular {
+    @nullable ITestService GetTestService();
+}
diff --git a/tests/android/aidl/tests/ITestService.aidl b/tests/android/aidl/tests/ITestService.aidl
index 63c0c6c..8bee759 100644
--- a/tests/android/aidl/tests/ITestService.aidl
+++ b/tests/android/aidl/tests/ITestService.aidl
@@ -18,6 +18,8 @@
 
 import android.aidl.tests.BackendType;
 import android.aidl.tests.ByteEnum;
+import android.aidl.tests.CircularParcelable;
+import android.aidl.tests.ICircular;
 import android.aidl.tests.INamedCallback;
 import android.aidl.tests.INewName;
 import android.aidl.tests.IOldName;
@@ -31,7 +33,7 @@
 /**
  * interface comment
  */
-@SuppressWarnings(value={"inout-parameter", "mixed-oneway", "out-array"})
+@SuppressWarnings(value={"inout-parameter", "mixed-oneway", "out-array", "interface-name"})
 @SensitiveData
 @JavaDefault
 @JavaDelegator
@@ -118,6 +120,8 @@
 
     // Test that clients can send and receive Binders.
     @PropagateAllowBlocking INamedCallback GetOtherTestService(String name);
+    // returns true if the same service is already registered with the same name
+    boolean SetOtherTestService(String name, INamedCallback service);
     boolean VerifyName(INamedCallback service, String name);
     INamedCallback[] GetInterfaceArray(in String[] names);
     boolean VerifyNamesWithInterfaceArray(in INamedCallback[] services, in String[] names);
@@ -291,5 +295,19 @@
         @nullable Empty[] nullable_parcel_array;
         List<Empty> parcel_list;
         @nullable List<Empty> nullable_parcel_list;
+
+        // interface without I-
+        interface Foo {}
+
+        parcelable HasDeprecated {
+            /** @deprecated field */
+            int deprecated;
+        }
+        union UsingHasDeprecated {
+            int n;
+            HasDeprecated m;
+        }
     }
+
+    ICircular GetCircular(out CircularParcelable cp);
 }
diff --git a/tests/android/aidl/tests/permission/IProtected.aidl b/tests/android/aidl/tests/permission/IProtected.aidl
index 3407199..d2fdba5 100644
--- a/tests/android/aidl/tests/permission/IProtected.aidl
+++ b/tests/android/aidl/tests/permission/IProtected.aidl
@@ -9,4 +9,7 @@
 
     @EnforcePermission("android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK")
     void NonManifestPermission();
+
+    // Used by the integration tests to dynamically set permissions that are considered granted.
+    @RequiresNoPermission void SetGranted(in List<String> permissions);
 }
diff --git a/tests/fake_io_delegate.cpp b/tests/fake_io_delegate.cpp
index 6bd2984..41fa2a1 100644
--- a/tests/fake_io_delegate.cpp
+++ b/tests/fake_io_delegate.cpp
@@ -86,42 +86,6 @@
   return files;
 }
 
-void FakeIoDelegate::AddStubParcelable(const string& canonical_name,
-                                       const string& cpp_header) {
-  string package, class_name, rel_path;
-  SplitPackageClass(canonical_name, &rel_path, &package, &class_name);
-  string contents;
-  if (cpp_header.empty()) {
-    contents = StringPrintf("package %s;\nparcelable %s;",
-                            package.c_str(), class_name.c_str());
-  } else {
-    contents = StringPrintf("package %s;\nparcelable %s cpp_header \"%s\";",
-                            package.c_str(), class_name.c_str(),
-                            cpp_header.c_str());
-  }
-  SetFileContents(rel_path, contents);
-}
-
-void FakeIoDelegate::AddStubInterface(const string& canonical_name) {
-  string package, class_name, rel_path;
-  SplitPackageClass(canonical_name, &rel_path, &package, &class_name);
-  string contents = StringPrintf("package %s;\ninterface %s { }",
-                                 package.c_str(), class_name.c_str());
-  SetFileContents(rel_path, contents);
-}
-
-void FakeIoDelegate::AddCompoundParcelable(const string& canonical_name,
-                                           const vector<string>& subclasses) {
-  string package, class_name, rel_path;
-  SplitPackageClass(canonical_name, &rel_path, &package, &class_name);
-  string contents = StringPrintf("package %s;\n", package.c_str());
-  for (const string& subclass : subclasses) {
-    StringAppendF(&contents, "parcelable %s.%s;\n",
-                  class_name.c_str(), subclass.c_str());
-  }
-  SetFileContents(rel_path, contents);
-}
-
 void FakeIoDelegate::AddBrokenFilePath(const std::string& path) {
   broken_files_.insert(path);
 }
diff --git a/tests/fake_io_delegate.h b/tests/fake_io_delegate.h
index 81d6f89..2503cce 100644
--- a/tests/fake_io_delegate.h
+++ b/tests/fake_io_delegate.h
@@ -48,13 +48,7 @@
   android::base::Result<std::vector<std::string>> ListFiles(const std::string& dir) const override;
 
   // Methods added to facilitate testing.
-  void SetFileContents(const std::string& filename,
-                       const std::string& contents);
-  void AddStubParcelable(const std::string& canonical_name,
-                         const std::string& cpp_header);
-  void AddStubInterface(const std::string& canonical_name);
-  void AddCompoundParcelable(const std::string& canonical_name,
-                             const std::vector<std::string>& subclasses);
+  void SetFileContents(const std::string& filename, const std::string& contents);
   void AddBrokenFilePath(const std::string& path);
   // Returns true iff we've previously written to |path|.
   // When we return true, we'll set *contents to the written string.
diff --git a/tests/golden_output/aidl-test-fixedsizearray-cpp-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.cpp b/tests/golden_output/aidl-test-fixedsizearray-cpp-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.cpp
index f402394..db3d59b 100644
--- a/tests/golden_output/aidl-test-fixedsizearray-cpp-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.cpp
+++ b/tests/golden_output/aidl-test-fixedsizearray-cpp-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.cpp
@@ -718,6 +718,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::RepeatBytes::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -759,6 +760,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::RepeatInts::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -800,6 +802,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::RepeatBinders::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -841,6 +844,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::RepeatParcelables::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -882,6 +886,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::Repeat2dBytes::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -923,6 +928,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::Repeat2dInts::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -964,6 +970,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::Repeat2dBinders::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1005,6 +1012,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::Repeat2dParcelables::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1068,6 +1076,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::RepeatBytes::cppServer");
     _aidl_ret_status = _aidl_data.readFixedArray(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -1103,6 +1112,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::RepeatInts::cppServer");
     _aidl_ret_status = _aidl_data.readFixedArray(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -1138,6 +1148,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::RepeatBinders::cppServer");
     _aidl_ret_status = _aidl_data.readFixedArray(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -1173,6 +1184,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::RepeatParcelables::cppServer");
     _aidl_ret_status = _aidl_data.readFixedArray(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -1208,6 +1220,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::Repeat2dBytes::cppServer");
     _aidl_ret_status = _aidl_data.readFixedArray(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -1243,6 +1256,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::Repeat2dInts::cppServer");
     _aidl_ret_status = _aidl_data.readFixedArray(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -1278,6 +1292,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::Repeat2dBinders::cppServer");
     _aidl_ret_status = _aidl_data.readFixedArray(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -1313,6 +1328,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IRepeatFixedSizeArray::Repeat2dParcelables::cppServer");
     _aidl_ret_status = _aidl_data.readFixedArray(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
diff --git a/tests/golden_output/aidl-test-fixedsizearray-cpp-source/gen/include/android/aidl/fixedsizearray/FixedSizeArrayExample.h b/tests/golden_output/aidl-test-fixedsizearray-cpp-source/gen/include/android/aidl/fixedsizearray/FixedSizeArrayExample.h
index c3f622c..75aefcc 100644
--- a/tests/golden_output/aidl-test-fixedsizearray-cpp-source/gen/include/android/aidl/fixedsizearray/FixedSizeArrayExample.h
+++ b/tests/golden_output/aidl-test-fixedsizearray-cpp-source/gen/include/android/aidl/fixedsizearray/FixedSizeArrayExample.h
@@ -3,12 +3,14 @@
 #include <android/aidl/fixedsizearray/FixedSizeArrayExample.h>
 #include <android/binder_to_string.h>
 #include <array>
+#include <binder/Delegate.h>
 #include <binder/Enums.h>
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Parcel.h>
 #include <binder/ParcelFileDescriptor.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
 #include <cstdint>
 #include <optional>
 #include <string>
@@ -46,8 +48,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -134,6 +136,7 @@
   public:
     explicit IRepeatFixedSizeArrayDelegator(const ::android::sp<IRepeatFixedSizeArray> &impl) : _aidl_delegate(impl) {}
 
+    ::android::sp<IRepeatFixedSizeArray> getImpl() { return _aidl_delegate; }
     ::android::binder::Status RepeatBytes(const std::array<uint8_t, 3>& input, std::array<uint8_t, 3>* repeated, std::array<uint8_t, 3>* _aidl_return) override {
       return _aidl_delegate->RepeatBytes(input, repeated, _aidl_return);
     }
@@ -199,6 +202,7 @@
   public:
     explicit IEmptyInterfaceDelegator(const ::android::sp<IEmptyInterface> &impl) : _aidl_delegate(impl) {}
 
+    ::android::sp<IEmptyInterface> getImpl() { return _aidl_delegate; }
   private:
     ::android::sp<IEmptyInterface> _aidl_delegate;
   };  // class IEmptyInterfaceDelegator
@@ -279,8 +283,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.fixedsizearray.FixedSizeArrayExample");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.fixedsizearray.FixedSizeArrayExample");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-fixedsizearray-java-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.java b/tests/golden_output/aidl-test-fixedsizearray-java-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.java
index a20ae24..a04eb16 100644
--- a/tests/golden_output/aidl-test-fixedsizearray-java-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.java
+++ b/tests/golden_output/aidl-test-fixedsizearray-java-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.java
@@ -565,7 +565,7 @@
         }
         @Override public byte[] RepeatBytes(byte[] input, byte[] repeated) throws android.os.RemoteException
         {
-          android.os.Parcel _data = android.os.Parcel.obtain();
+          android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
           android.os.Parcel _reply = android.os.Parcel.obtain();
           byte[] _result;
           try {
@@ -584,7 +584,7 @@
         }
         @Override public int[] RepeatInts(int[] input, int[] repeated) throws android.os.RemoteException
         {
-          android.os.Parcel _data = android.os.Parcel.obtain();
+          android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
           android.os.Parcel _reply = android.os.Parcel.obtain();
           int[] _result;
           try {
@@ -603,7 +603,7 @@
         }
         @Override public android.os.IBinder[] RepeatBinders(android.os.IBinder[] input, android.os.IBinder[] repeated) throws android.os.RemoteException
         {
-          android.os.Parcel _data = android.os.Parcel.obtain();
+          android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
           android.os.Parcel _reply = android.os.Parcel.obtain();
           android.os.IBinder[] _result;
           try {
@@ -622,7 +622,7 @@
         }
         @Override public android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable[] RepeatParcelables(android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable[] input, android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable[] repeated) throws android.os.RemoteException
         {
-          android.os.Parcel _data = android.os.Parcel.obtain();
+          android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
           android.os.Parcel _reply = android.os.Parcel.obtain();
           android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable[] _result;
           try {
@@ -641,7 +641,7 @@
         }
         @Override public byte[][] Repeat2dBytes(byte[][] input, byte[][] repeated) throws android.os.RemoteException
         {
-          android.os.Parcel _data = android.os.Parcel.obtain();
+          android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
           android.os.Parcel _reply = android.os.Parcel.obtain();
           byte[][] _result;
           try {
@@ -660,7 +660,7 @@
         }
         @Override public int[][] Repeat2dInts(int[][] input, int[][] repeated) throws android.os.RemoteException
         {
-          android.os.Parcel _data = android.os.Parcel.obtain();
+          android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
           android.os.Parcel _reply = android.os.Parcel.obtain();
           int[][] _result;
           try {
@@ -679,7 +679,7 @@
         }
         @Override public android.os.IBinder[][] Repeat2dBinders(android.os.IBinder[][] input, android.os.IBinder[][] repeated) throws android.os.RemoteException
         {
-          android.os.Parcel _data = android.os.Parcel.obtain();
+          android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
           android.os.Parcel _reply = android.os.Parcel.obtain();
           android.os.IBinder[][] _result;
           try {
@@ -698,7 +698,7 @@
         }
         @Override public android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable[][] Repeat2dParcelables(android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable[][] input, android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable[][] repeated) throws android.os.RemoteException
         {
-          android.os.Parcel _data = android.os.Parcel.obtain();
+          android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
           android.os.Parcel _reply = android.os.Parcel.obtain();
           android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable[][] _result;
           try {
diff --git a/tests/golden_output/aidl-test-fixedsizearray-rust-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.rs b/tests/golden_output/aidl-test-fixedsizearray-rust-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.rs
index 88f2387..30fe659 100644
--- a/tests/golden_output/aidl-test-fixedsizearray-rust-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.rs
+++ b/tests/golden_output/aidl-test-fixedsizearray-rust-source/gen/android/aidl/fixedsizearray/FixedSizeArrayExample.rs
@@ -1,362 +1,362 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug, PartialEq)]
-pub struct FixedSizeArrayExample {
-  pub int2x3: [[i32; 3]; 2],
-  pub boolArray: [bool; 2],
-  pub byteArray: [u8; 2],
-  pub charArray: [u16; 2],
-  pub intArray: [i32; 2],
-  pub longArray: [i64; 2],
-  pub floatArray: [f32; 2],
-  pub doubleArray: [f64; 2],
-  pub stringArray: [String; 2],
-  pub byteEnumArray: [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_ByteEnum; 2],
-  pub intEnumArray: [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_7_IntEnum; 2],
-  pub longEnumArray: [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_LongEnum; 2],
-  pub parcelableArray: [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 2],
-  pub boolMatrix: [[bool; 2]; 2],
-  pub byteMatrix: [[u8; 2]; 2],
-  pub charMatrix: [[u16; 2]; 2],
-  pub intMatrix: [[i32; 2]; 2],
-  pub longMatrix: [[i64; 2]; 2],
-  pub floatMatrix: [[f32; 2]; 2],
-  pub doubleMatrix: [[f64; 2]; 2],
-  pub stringMatrix: [[String; 2]; 2],
-  pub byteEnumMatrix: [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_ByteEnum; 2]; 2],
-  pub intEnumMatrix: [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_7_IntEnum; 2]; 2],
-  pub longEnumMatrix: [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_LongEnum; 2]; 2],
-  pub parcelableMatrix: [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 2]; 2],
-  pub boolNullableArray: Option<[bool; 2]>,
-  pub byteNullableArray: Option<[u8; 2]>,
-  pub charNullableArray: Option<[u16; 2]>,
-  pub intNullableArray: Option<[i32; 2]>,
-  pub longNullableArray: Option<[i64; 2]>,
-  pub floatNullableArray: Option<[f32; 2]>,
-  pub doubleNullableArray: Option<[f64; 2]>,
-  pub stringNullableArray: Option<[Option<String>; 2]>,
-  pub byteEnumNullableArray: Option<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_ByteEnum; 2]>,
-  pub intEnumNullableArray: Option<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_7_IntEnum; 2]>,
-  pub longEnumNullableArray: Option<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_LongEnum; 2]>,
-  pub binderNullableArray: Option<[Option<binder::SpIBinder>; 2]>,
-  pub pfdNullableArray: Option<[Option<binder::ParcelFileDescriptor>; 2]>,
-  pub parcelableNullableArray: Option<[Option<crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable>; 2]>,
-  pub interfaceNullableArray: Option<[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_15_IEmptyInterface>>; 2]>,
-  pub boolNullableMatrix: Option<[[bool; 2]; 2]>,
-  pub byteNullableMatrix: Option<[[u8; 2]; 2]>,
-  pub charNullableMatrix: Option<[[u16; 2]; 2]>,
-  pub intNullableMatrix: Option<[[i32; 2]; 2]>,
-  pub longNullableMatrix: Option<[[i64; 2]; 2]>,
-  pub floatNullableMatrix: Option<[[f32; 2]; 2]>,
-  pub doubleNullableMatrix: Option<[[f64; 2]; 2]>,
-  pub stringNullableMatrix: Option<[[Option<String>; 2]; 2]>,
-  pub byteEnumNullableMatrix: Option<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_ByteEnum; 2]; 2]>,
-  pub intEnumNullableMatrix: Option<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_7_IntEnum; 2]; 2]>,
-  pub longEnumNullableMatrix: Option<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_LongEnum; 2]; 2]>,
-  pub binderNullableMatrix: Option<[[Option<binder::SpIBinder>; 2]; 2]>,
-  pub pfdNullableMatrix: Option<[[Option<binder::ParcelFileDescriptor>; 2]; 2]>,
-  pub parcelableNullableMatrix: Option<[[Option<crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable>; 2]; 2]>,
-  pub interfaceNullableMatrix: Option<[[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_15_IEmptyInterface>>; 2]; 2]>,
+pub struct r#FixedSizeArrayExample {
+  pub r#int2x3: [[i32; 3]; 2],
+  pub r#boolArray: [bool; 2],
+  pub r#byteArray: [u8; 2],
+  pub r#charArray: [u16; 2],
+  pub r#intArray: [i32; 2],
+  pub r#longArray: [i64; 2],
+  pub r#floatArray: [f32; 2],
+  pub r#doubleArray: [f64; 2],
+  pub r#stringArray: [String; 2],
+  pub r#byteEnumArray: [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_ByteEnum; 2],
+  pub r#intEnumArray: [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_7_IntEnum; 2],
+  pub r#longEnumArray: [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_LongEnum; 2],
+  pub r#parcelableArray: [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 2],
+  pub r#boolMatrix: [[bool; 2]; 2],
+  pub r#byteMatrix: [[u8; 2]; 2],
+  pub r#charMatrix: [[u16; 2]; 2],
+  pub r#intMatrix: [[i32; 2]; 2],
+  pub r#longMatrix: [[i64; 2]; 2],
+  pub r#floatMatrix: [[f32; 2]; 2],
+  pub r#doubleMatrix: [[f64; 2]; 2],
+  pub r#stringMatrix: [[String; 2]; 2],
+  pub r#byteEnumMatrix: [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_ByteEnum; 2]; 2],
+  pub r#intEnumMatrix: [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_7_IntEnum; 2]; 2],
+  pub r#longEnumMatrix: [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_LongEnum; 2]; 2],
+  pub r#parcelableMatrix: [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 2]; 2],
+  pub r#boolNullableArray: Option<[bool; 2]>,
+  pub r#byteNullableArray: Option<[u8; 2]>,
+  pub r#charNullableArray: Option<[u16; 2]>,
+  pub r#intNullableArray: Option<[i32; 2]>,
+  pub r#longNullableArray: Option<[i64; 2]>,
+  pub r#floatNullableArray: Option<[f32; 2]>,
+  pub r#doubleNullableArray: Option<[f64; 2]>,
+  pub r#stringNullableArray: Option<[Option<String>; 2]>,
+  pub r#byteEnumNullableArray: Option<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_ByteEnum; 2]>,
+  pub r#intEnumNullableArray: Option<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_7_IntEnum; 2]>,
+  pub r#longEnumNullableArray: Option<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_LongEnum; 2]>,
+  pub r#binderNullableArray: Option<[Option<binder::SpIBinder>; 2]>,
+  pub r#pfdNullableArray: Option<[Option<binder::ParcelFileDescriptor>; 2]>,
+  pub r#parcelableNullableArray: Option<[Option<crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable>; 2]>,
+  pub r#interfaceNullableArray: Option<[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_15_IEmptyInterface>>; 2]>,
+  pub r#boolNullableMatrix: Option<[[bool; 2]; 2]>,
+  pub r#byteNullableMatrix: Option<[[u8; 2]; 2]>,
+  pub r#charNullableMatrix: Option<[[u16; 2]; 2]>,
+  pub r#intNullableMatrix: Option<[[i32; 2]; 2]>,
+  pub r#longNullableMatrix: Option<[[i64; 2]; 2]>,
+  pub r#floatNullableMatrix: Option<[[f32; 2]; 2]>,
+  pub r#doubleNullableMatrix: Option<[[f64; 2]; 2]>,
+  pub r#stringNullableMatrix: Option<[[Option<String>; 2]; 2]>,
+  pub r#byteEnumNullableMatrix: Option<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_ByteEnum; 2]; 2]>,
+  pub r#intEnumNullableMatrix: Option<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_7_IntEnum; 2]; 2]>,
+  pub r#longEnumNullableMatrix: Option<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_LongEnum; 2]; 2]>,
+  pub r#binderNullableMatrix: Option<[[Option<binder::SpIBinder>; 2]; 2]>,
+  pub r#pfdNullableMatrix: Option<[[Option<binder::ParcelFileDescriptor>; 2]; 2]>,
+  pub r#parcelableNullableMatrix: Option<[[Option<crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable>; 2]; 2]>,
+  pub r#interfaceNullableMatrix: Option<[[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_15_IEmptyInterface>>; 2]; 2]>,
 }
-impl Default for FixedSizeArrayExample {
+impl Default for r#FixedSizeArrayExample {
   fn default() -> Self {
     Self {
-      int2x3: [[1, 2, 3], [4, 5, 6]],
-      boolArray: [Default::default(), Default::default()],
-      byteArray: [Default::default(), Default::default()],
-      charArray: [Default::default(), Default::default()],
-      intArray: [Default::default(), Default::default()],
-      longArray: [Default::default(), Default::default()],
-      floatArray: [Default::default(), Default::default()],
-      doubleArray: [Default::default(), Default::default()],
-      stringArray: ["hello".into(), "world".into()],
-      byteEnumArray: [Default::default(), Default::default()],
-      intEnumArray: [Default::default(), Default::default()],
-      longEnumArray: [Default::default(), Default::default()],
-      parcelableArray: [Default::default(), Default::default()],
-      boolMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      byteMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      charMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      intMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      longMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      floatMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      doubleMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      stringMatrix: [["hello".into(), "world".into()], ["Ciao".into(), "mondo".into()]],
-      byteEnumMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      intEnumMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      longEnumMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      parcelableMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
-      boolNullableArray: Default::default(),
-      byteNullableArray: Default::default(),
-      charNullableArray: Default::default(),
-      intNullableArray: Default::default(),
-      longNullableArray: Default::default(),
-      floatNullableArray: Default::default(),
-      doubleNullableArray: Default::default(),
-      stringNullableArray: Some([Some("hello".into()), Some("world".into())]),
-      byteEnumNullableArray: Default::default(),
-      intEnumNullableArray: Default::default(),
-      longEnumNullableArray: Default::default(),
-      binderNullableArray: Default::default(),
-      pfdNullableArray: Default::default(),
-      parcelableNullableArray: Default::default(),
-      interfaceNullableArray: Default::default(),
-      boolNullableMatrix: Default::default(),
-      byteNullableMatrix: Default::default(),
-      charNullableMatrix: Default::default(),
-      intNullableMatrix: Default::default(),
-      longNullableMatrix: Default::default(),
-      floatNullableMatrix: Default::default(),
-      doubleNullableMatrix: Default::default(),
-      stringNullableMatrix: Some([[Some("hello".into()), Some("world".into())], [Some("Ciao".into()), Some("mondo".into())]]),
-      byteEnumNullableMatrix: Default::default(),
-      intEnumNullableMatrix: Default::default(),
-      longEnumNullableMatrix: Default::default(),
-      binderNullableMatrix: Default::default(),
-      pfdNullableMatrix: Default::default(),
-      parcelableNullableMatrix: Default::default(),
-      interfaceNullableMatrix: Default::default(),
+      r#int2x3: [[1, 2, 3], [4, 5, 6]],
+      r#boolArray: [Default::default(), Default::default()],
+      r#byteArray: [Default::default(), Default::default()],
+      r#charArray: [Default::default(), Default::default()],
+      r#intArray: [Default::default(), Default::default()],
+      r#longArray: [Default::default(), Default::default()],
+      r#floatArray: [Default::default(), Default::default()],
+      r#doubleArray: [Default::default(), Default::default()],
+      r#stringArray: ["hello".into(), "world".into()],
+      r#byteEnumArray: [Default::default(), Default::default()],
+      r#intEnumArray: [Default::default(), Default::default()],
+      r#longEnumArray: [Default::default(), Default::default()],
+      r#parcelableArray: [Default::default(), Default::default()],
+      r#boolMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#byteMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#charMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#intMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#longMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#floatMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#doubleMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#stringMatrix: [["hello".into(), "world".into()], ["Ciao".into(), "mondo".into()]],
+      r#byteEnumMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#intEnumMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#longEnumMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#parcelableMatrix: [[Default::default(), Default::default()], [Default::default(), Default::default()]],
+      r#boolNullableArray: Default::default(),
+      r#byteNullableArray: Default::default(),
+      r#charNullableArray: Default::default(),
+      r#intNullableArray: Default::default(),
+      r#longNullableArray: Default::default(),
+      r#floatNullableArray: Default::default(),
+      r#doubleNullableArray: Default::default(),
+      r#stringNullableArray: Some([Some("hello".into()), Some("world".into())]),
+      r#byteEnumNullableArray: Default::default(),
+      r#intEnumNullableArray: Default::default(),
+      r#longEnumNullableArray: Default::default(),
+      r#binderNullableArray: Default::default(),
+      r#pfdNullableArray: Default::default(),
+      r#parcelableNullableArray: Default::default(),
+      r#interfaceNullableArray: Default::default(),
+      r#boolNullableMatrix: Default::default(),
+      r#byteNullableMatrix: Default::default(),
+      r#charNullableMatrix: Default::default(),
+      r#intNullableMatrix: Default::default(),
+      r#longNullableMatrix: Default::default(),
+      r#floatNullableMatrix: Default::default(),
+      r#doubleNullableMatrix: Default::default(),
+      r#stringNullableMatrix: Some([[Some("hello".into()), Some("world".into())], [Some("Ciao".into()), Some("mondo".into())]]),
+      r#byteEnumNullableMatrix: Default::default(),
+      r#intEnumNullableMatrix: Default::default(),
+      r#longEnumNullableMatrix: Default::default(),
+      r#binderNullableMatrix: Default::default(),
+      r#pfdNullableMatrix: Default::default(),
+      r#parcelableNullableMatrix: Default::default(),
+      r#interfaceNullableMatrix: Default::default(),
     }
   }
 }
-impl binder::Parcelable for FixedSizeArrayExample {
+impl binder::Parcelable for r#FixedSizeArrayExample {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.int2x3)?;
-      subparcel.write(&self.boolArray)?;
-      subparcel.write(&self.byteArray)?;
-      subparcel.write(&self.charArray)?;
-      subparcel.write(&self.intArray)?;
-      subparcel.write(&self.longArray)?;
-      subparcel.write(&self.floatArray)?;
-      subparcel.write(&self.doubleArray)?;
-      subparcel.write(&self.stringArray)?;
-      subparcel.write(&self.byteEnumArray)?;
-      subparcel.write(&self.intEnumArray)?;
-      subparcel.write(&self.longEnumArray)?;
-      subparcel.write(&self.parcelableArray)?;
-      subparcel.write(&self.boolMatrix)?;
-      subparcel.write(&self.byteMatrix)?;
-      subparcel.write(&self.charMatrix)?;
-      subparcel.write(&self.intMatrix)?;
-      subparcel.write(&self.longMatrix)?;
-      subparcel.write(&self.floatMatrix)?;
-      subparcel.write(&self.doubleMatrix)?;
-      subparcel.write(&self.stringMatrix)?;
-      subparcel.write(&self.byteEnumMatrix)?;
-      subparcel.write(&self.intEnumMatrix)?;
-      subparcel.write(&self.longEnumMatrix)?;
-      subparcel.write(&self.parcelableMatrix)?;
-      subparcel.write(&self.boolNullableArray)?;
-      subparcel.write(&self.byteNullableArray)?;
-      subparcel.write(&self.charNullableArray)?;
-      subparcel.write(&self.intNullableArray)?;
-      subparcel.write(&self.longNullableArray)?;
-      subparcel.write(&self.floatNullableArray)?;
-      subparcel.write(&self.doubleNullableArray)?;
-      subparcel.write(&self.stringNullableArray)?;
-      subparcel.write(&self.byteEnumNullableArray)?;
-      subparcel.write(&self.intEnumNullableArray)?;
-      subparcel.write(&self.longEnumNullableArray)?;
-      subparcel.write(&self.binderNullableArray)?;
-      subparcel.write(&self.pfdNullableArray)?;
-      subparcel.write(&self.parcelableNullableArray)?;
-      subparcel.write(&self.interfaceNullableArray)?;
-      subparcel.write(&self.boolNullableMatrix)?;
-      subparcel.write(&self.byteNullableMatrix)?;
-      subparcel.write(&self.charNullableMatrix)?;
-      subparcel.write(&self.intNullableMatrix)?;
-      subparcel.write(&self.longNullableMatrix)?;
-      subparcel.write(&self.floatNullableMatrix)?;
-      subparcel.write(&self.doubleNullableMatrix)?;
-      subparcel.write(&self.stringNullableMatrix)?;
-      subparcel.write(&self.byteEnumNullableMatrix)?;
-      subparcel.write(&self.intEnumNullableMatrix)?;
-      subparcel.write(&self.longEnumNullableMatrix)?;
-      subparcel.write(&self.binderNullableMatrix)?;
-      subparcel.write(&self.pfdNullableMatrix)?;
-      subparcel.write(&self.parcelableNullableMatrix)?;
-      subparcel.write(&self.interfaceNullableMatrix)?;
+      subparcel.write(&self.r#int2x3)?;
+      subparcel.write(&self.r#boolArray)?;
+      subparcel.write(&self.r#byteArray)?;
+      subparcel.write(&self.r#charArray)?;
+      subparcel.write(&self.r#intArray)?;
+      subparcel.write(&self.r#longArray)?;
+      subparcel.write(&self.r#floatArray)?;
+      subparcel.write(&self.r#doubleArray)?;
+      subparcel.write(&self.r#stringArray)?;
+      subparcel.write(&self.r#byteEnumArray)?;
+      subparcel.write(&self.r#intEnumArray)?;
+      subparcel.write(&self.r#longEnumArray)?;
+      subparcel.write(&self.r#parcelableArray)?;
+      subparcel.write(&self.r#boolMatrix)?;
+      subparcel.write(&self.r#byteMatrix)?;
+      subparcel.write(&self.r#charMatrix)?;
+      subparcel.write(&self.r#intMatrix)?;
+      subparcel.write(&self.r#longMatrix)?;
+      subparcel.write(&self.r#floatMatrix)?;
+      subparcel.write(&self.r#doubleMatrix)?;
+      subparcel.write(&self.r#stringMatrix)?;
+      subparcel.write(&self.r#byteEnumMatrix)?;
+      subparcel.write(&self.r#intEnumMatrix)?;
+      subparcel.write(&self.r#longEnumMatrix)?;
+      subparcel.write(&self.r#parcelableMatrix)?;
+      subparcel.write(&self.r#boolNullableArray)?;
+      subparcel.write(&self.r#byteNullableArray)?;
+      subparcel.write(&self.r#charNullableArray)?;
+      subparcel.write(&self.r#intNullableArray)?;
+      subparcel.write(&self.r#longNullableArray)?;
+      subparcel.write(&self.r#floatNullableArray)?;
+      subparcel.write(&self.r#doubleNullableArray)?;
+      subparcel.write(&self.r#stringNullableArray)?;
+      subparcel.write(&self.r#byteEnumNullableArray)?;
+      subparcel.write(&self.r#intEnumNullableArray)?;
+      subparcel.write(&self.r#longEnumNullableArray)?;
+      subparcel.write(&self.r#binderNullableArray)?;
+      subparcel.write(&self.r#pfdNullableArray)?;
+      subparcel.write(&self.r#parcelableNullableArray)?;
+      subparcel.write(&self.r#interfaceNullableArray)?;
+      subparcel.write(&self.r#boolNullableMatrix)?;
+      subparcel.write(&self.r#byteNullableMatrix)?;
+      subparcel.write(&self.r#charNullableMatrix)?;
+      subparcel.write(&self.r#intNullableMatrix)?;
+      subparcel.write(&self.r#longNullableMatrix)?;
+      subparcel.write(&self.r#floatNullableMatrix)?;
+      subparcel.write(&self.r#doubleNullableMatrix)?;
+      subparcel.write(&self.r#stringNullableMatrix)?;
+      subparcel.write(&self.r#byteEnumNullableMatrix)?;
+      subparcel.write(&self.r#intEnumNullableMatrix)?;
+      subparcel.write(&self.r#longEnumNullableMatrix)?;
+      subparcel.write(&self.r#binderNullableMatrix)?;
+      subparcel.write(&self.r#pfdNullableMatrix)?;
+      subparcel.write(&self.r#parcelableNullableMatrix)?;
+      subparcel.write(&self.r#interfaceNullableMatrix)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.int2x3 = subparcel.read()?;
+        self.r#int2x3 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.boolArray = subparcel.read()?;
+        self.r#boolArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteArray = subparcel.read()?;
+        self.r#byteArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.charArray = subparcel.read()?;
+        self.r#charArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intArray = subparcel.read()?;
+        self.r#intArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longArray = subparcel.read()?;
+        self.r#longArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.floatArray = subparcel.read()?;
+        self.r#floatArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.doubleArray = subparcel.read()?;
+        self.r#doubleArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.stringArray = subparcel.read()?;
+        self.r#stringArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteEnumArray = subparcel.read()?;
+        self.r#byteEnumArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intEnumArray = subparcel.read()?;
+        self.r#intEnumArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longEnumArray = subparcel.read()?;
+        self.r#longEnumArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.parcelableArray = subparcel.read()?;
+        self.r#parcelableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.boolMatrix = subparcel.read()?;
+        self.r#boolMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteMatrix = subparcel.read()?;
+        self.r#byteMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.charMatrix = subparcel.read()?;
+        self.r#charMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intMatrix = subparcel.read()?;
+        self.r#intMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longMatrix = subparcel.read()?;
+        self.r#longMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.floatMatrix = subparcel.read()?;
+        self.r#floatMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.doubleMatrix = subparcel.read()?;
+        self.r#doubleMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.stringMatrix = subparcel.read()?;
+        self.r#stringMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteEnumMatrix = subparcel.read()?;
+        self.r#byteEnumMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intEnumMatrix = subparcel.read()?;
+        self.r#intEnumMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longEnumMatrix = subparcel.read()?;
+        self.r#longEnumMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.parcelableMatrix = subparcel.read()?;
+        self.r#parcelableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.boolNullableArray = subparcel.read()?;
+        self.r#boolNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteNullableArray = subparcel.read()?;
+        self.r#byteNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.charNullableArray = subparcel.read()?;
+        self.r#charNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intNullableArray = subparcel.read()?;
+        self.r#intNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longNullableArray = subparcel.read()?;
+        self.r#longNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.floatNullableArray = subparcel.read()?;
+        self.r#floatNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.doubleNullableArray = subparcel.read()?;
+        self.r#doubleNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.stringNullableArray = subparcel.read()?;
+        self.r#stringNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteEnumNullableArray = subparcel.read()?;
+        self.r#byteEnumNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intEnumNullableArray = subparcel.read()?;
+        self.r#intEnumNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longEnumNullableArray = subparcel.read()?;
+        self.r#longEnumNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.binderNullableArray = subparcel.read()?;
+        self.r#binderNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.pfdNullableArray = subparcel.read()?;
+        self.r#pfdNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.parcelableNullableArray = subparcel.read()?;
+        self.r#parcelableNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.interfaceNullableArray = subparcel.read()?;
+        self.r#interfaceNullableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.boolNullableMatrix = subparcel.read()?;
+        self.r#boolNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteNullableMatrix = subparcel.read()?;
+        self.r#byteNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.charNullableMatrix = subparcel.read()?;
+        self.r#charNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intNullableMatrix = subparcel.read()?;
+        self.r#intNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longNullableMatrix = subparcel.read()?;
+        self.r#longNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.floatNullableMatrix = subparcel.read()?;
+        self.r#floatNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.doubleNullableMatrix = subparcel.read()?;
+        self.r#doubleNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.stringNullableMatrix = subparcel.read()?;
+        self.r#stringNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteEnumNullableMatrix = subparcel.read()?;
+        self.r#byteEnumNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intEnumNullableMatrix = subparcel.read()?;
+        self.r#intEnumNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longEnumNullableMatrix = subparcel.read()?;
+        self.r#longEnumNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.binderNullableMatrix = subparcel.read()?;
+        self.r#binderNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.pfdNullableMatrix = subparcel.read()?;
+        self.r#pfdNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.parcelableNullableMatrix = subparcel.read()?;
+        self.r#parcelableNullableMatrix = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.interfaceNullableMatrix = subparcel.read()?;
+        self.r#interfaceNullableMatrix = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(FixedSizeArrayExample);
-binder::impl_deserialize_for_parcelable!(FixedSizeArrayExample);
-impl binder::binder_impl::ParcelableMetadata for FixedSizeArrayExample {
+binder::impl_serialize_for_parcelable!(r#FixedSizeArrayExample);
+binder::impl_deserialize_for_parcelable!(r#FixedSizeArrayExample);
+impl binder::binder_impl::ParcelableMetadata for r#FixedSizeArrayExample {
   fn get_descriptor() -> &'static str { "android.aidl.fixedsizearray.FixedSizeArrayExample" }
 }
-pub mod IRepeatFixedSizeArray {
+pub mod r#IRepeatFixedSizeArray {
   #![allow(non_upper_case_globals)]
   #![allow(non_snake_case)]
   #[allow(unused_imports)] use binder::binder_impl::IBinderInternal;
@@ -371,14 +371,14 @@
   }
   pub trait IRepeatFixedSizeArray: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.fixedsizearray.FixedSizeArrayExample.IRepeatFixedSizeArray" }
-    fn RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]>;
-    fn RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]>;
-    fn RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]>;
-    fn RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]>;
-    fn Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]>;
-    fn Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]>;
-    fn Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]>;
-    fn Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]>;
+    fn r#RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]>;
+    fn r#RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]>;
+    fn r#RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]>;
+    fn r#RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]>;
+    fn r#Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]>;
+    fn r#Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]>;
+    fn r#Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]>;
+    fn r#Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]>;
     fn getDefaultImpl() -> IRepeatFixedSizeArrayDefaultRef where Self: Sized {
       DEFAULT_IMPL.lock().unwrap().clone()
     }
@@ -388,26 +388,26 @@
   }
   pub trait IRepeatFixedSizeArrayAsync<P>: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.fixedsizearray.FixedSizeArrayExample.IRepeatFixedSizeArray" }
-    fn RepeatBytes<'a>(&'a self, _arg_input: &'a [u8; 3], _arg_repeated: &'a mut [u8; 3]) -> binder::BoxFuture<'a, binder::Result<[u8; 3]>>;
-    fn RepeatInts<'a>(&'a self, _arg_input: &'a [i32; 3], _arg_repeated: &'a mut [i32; 3]) -> binder::BoxFuture<'a, binder::Result<[i32; 3]>>;
-    fn RepeatBinders<'a>(&'a self, _arg_input: &'a [binder::SpIBinder; 3], _arg_repeated: &'a mut [Option<binder::SpIBinder>; 3]) -> binder::BoxFuture<'a, binder::Result<[binder::SpIBinder; 3]>>;
-    fn RepeatParcelables<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &'a mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::BoxFuture<'a, binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]>>;
-    fn Repeat2dBytes<'a>(&'a self, _arg_input: &'a [[u8; 3]; 2], _arg_repeated: &'a mut [[u8; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[u8; 3]; 2]>>;
-    fn Repeat2dInts<'a>(&'a self, _arg_input: &'a [[i32; 3]; 2], _arg_repeated: &'a mut [[i32; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[i32; 3]; 2]>>;
-    fn Repeat2dBinders<'a>(&'a self, _arg_input: &'a [[binder::SpIBinder; 3]; 2], _arg_repeated: &'a mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[binder::SpIBinder; 3]; 2]>>;
-    fn Repeat2dParcelables<'a>(&'a self, _arg_input: &'a [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &'a mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]>>;
+    fn r#RepeatBytes<'a>(&'a self, _arg_input: &'a [u8; 3], _arg_repeated: &'a mut [u8; 3]) -> binder::BoxFuture<'a, binder::Result<[u8; 3]>>;
+    fn r#RepeatInts<'a>(&'a self, _arg_input: &'a [i32; 3], _arg_repeated: &'a mut [i32; 3]) -> binder::BoxFuture<'a, binder::Result<[i32; 3]>>;
+    fn r#RepeatBinders<'a>(&'a self, _arg_input: &'a [binder::SpIBinder; 3], _arg_repeated: &'a mut [Option<binder::SpIBinder>; 3]) -> binder::BoxFuture<'a, binder::Result<[binder::SpIBinder; 3]>>;
+    fn r#RepeatParcelables<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &'a mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::BoxFuture<'a, binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]>>;
+    fn r#Repeat2dBytes<'a>(&'a self, _arg_input: &'a [[u8; 3]; 2], _arg_repeated: &'a mut [[u8; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[u8; 3]; 2]>>;
+    fn r#Repeat2dInts<'a>(&'a self, _arg_input: &'a [[i32; 3]; 2], _arg_repeated: &'a mut [[i32; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[i32; 3]; 2]>>;
+    fn r#Repeat2dBinders<'a>(&'a self, _arg_input: &'a [[binder::SpIBinder; 3]; 2], _arg_repeated: &'a mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[binder::SpIBinder; 3]; 2]>>;
+    fn r#Repeat2dParcelables<'a>(&'a self, _arg_input: &'a [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &'a mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]>>;
   }
   #[::async_trait::async_trait]
   pub trait IRepeatFixedSizeArrayAsyncServer: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.fixedsizearray.FixedSizeArrayExample.IRepeatFixedSizeArray" }
-    async fn RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]>;
-    async fn RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]>;
-    async fn RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]>;
-    async fn RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]>;
-    async fn Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]>;
-    async fn Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]>;
-    async fn Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]>;
-    async fn Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]>;
+    async fn r#RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]>;
+    async fn r#RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]>;
+    async fn r#RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]>;
+    async fn r#RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]>;
+    async fn r#Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]>;
+    async fn r#Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]>;
+    async fn r#Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]>;
+    async fn r#Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]>;
   }
   impl BnRepeatFixedSizeArray {
     /// Create a new async binder service.
@@ -429,29 +429,29 @@
         T: IRepeatFixedSizeArrayAsyncServer + Send + Sync + 'static,
         R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
       {
-        fn RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]> {
-          self._rt.block_on(self._inner.RepeatBytes(_arg_input, _arg_repeated))
+        fn r#RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]> {
+          self._rt.block_on(self._inner.r#RepeatBytes(_arg_input, _arg_repeated))
         }
-        fn RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]> {
-          self._rt.block_on(self._inner.RepeatInts(_arg_input, _arg_repeated))
+        fn r#RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]> {
+          self._rt.block_on(self._inner.r#RepeatInts(_arg_input, _arg_repeated))
         }
-        fn RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]> {
-          self._rt.block_on(self._inner.RepeatBinders(_arg_input, _arg_repeated))
+        fn r#RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]> {
+          self._rt.block_on(self._inner.r#RepeatBinders(_arg_input, _arg_repeated))
         }
-        fn RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]> {
-          self._rt.block_on(self._inner.RepeatParcelables(_arg_input, _arg_repeated))
+        fn r#RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]> {
+          self._rt.block_on(self._inner.r#RepeatParcelables(_arg_input, _arg_repeated))
         }
-        fn Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]> {
-          self._rt.block_on(self._inner.Repeat2dBytes(_arg_input, _arg_repeated))
+        fn r#Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]> {
+          self._rt.block_on(self._inner.r#Repeat2dBytes(_arg_input, _arg_repeated))
         }
-        fn Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]> {
-          self._rt.block_on(self._inner.Repeat2dInts(_arg_input, _arg_repeated))
+        fn r#Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]> {
+          self._rt.block_on(self._inner.r#Repeat2dInts(_arg_input, _arg_repeated))
         }
-        fn Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]> {
-          self._rt.block_on(self._inner.Repeat2dBinders(_arg_input, _arg_repeated))
+        fn r#Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]> {
+          self._rt.block_on(self._inner.r#Repeat2dBinders(_arg_input, _arg_repeated))
         }
-        fn Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]> {
-          self._rt.block_on(self._inner.Repeat2dParcelables(_arg_input, _arg_repeated))
+        fn r#Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]> {
+          self._rt.block_on(self._inner.r#Repeat2dParcelables(_arg_input, _arg_repeated))
         }
       }
       let wrapped = Wrapper { _inner: inner, _rt: rt };
@@ -459,40 +459,40 @@
     }
   }
   pub trait IRepeatFixedSizeArrayDefault: Send + Sync {
-    fn RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]> {
+    fn r#RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
-    fn RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]> {
+    fn r#RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
-    fn RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]> {
+    fn r#RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
-    fn RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]> {
+    fn r#RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
-    fn Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]> {
+    fn r#Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
-    fn Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]> {
+    fn r#Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
-    fn Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]> {
+    fn r#Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
-    fn Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]> {
+    fn r#Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
   }
   pub mod transactions {
-    pub const RepeatBytes: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
-    pub const RepeatInts: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 1;
-    pub const RepeatBinders: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 2;
-    pub const RepeatParcelables: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 3;
-    pub const Repeat2dBytes: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 4;
-    pub const Repeat2dInts: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 5;
-    pub const Repeat2dBinders: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 6;
-    pub const Repeat2dParcelables: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 7;
+    pub const r#RepeatBytes: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+    pub const r#RepeatInts: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 1;
+    pub const r#RepeatBinders: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 2;
+    pub const r#RepeatParcelables: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 3;
+    pub const r#Repeat2dBytes: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 4;
+    pub const r#Repeat2dInts: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 5;
+    pub const r#Repeat2dBinders: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 6;
+    pub const r#Repeat2dParcelables: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 7;
   }
   pub type IRepeatFixedSizeArrayDefaultRef = Option<std::sync::Arc<dyn IRepeatFixedSizeArrayDefault>>;
   use lazy_static::lazy_static;
@@ -508,7 +508,7 @@
     fn read_response_RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<[u8; 3]> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as IRepeatFixedSizeArray>::getDefaultImpl() {
-          return _aidl_default_impl.RepeatBytes(_arg_input, _arg_repeated);
+          return _aidl_default_impl.r#RepeatBytes(_arg_input, _arg_repeated);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -526,7 +526,7 @@
     fn read_response_RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<[i32; 3]> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as IRepeatFixedSizeArray>::getDefaultImpl() {
-          return _aidl_default_impl.RepeatInts(_arg_input, _arg_repeated);
+          return _aidl_default_impl.r#RepeatInts(_arg_input, _arg_repeated);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -544,7 +544,7 @@
     fn read_response_RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<[binder::SpIBinder; 3]> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as IRepeatFixedSizeArray>::getDefaultImpl() {
-          return _aidl_default_impl.RepeatBinders(_arg_input, _arg_repeated);
+          return _aidl_default_impl.r#RepeatBinders(_arg_input, _arg_repeated);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -562,7 +562,7 @@
     fn read_response_RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as IRepeatFixedSizeArray>::getDefaultImpl() {
-          return _aidl_default_impl.RepeatParcelables(_arg_input, _arg_repeated);
+          return _aidl_default_impl.r#RepeatParcelables(_arg_input, _arg_repeated);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -580,7 +580,7 @@
     fn read_response_Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<[[u8; 3]; 2]> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as IRepeatFixedSizeArray>::getDefaultImpl() {
-          return _aidl_default_impl.Repeat2dBytes(_arg_input, _arg_repeated);
+          return _aidl_default_impl.r#Repeat2dBytes(_arg_input, _arg_repeated);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -598,7 +598,7 @@
     fn read_response_Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<[[i32; 3]; 2]> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as IRepeatFixedSizeArray>::getDefaultImpl() {
-          return _aidl_default_impl.Repeat2dInts(_arg_input, _arg_repeated);
+          return _aidl_default_impl.r#Repeat2dInts(_arg_input, _arg_repeated);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -616,7 +616,7 @@
     fn read_response_Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<[[binder::SpIBinder; 3]; 2]> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as IRepeatFixedSizeArray>::getDefaultImpl() {
-          return _aidl_default_impl.Repeat2dBinders(_arg_input, _arg_repeated);
+          return _aidl_default_impl.r#Repeat2dBinders(_arg_input, _arg_repeated);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -634,7 +634,7 @@
     fn read_response_Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as IRepeatFixedSizeArray>::getDefaultImpl() {
-          return _aidl_default_impl.Repeat2dParcelables(_arg_input, _arg_repeated);
+          return _aidl_default_impl.r#Repeat2dParcelables(_arg_input, _arg_repeated);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -646,147 +646,147 @@
     }
   }
   impl IRepeatFixedSizeArray for BpRepeatFixedSizeArray {
-    fn RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]> {
+    fn r#RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]> {
       let _aidl_data = self.build_parcel_RepeatBytes(_arg_input, _arg_repeated)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::RepeatBytes, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatBytes, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_RepeatBytes(_arg_input, _arg_repeated, _aidl_reply)
     }
-    fn RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]> {
+    fn r#RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]> {
       let _aidl_data = self.build_parcel_RepeatInts(_arg_input, _arg_repeated)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::RepeatInts, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatInts, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_RepeatInts(_arg_input, _arg_repeated, _aidl_reply)
     }
-    fn RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]> {
+    fn r#RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]> {
       let _aidl_data = self.build_parcel_RepeatBinders(_arg_input, _arg_repeated)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::RepeatBinders, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatBinders, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_RepeatBinders(_arg_input, _arg_repeated, _aidl_reply)
     }
-    fn RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]> {
+    fn r#RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]> {
       let _aidl_data = self.build_parcel_RepeatParcelables(_arg_input, _arg_repeated)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::RepeatParcelables, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatParcelables, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_RepeatParcelables(_arg_input, _arg_repeated, _aidl_reply)
     }
-    fn Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]> {
+    fn r#Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]> {
       let _aidl_data = self.build_parcel_Repeat2dBytes(_arg_input, _arg_repeated)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::Repeat2dBytes, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#Repeat2dBytes, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_Repeat2dBytes(_arg_input, _arg_repeated, _aidl_reply)
     }
-    fn Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]> {
+    fn r#Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]> {
       let _aidl_data = self.build_parcel_Repeat2dInts(_arg_input, _arg_repeated)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::Repeat2dInts, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#Repeat2dInts, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_Repeat2dInts(_arg_input, _arg_repeated, _aidl_reply)
     }
-    fn Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]> {
+    fn r#Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]> {
       let _aidl_data = self.build_parcel_Repeat2dBinders(_arg_input, _arg_repeated)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::Repeat2dBinders, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#Repeat2dBinders, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_Repeat2dBinders(_arg_input, _arg_repeated, _aidl_reply)
     }
-    fn Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]> {
+    fn r#Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]> {
       let _aidl_data = self.build_parcel_Repeat2dParcelables(_arg_input, _arg_repeated)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::Repeat2dParcelables, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#Repeat2dParcelables, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_Repeat2dParcelables(_arg_input, _arg_repeated, _aidl_reply)
     }
   }
   impl<P: binder::BinderAsyncPool> IRepeatFixedSizeArrayAsync<P> for BpRepeatFixedSizeArray {
-    fn RepeatBytes<'a>(&'a self, _arg_input: &'a [u8; 3], _arg_repeated: &'a mut [u8; 3]) -> binder::BoxFuture<'a, binder::Result<[u8; 3]>> {
+    fn r#RepeatBytes<'a>(&'a self, _arg_input: &'a [u8; 3], _arg_repeated: &'a mut [u8; 3]) -> binder::BoxFuture<'a, binder::Result<[u8; 3]>> {
       let _aidl_data = match self.build_parcel_RepeatBytes(_arg_input, _arg_repeated) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::RepeatBytes, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#RepeatBytes, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_RepeatBytes(_arg_input, _arg_repeated, _aidl_reply)
         }
       )
     }
-    fn RepeatInts<'a>(&'a self, _arg_input: &'a [i32; 3], _arg_repeated: &'a mut [i32; 3]) -> binder::BoxFuture<'a, binder::Result<[i32; 3]>> {
+    fn r#RepeatInts<'a>(&'a self, _arg_input: &'a [i32; 3], _arg_repeated: &'a mut [i32; 3]) -> binder::BoxFuture<'a, binder::Result<[i32; 3]>> {
       let _aidl_data = match self.build_parcel_RepeatInts(_arg_input, _arg_repeated) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::RepeatInts, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#RepeatInts, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_RepeatInts(_arg_input, _arg_repeated, _aidl_reply)
         }
       )
     }
-    fn RepeatBinders<'a>(&'a self, _arg_input: &'a [binder::SpIBinder; 3], _arg_repeated: &'a mut [Option<binder::SpIBinder>; 3]) -> binder::BoxFuture<'a, binder::Result<[binder::SpIBinder; 3]>> {
+    fn r#RepeatBinders<'a>(&'a self, _arg_input: &'a [binder::SpIBinder; 3], _arg_repeated: &'a mut [Option<binder::SpIBinder>; 3]) -> binder::BoxFuture<'a, binder::Result<[binder::SpIBinder; 3]>> {
       let _aidl_data = match self.build_parcel_RepeatBinders(_arg_input, _arg_repeated) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::RepeatBinders, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#RepeatBinders, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_RepeatBinders(_arg_input, _arg_repeated, _aidl_reply)
         }
       )
     }
-    fn RepeatParcelables<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &'a mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::BoxFuture<'a, binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]>> {
+    fn r#RepeatParcelables<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &'a mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::BoxFuture<'a, binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]>> {
       let _aidl_data = match self.build_parcel_RepeatParcelables(_arg_input, _arg_repeated) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::RepeatParcelables, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#RepeatParcelables, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_RepeatParcelables(_arg_input, _arg_repeated, _aidl_reply)
         }
       )
     }
-    fn Repeat2dBytes<'a>(&'a self, _arg_input: &'a [[u8; 3]; 2], _arg_repeated: &'a mut [[u8; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[u8; 3]; 2]>> {
+    fn r#Repeat2dBytes<'a>(&'a self, _arg_input: &'a [[u8; 3]; 2], _arg_repeated: &'a mut [[u8; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[u8; 3]; 2]>> {
       let _aidl_data = match self.build_parcel_Repeat2dBytes(_arg_input, _arg_repeated) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::Repeat2dBytes, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#Repeat2dBytes, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_Repeat2dBytes(_arg_input, _arg_repeated, _aidl_reply)
         }
       )
     }
-    fn Repeat2dInts<'a>(&'a self, _arg_input: &'a [[i32; 3]; 2], _arg_repeated: &'a mut [[i32; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[i32; 3]; 2]>> {
+    fn r#Repeat2dInts<'a>(&'a self, _arg_input: &'a [[i32; 3]; 2], _arg_repeated: &'a mut [[i32; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[i32; 3]; 2]>> {
       let _aidl_data = match self.build_parcel_Repeat2dInts(_arg_input, _arg_repeated) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::Repeat2dInts, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#Repeat2dInts, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_Repeat2dInts(_arg_input, _arg_repeated, _aidl_reply)
         }
       )
     }
-    fn Repeat2dBinders<'a>(&'a self, _arg_input: &'a [[binder::SpIBinder; 3]; 2], _arg_repeated: &'a mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[binder::SpIBinder; 3]; 2]>> {
+    fn r#Repeat2dBinders<'a>(&'a self, _arg_input: &'a [[binder::SpIBinder; 3]; 2], _arg_repeated: &'a mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[binder::SpIBinder; 3]; 2]>> {
       let _aidl_data = match self.build_parcel_Repeat2dBinders(_arg_input, _arg_repeated) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::Repeat2dBinders, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#Repeat2dBinders, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_Repeat2dBinders(_arg_input, _arg_repeated, _aidl_reply)
         }
       )
     }
-    fn Repeat2dParcelables<'a>(&'a self, _arg_input: &'a [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &'a mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]>> {
+    fn r#Repeat2dParcelables<'a>(&'a self, _arg_input: &'a [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &'a mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::BoxFuture<'a, binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]>> {
       let _aidl_data = match self.build_parcel_Repeat2dParcelables(_arg_input, _arg_repeated) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::Repeat2dParcelables, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#Repeat2dParcelables, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_Repeat2dParcelables(_arg_input, _arg_repeated, _aidl_reply)
         }
@@ -794,21 +794,21 @@
     }
   }
   impl IRepeatFixedSizeArray for binder::binder_impl::Binder<BnRepeatFixedSizeArray> {
-    fn RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]> { self.0.RepeatBytes(_arg_input, _arg_repeated) }
-    fn RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]> { self.0.RepeatInts(_arg_input, _arg_repeated) }
-    fn RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]> { self.0.RepeatBinders(_arg_input, _arg_repeated) }
-    fn RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]> { self.0.RepeatParcelables(_arg_input, _arg_repeated) }
-    fn Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]> { self.0.Repeat2dBytes(_arg_input, _arg_repeated) }
-    fn Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]> { self.0.Repeat2dInts(_arg_input, _arg_repeated) }
-    fn Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]> { self.0.Repeat2dBinders(_arg_input, _arg_repeated) }
-    fn Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]> { self.0.Repeat2dParcelables(_arg_input, _arg_repeated) }
+    fn r#RepeatBytes(&self, _arg_input: &[u8; 3], _arg_repeated: &mut [u8; 3]) -> binder::Result<[u8; 3]> { self.0.r#RepeatBytes(_arg_input, _arg_repeated) }
+    fn r#RepeatInts(&self, _arg_input: &[i32; 3], _arg_repeated: &mut [i32; 3]) -> binder::Result<[i32; 3]> { self.0.r#RepeatInts(_arg_input, _arg_repeated) }
+    fn r#RepeatBinders(&self, _arg_input: &[binder::SpIBinder; 3], _arg_repeated: &mut [Option<binder::SpIBinder>; 3]) -> binder::Result<[binder::SpIBinder; 3]> { self.0.r#RepeatBinders(_arg_input, _arg_repeated) }
+    fn r#RepeatParcelables(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3], _arg_repeated: &mut [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]) -> binder::Result<[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]> { self.0.r#RepeatParcelables(_arg_input, _arg_repeated) }
+    fn r#Repeat2dBytes(&self, _arg_input: &[[u8; 3]; 2], _arg_repeated: &mut [[u8; 3]; 2]) -> binder::Result<[[u8; 3]; 2]> { self.0.r#Repeat2dBytes(_arg_input, _arg_repeated) }
+    fn r#Repeat2dInts(&self, _arg_input: &[[i32; 3]; 2], _arg_repeated: &mut [[i32; 3]; 2]) -> binder::Result<[[i32; 3]; 2]> { self.0.r#Repeat2dInts(_arg_input, _arg_repeated) }
+    fn r#Repeat2dBinders(&self, _arg_input: &[[binder::SpIBinder; 3]; 2], _arg_repeated: &mut [[Option<binder::SpIBinder>; 3]; 2]) -> binder::Result<[[binder::SpIBinder; 3]; 2]> { self.0.r#Repeat2dBinders(_arg_input, _arg_repeated) }
+    fn r#Repeat2dParcelables(&self, _arg_input: &[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2], _arg_repeated: &mut [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]) -> binder::Result<[[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2]> { self.0.r#Repeat2dParcelables(_arg_input, _arg_repeated) }
   }
   fn on_transact(_aidl_service: &dyn IRepeatFixedSizeArray, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
     match _aidl_code {
-      transactions::RepeatBytes => {
+      transactions::r#RepeatBytes => {
         let _arg_input: [u8; 3] = _aidl_data.read()?;
         let mut _arg_repeated: [u8; 3] = Default::default();
-        let _aidl_return = _aidl_service.RepeatBytes(&_arg_input, &mut _arg_repeated);
+        let _aidl_return = _aidl_service.r#RepeatBytes(&_arg_input, &mut _arg_repeated);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -819,10 +819,10 @@
         }
         Ok(())
       }
-      transactions::RepeatInts => {
+      transactions::r#RepeatInts => {
         let _arg_input: [i32; 3] = _aidl_data.read()?;
         let mut _arg_repeated: [i32; 3] = Default::default();
-        let _aidl_return = _aidl_service.RepeatInts(&_arg_input, &mut _arg_repeated);
+        let _aidl_return = _aidl_service.r#RepeatInts(&_arg_input, &mut _arg_repeated);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -833,10 +833,10 @@
         }
         Ok(())
       }
-      transactions::RepeatBinders => {
+      transactions::r#RepeatBinders => {
         let _arg_input: [binder::SpIBinder; 3] = _aidl_data.read()?;
         let mut _arg_repeated: [Option<binder::SpIBinder>; 3] = Default::default();
-        let _aidl_return = _aidl_service.RepeatBinders(&_arg_input, &mut _arg_repeated);
+        let _aidl_return = _aidl_service.r#RepeatBinders(&_arg_input, &mut _arg_repeated);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -847,10 +847,10 @@
         }
         Ok(())
       }
-      transactions::RepeatParcelables => {
+      transactions::r#RepeatParcelables => {
         let _arg_input: [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3] = _aidl_data.read()?;
         let mut _arg_repeated: [crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3] = Default::default();
-        let _aidl_return = _aidl_service.RepeatParcelables(&_arg_input, &mut _arg_repeated);
+        let _aidl_return = _aidl_service.r#RepeatParcelables(&_arg_input, &mut _arg_repeated);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -861,10 +861,10 @@
         }
         Ok(())
       }
-      transactions::Repeat2dBytes => {
+      transactions::r#Repeat2dBytes => {
         let _arg_input: [[u8; 3]; 2] = _aidl_data.read()?;
         let mut _arg_repeated: [[u8; 3]; 2] = Default::default();
-        let _aidl_return = _aidl_service.Repeat2dBytes(&_arg_input, &mut _arg_repeated);
+        let _aidl_return = _aidl_service.r#Repeat2dBytes(&_arg_input, &mut _arg_repeated);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -875,10 +875,10 @@
         }
         Ok(())
       }
-      transactions::Repeat2dInts => {
+      transactions::r#Repeat2dInts => {
         let _arg_input: [[i32; 3]; 2] = _aidl_data.read()?;
         let mut _arg_repeated: [[i32; 3]; 2] = Default::default();
-        let _aidl_return = _aidl_service.Repeat2dInts(&_arg_input, &mut _arg_repeated);
+        let _aidl_return = _aidl_service.r#Repeat2dInts(&_arg_input, &mut _arg_repeated);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -889,10 +889,10 @@
         }
         Ok(())
       }
-      transactions::Repeat2dBinders => {
+      transactions::r#Repeat2dBinders => {
         let _arg_input: [[binder::SpIBinder; 3]; 2] = _aidl_data.read()?;
         let mut _arg_repeated: [[Option<binder::SpIBinder>; 3]; 2] = Default::default();
-        let _aidl_return = _aidl_service.Repeat2dBinders(&_arg_input, &mut _arg_repeated);
+        let _aidl_return = _aidl_service.r#Repeat2dBinders(&_arg_input, &mut _arg_repeated);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -903,10 +903,10 @@
         }
         Ok(())
       }
-      transactions::Repeat2dParcelables => {
+      transactions::r#Repeat2dParcelables => {
         let _arg_input: [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2] = _aidl_data.read()?;
         let mut _arg_repeated: [[crate::mangled::_7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable; 3]; 2] = Default::default();
-        let _aidl_return = _aidl_service.Repeat2dParcelables(&_arg_input, &mut _arg_repeated);
+        let _aidl_return = _aidl_service.r#Repeat2dParcelables(&_arg_input, &mut _arg_repeated);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -921,68 +921,68 @@
     }
   }
 }
-pub mod ByteEnum {
+pub mod r#ByteEnum {
   #![allow(non_upper_case_globals)]
   use binder::declare_binder_enum;
   declare_binder_enum! {
-    ByteEnum : [i8; 1] {
-      A = 0,
+    r#ByteEnum : [i8; 1] {
+      r#A = 0,
     }
   }
 }
-pub mod IntEnum {
+pub mod r#IntEnum {
   #![allow(non_upper_case_globals)]
   use binder::declare_binder_enum;
   declare_binder_enum! {
-    IntEnum : [i32; 1] {
-      A = 0,
+    r#IntEnum : [i32; 1] {
+      r#A = 0,
     }
   }
 }
-pub mod LongEnum {
+pub mod r#LongEnum {
   #![allow(non_upper_case_globals)]
   use binder::declare_binder_enum;
   declare_binder_enum! {
-    LongEnum : [i64; 1] {
-      A = 0,
+    r#LongEnum : [i64; 1] {
+      r#A = 0,
     }
   }
 }
-pub mod IntParcelable {
+pub mod r#IntParcelable {
   #[derive(Debug, Clone, Copy, PartialEq)]
-  pub struct IntParcelable {
-    pub value: i32,
+  pub struct r#IntParcelable {
+    pub r#value: i32,
   }
-  impl Default for IntParcelable {
+  impl Default for r#IntParcelable {
     fn default() -> Self {
       Self {
-        value: 0,
+        r#value: 0,
       }
     }
   }
-  impl binder::Parcelable for IntParcelable {
+  impl binder::Parcelable for r#IntParcelable {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_write(|subparcel| {
-        subparcel.write(&self.value)?;
+        subparcel.write(&self.r#value)?;
         Ok(())
       })
     }
     fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_read(|subparcel| {
         if subparcel.has_more_data() {
-          self.value = subparcel.read()?;
+          self.r#value = subparcel.read()?;
         }
         Ok(())
       })
     }
   }
-  binder::impl_serialize_for_parcelable!(IntParcelable);
-  binder::impl_deserialize_for_parcelable!(IntParcelable);
-  impl binder::binder_impl::ParcelableMetadata for IntParcelable {
+  binder::impl_serialize_for_parcelable!(r#IntParcelable);
+  binder::impl_deserialize_for_parcelable!(r#IntParcelable);
+  impl binder::binder_impl::ParcelableMetadata for r#IntParcelable {
     fn get_descriptor() -> &'static str { "android.aidl.fixedsizearray.FixedSizeArrayExample.IntParcelable" }
   }
 }
-pub mod IEmptyInterface {
+pub mod r#IEmptyInterface {
   #![allow(non_upper_case_globals)]
   #![allow(non_snake_case)]
   #[allow(unused_imports)] use binder::binder_impl::IBinderInternal;
@@ -1060,11 +1060,11 @@
   }
 }
 pub(crate) mod mangled {
- pub use super::FixedSizeArrayExample as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample;
- pub use super::IRepeatFixedSizeArray::IRepeatFixedSizeArray as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_21_IRepeatFixedSizeArray;
- pub use super::ByteEnum::ByteEnum as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_ByteEnum;
- pub use super::IntEnum::IntEnum as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_7_IntEnum;
- pub use super::LongEnum::LongEnum as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_LongEnum;
- pub use super::IntParcelable::IntParcelable as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable;
- pub use super::IEmptyInterface::IEmptyInterface as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_15_IEmptyInterface;
+ pub use super::r#FixedSizeArrayExample as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample;
+ pub use super::r#IRepeatFixedSizeArray::r#IRepeatFixedSizeArray as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_21_IRepeatFixedSizeArray;
+ pub use super::r#ByteEnum::r#ByteEnum as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_ByteEnum;
+ pub use super::r#IntEnum::r#IntEnum as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_7_IntEnum;
+ pub use super::r#LongEnum::r#LongEnum as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_8_LongEnum;
+ pub use super::r#IntParcelable::r#IntParcelable as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_13_IntParcelable;
+ pub use super::r#IEmptyInterface::r#IEmptyInterface as _7_android_4_aidl_14_fixedsizearray_21_FixedSizeArrayExample_15_IEmptyInterface;
 }
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp.d
new file mode 100644
index 0000000..926b7a9
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/ArrayOfInterfaces.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/BackendType.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/BackendType.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/BackendType.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/BackendType.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/BackendType.cpp.d
new file mode 100644
index 0000000..a8eb8f4
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/BackendType.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/BackendType.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ByteEnum.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ByteEnum.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ByteEnum.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ByteEnum.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ByteEnum.cpp.d
new file mode 100644
index 0000000..dc5cd10
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ByteEnum.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ByteEnum.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/CircularParcelable.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/CircularParcelable.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/CircularParcelable.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/CircularParcelable.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/CircularParcelable.cpp.d
new file mode 100644
index 0000000..ca732bc
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/CircularParcelable.cpp.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/CircularParcelable.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ConstantExpressionEnum.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ConstantExpressionEnum.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ConstantExpressionEnum.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ConstantExpressionEnum.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ConstantExpressionEnum.cpp.d
new file mode 100644
index 0000000..7c62e12
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ConstantExpressionEnum.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ConstantExpressionEnum.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedEnum.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedEnum.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedEnum.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedEnum.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedEnum.cpp.d
new file mode 100644
index 0000000..13e605a
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedEnum.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedEnum.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/DeprecatedEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedParcelable.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedParcelable.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedParcelable.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedParcelable.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedParcelable.cpp.d
new file mode 100644
index 0000000..cb06e1f
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedParcelable.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/DeprecatedParcelable.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/DeprecatedParcelable.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/FixedSize.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/FixedSize.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/FixedSize.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/FixedSize.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/FixedSize.cpp.d
new file mode 100644
index 0000000..6f36764
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/FixedSize.cpp.d
@@ -0,0 +1,3 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/FixedSize.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/FixedSize.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/GenericStructuredParcelable.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/GenericStructuredParcelable.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/GenericStructuredParcelable.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/GenericStructuredParcelable.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/GenericStructuredParcelable.cpp.d
new file mode 100644
index 0000000..bc6d54d
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/GenericStructuredParcelable.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/GenericStructuredParcelable.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/GenericStructuredParcelable.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ICircular.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ICircular.cpp
new file mode 100644
index 0000000..2035708
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ICircular.cpp
@@ -0,0 +1,53 @@
+#include <iostream>
+#include <binder/Parcel.h>
+#include <android/binder_to_string.h>
+#include <android/aidl/tests/ICircular.h>
+namespace {
+android::status_t analyzeICircular(uint32_t _aidl_code, const android::Parcel& _aidl_data, const android::Parcel& _aidl_reply) {
+  android::status_t _aidl_ret_status;
+  switch(_aidl_code) {
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 0:
+    {
+      std::cout << "ICircular.GetTestService()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ICircular")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::sp<::android::aidl::tests::ITestService> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readNullableStrongBinder(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+      } while(false);
+      std::cout << "  arguments: " << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    default:
+    {
+      std::cout << "  Transaction code " << _aidl_code << " not known." << std::endl;
+    _aidl_ret_status = android::UNKNOWN_TRANSACTION;
+    }
+  }
+  return _aidl_ret_status;
+  // To prevent unused variable warnings
+  (void)_aidl_ret_status; (void)_aidl_data; (void)_aidl_reply;
+}
+
+} // namespace
+
+#include <Analyzer.h>
+using android::aidl::Analyzer;
+__attribute__((constructor)) static void addAnalyzer() {
+  Analyzer::installAnalyzer(std::make_unique<Analyzer>("android.aidl.tests.ICircular", "ICircular", &analyzeICircular));
+}
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ICircular.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ICircular.cpp.d
new file mode 100644
index 0000000..caefda2
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ICircular.cpp.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ICircular.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IDeprecated.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IDeprecated.cpp
new file mode 100644
index 0000000..2296605
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IDeprecated.cpp
@@ -0,0 +1,26 @@
+#include <iostream>
+#include <binder/Parcel.h>
+#include <android/binder_to_string.h>
+#include <android/aidl/tests/IDeprecated.h>
+namespace {
+android::status_t analyzeIDeprecated(uint32_t _aidl_code, const android::Parcel& _aidl_data, const android::Parcel& _aidl_reply) {
+  android::status_t _aidl_ret_status;
+  switch(_aidl_code) {
+    default:
+    {
+      std::cout << "  Transaction code " << _aidl_code << " not known." << std::endl;
+    _aidl_ret_status = android::UNKNOWN_TRANSACTION;
+    }
+  }
+  return _aidl_ret_status;
+  // To prevent unused variable warnings
+  (void)_aidl_ret_status; (void)_aidl_data; (void)_aidl_reply;
+}
+
+} // namespace
+
+#include <Analyzer.h>
+using android::aidl::Analyzer;
+__attribute__((constructor)) static void addAnalyzer() {
+  Analyzer::installAnalyzer(std::make_unique<Analyzer>("android.aidl.tests.IDeprecated", "IDeprecated", &analyzeIDeprecated));
+}
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IDeprecated.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IDeprecated.cpp.d
new file mode 100644
index 0000000..afc741e
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IDeprecated.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IDeprecated.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/IDeprecated.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INamedCallback.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INamedCallback.cpp
new file mode 100644
index 0000000..b94c2fc
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INamedCallback.cpp
@@ -0,0 +1,53 @@
+#include <iostream>
+#include <binder/Parcel.h>
+#include <android/binder_to_string.h>
+#include <android/aidl/tests/INamedCallback.h>
+namespace {
+android::status_t analyzeINamedCallback(uint32_t _aidl_code, const android::Parcel& _aidl_data, const android::Parcel& _aidl_reply) {
+  android::status_t _aidl_ret_status;
+  switch(_aidl_code) {
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 0:
+    {
+      std::cout << "INamedCallback.GetName()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.INamedCallback")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::String16 _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readString16(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+      } while(false);
+      std::cout << "  arguments: " << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    default:
+    {
+      std::cout << "  Transaction code " << _aidl_code << " not known." << std::endl;
+    _aidl_ret_status = android::UNKNOWN_TRANSACTION;
+    }
+  }
+  return _aidl_ret_status;
+  // To prevent unused variable warnings
+  (void)_aidl_ret_status; (void)_aidl_data; (void)_aidl_reply;
+}
+
+} // namespace
+
+#include <Analyzer.h>
+using android::aidl::Analyzer;
+__attribute__((constructor)) static void addAnalyzer() {
+  Analyzer::installAnalyzer(std::make_unique<Analyzer>("android.aidl.tests.INamedCallback", "INamedCallback", &analyzeINamedCallback));
+}
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INamedCallback.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INamedCallback.cpp.d
new file mode 100644
index 0000000..18e6033
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INamedCallback.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INamedCallback.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INewName.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INewName.cpp
new file mode 100644
index 0000000..48023fe
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INewName.cpp
@@ -0,0 +1,53 @@
+#include <iostream>
+#include <binder/Parcel.h>
+#include <android/binder_to_string.h>
+#include <android/aidl/tests/INewName.h>
+namespace {
+android::status_t analyzeINewName(uint32_t _aidl_code, const android::Parcel& _aidl_data, const android::Parcel& _aidl_reply) {
+  android::status_t _aidl_ret_status;
+  switch(_aidl_code) {
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 0:
+    {
+      std::cout << "INewName.RealName()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.IOldName")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::String16 _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readString16(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+      } while(false);
+      std::cout << "  arguments: " << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    default:
+    {
+      std::cout << "  Transaction code " << _aidl_code << " not known." << std::endl;
+    _aidl_ret_status = android::UNKNOWN_TRANSACTION;
+    }
+  }
+  return _aidl_ret_status;
+  // To prevent unused variable warnings
+  (void)_aidl_ret_status; (void)_aidl_data; (void)_aidl_reply;
+}
+
+} // namespace
+
+#include <Analyzer.h>
+using android::aidl::Analyzer;
+__attribute__((constructor)) static void addAnalyzer() {
+  Analyzer::installAnalyzer(std::make_unique<Analyzer>("android.aidl.tests.INewName", "INewName", &analyzeINewName));
+}
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INewName.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INewName.cpp.d
new file mode 100644
index 0000000..54b0be5
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INewName.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/INewName.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IOldName.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IOldName.cpp
new file mode 100644
index 0000000..12cac6d
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IOldName.cpp
@@ -0,0 +1,53 @@
+#include <iostream>
+#include <binder/Parcel.h>
+#include <android/binder_to_string.h>
+#include <android/aidl/tests/IOldName.h>
+namespace {
+android::status_t analyzeIOldName(uint32_t _aidl_code, const android::Parcel& _aidl_data, const android::Parcel& _aidl_reply) {
+  android::status_t _aidl_ret_status;
+  switch(_aidl_code) {
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 0:
+    {
+      std::cout << "IOldName.RealName()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.IOldName")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::String16 _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readString16(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+      } while(false);
+      std::cout << "  arguments: " << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    default:
+    {
+      std::cout << "  Transaction code " << _aidl_code << " not known." << std::endl;
+    _aidl_ret_status = android::UNKNOWN_TRANSACTION;
+    }
+  }
+  return _aidl_ret_status;
+  // To prevent unused variable warnings
+  (void)_aidl_ret_status; (void)_aidl_data; (void)_aidl_reply;
+}
+
+} // namespace
+
+#include <Analyzer.h>
+using android::aidl::Analyzer;
+__attribute__((constructor)) static void addAnalyzer() {
+  Analyzer::installAnalyzer(std::make_unique<Analyzer>("android.aidl.tests.IOldName", "IOldName", &analyzeIOldName));
+}
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IOldName.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IOldName.cpp.d
new file mode 100644
index 0000000..d09b11f
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IOldName.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IOldName.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ITestService.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ITestService.cpp
new file mode 100644
index 0000000..4dffe40
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ITestService.cpp
@@ -0,0 +1,2684 @@
+#include <iostream>
+#include <binder/Parcel.h>
+#include <android/binder_to_string.h>
+#include <android/aidl/tests/ITestService.h>
+namespace {
+android::status_t analyzeITestService(uint32_t _aidl_code, const android::Parcel& _aidl_data, const android::Parcel& _aidl_reply) {
+  android::status_t _aidl_ret_status;
+  switch(_aidl_code) {
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 0:
+    {
+      std::cout << "ITestService.UnimplementedMethod()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      int32_t in_arg;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      int32_t _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readInt32(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readInt32(&in_arg);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument arg from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    arg: " << ::android::internal::ToString(in_arg) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 1:
+    {
+      std::cout << "ITestService.Deprecated()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      do { // Single-pass loop to break if argument reading fails
+      } while(false);
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "  return: void" << std::endl;
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 2:
+    {
+      std::cout << "ITestService.TestOneway()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      do { // Single-pass loop to break if argument reading fails
+      } while(false);
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "  return: void" << std::endl;
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 3:
+    {
+      std::cout << "ITestService.RepeatBoolean()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      bool in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      bool _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readBool(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readBool(&in_token);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 4:
+    {
+      std::cout << "ITestService.RepeatByte()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      int8_t in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      int8_t _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readByte(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readByte(&in_token);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 5:
+    {
+      std::cout << "ITestService.RepeatChar()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      char16_t in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      char16_t _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readChar(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readChar(&in_token);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 6:
+    {
+      std::cout << "ITestService.RepeatInt()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      int32_t in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      int32_t _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readInt32(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readInt32(&in_token);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 7:
+    {
+      std::cout << "ITestService.RepeatLong()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      int64_t in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      int64_t _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readInt64(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readInt64(&in_token);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 8:
+    {
+      std::cout << "ITestService.RepeatFloat()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      float in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      float _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readFloat(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readFloat(&in_token);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 9:
+    {
+      std::cout << "ITestService.RepeatDouble()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      double in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      double _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readDouble(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readDouble(&in_token);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 10:
+    {
+      std::cout << "ITestService.RepeatString()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::String16 in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::String16 _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readString16(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readString16(&in_token);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 11:
+    {
+      std::cout << "ITestService.RepeatByteEnum()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::aidl::tests::ByteEnum in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::aidl::tests::ByteEnum _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readByte(reinterpret_cast<int8_t *>(&_aidl_return));
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readByte(reinterpret_cast<int8_t *>(&in_token));
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 12:
+    {
+      std::cout << "ITestService.RepeatIntEnum()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::aidl::tests::IntEnum in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::aidl::tests::IntEnum _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readInt32(reinterpret_cast<int32_t *>(&_aidl_return));
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readInt32(reinterpret_cast<int32_t *>(&in_token));
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 13:
+    {
+      std::cout << "ITestService.RepeatLongEnum()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::aidl::tests::LongEnum in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::aidl::tests::LongEnum _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readInt64(reinterpret_cast<int64_t *>(&_aidl_return));
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readInt64(reinterpret_cast<int64_t *>(&in_token));
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 14:
+    {
+      std::cout << "ITestService.ReverseBoolean()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<bool> in_input;
+      ::std::vector<bool> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<bool> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readBoolVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readBoolVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readBoolVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 15:
+    {
+      std::cout << "ITestService.ReverseByte()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<uint8_t> in_input;
+      ::std::vector<uint8_t> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<uint8_t> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readByteVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readByteVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readByteVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 16:
+    {
+      std::cout << "ITestService.ReverseChar()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<char16_t> in_input;
+      ::std::vector<char16_t> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<char16_t> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readCharVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readCharVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readCharVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 17:
+    {
+      std::cout << "ITestService.ReverseInt()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<int32_t> in_input;
+      ::std::vector<int32_t> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<int32_t> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readInt32Vector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readInt32Vector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readInt32Vector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 18:
+    {
+      std::cout << "ITestService.ReverseLong()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<int64_t> in_input;
+      ::std::vector<int64_t> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<int64_t> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readInt64Vector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readInt64Vector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readInt64Vector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 19:
+    {
+      std::cout << "ITestService.ReverseFloat()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<float> in_input;
+      ::std::vector<float> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<float> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readFloatVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readFloatVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readFloatVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 20:
+    {
+      std::cout << "ITestService.ReverseDouble()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<double> in_input;
+      ::std::vector<double> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<double> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readDoubleVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readDoubleVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readDoubleVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 21:
+    {
+      std::cout << "ITestService.ReverseString()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::String16> in_input;
+      ::std::vector<::android::String16> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<::android::String16> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readString16Vector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readString16Vector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readString16Vector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 22:
+    {
+      std::cout << "ITestService.ReverseByteEnum()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::aidl::tests::ByteEnum> in_input;
+      ::std::vector<::android::aidl::tests::ByteEnum> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<::android::aidl::tests::ByteEnum> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readEnumVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readEnumVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 23:
+    {
+      std::cout << "ITestService.ReverseIntEnum()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::aidl::tests::IntEnum> in_input;
+      ::std::vector<::android::aidl::tests::IntEnum> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<::android::aidl::tests::IntEnum> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readEnumVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readEnumVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 24:
+    {
+      std::cout << "ITestService.ReverseLongEnum()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::aidl::tests::LongEnum> in_input;
+      ::std::vector<::android::aidl::tests::LongEnum> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<::android::aidl::tests::LongEnum> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readEnumVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readEnumVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 25:
+    {
+      std::cout << "ITestService.GetOtherTestService()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::String16 in_name;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::sp<::android::aidl::tests::INamedCallback> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readStrongBinder(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readString16(&in_name);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument name from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    name: " << ::android::internal::ToString(in_name) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 26:
+    {
+      std::cout << "ITestService.SetOtherTestService()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::String16 in_name;
+      ::android::sp<::android::aidl::tests::INamedCallback> in_service;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      bool _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readBool(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readString16(&in_name);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument name from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readStrongBinder(&in_service);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument service from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    name: " << ::android::internal::ToString(in_name) << std::endl;
+      std::cout << "    service: " << ::android::internal::ToString(in_service) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 27:
+    {
+      std::cout << "ITestService.VerifyName()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::sp<::android::aidl::tests::INamedCallback> in_service;
+      ::android::String16 in_name;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      bool _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readBool(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readStrongBinder(&in_service);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument service from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readString16(&in_name);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument name from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    service: " << ::android::internal::ToString(in_service) << std::endl;
+      std::cout << "    name: " << ::android::internal::ToString(in_name) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 28:
+    {
+      std::cout << "ITestService.GetInterfaceArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::String16> in_names;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<::android::sp<::android::aidl::tests::INamedCallback>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readStrongBinderVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readString16Vector(&in_names);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument names from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    names: " << ::android::internal::ToString(in_names) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 29:
+    {
+      std::cout << "ITestService.VerifyNamesWithInterfaceArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::sp<::android::aidl::tests::INamedCallback>> in_services;
+      ::std::vector<::android::String16> in_names;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      bool _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readBool(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_services);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument services from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readString16Vector(&in_names);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument names from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    services: " << ::android::internal::ToString(in_services) << std::endl;
+      std::cout << "    names: " << ::android::internal::ToString(in_names) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 30:
+    {
+      std::cout << "ITestService.GetNullableInterfaceArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::std::optional<::android::String16>>> in_names;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::android::sp<::android::aidl::tests::INamedCallback>>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readStrongBinderVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readString16Vector(&in_names);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument names from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    names: " << ::android::internal::ToString(in_names) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 31:
+    {
+      std::cout << "ITestService.VerifyNamesWithNullableInterfaceArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::android::sp<::android::aidl::tests::INamedCallback>>> in_services;
+      ::std::optional<::std::vector<::std::optional<::android::String16>>> in_names;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      bool _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readBool(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_services);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument services from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readString16Vector(&in_names);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument names from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    services: " << ::android::internal::ToString(in_services) << std::endl;
+      std::cout << "    names: " << ::android::internal::ToString(in_names) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 32:
+    {
+      std::cout << "ITestService.GetInterfaceList()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::std::optional<::android::String16>>> in_names;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::android::sp<::android::aidl::tests::INamedCallback>>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readStrongBinderVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readString16Vector(&in_names);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument names from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    names: " << ::android::internal::ToString(in_names) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 33:
+    {
+      std::cout << "ITestService.VerifyNamesWithInterfaceList()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::android::sp<::android::aidl::tests::INamedCallback>>> in_services;
+      ::std::optional<::std::vector<::std::optional<::android::String16>>> in_names;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      bool _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readBool(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_services);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument services from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readString16Vector(&in_names);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument names from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    services: " << ::android::internal::ToString(in_services) << std::endl;
+      std::cout << "    names: " << ::android::internal::ToString(in_names) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 34:
+    {
+      std::cout << "ITestService.ReverseStringList()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::String16> in_input;
+      ::std::vector<::android::String16> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<::android::String16> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readString16Vector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readString16Vector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readString16Vector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 35:
+    {
+      std::cout << "ITestService.RepeatParcelFileDescriptor()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::os::ParcelFileDescriptor in_read;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::os::ParcelFileDescriptor _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readParcelable(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelable(&in_read);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument read from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    read: " << ::android::internal::ToString(in_read) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 36:
+    {
+      std::cout << "ITestService.ReverseParcelFileDescriptorArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::os::ParcelFileDescriptor> in_input;
+      ::std::vector<::android::os::ParcelFileDescriptor> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<::android::os::ParcelFileDescriptor> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readParcelableVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelableVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readParcelableVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 37:
+    {
+      std::cout << "ITestService.ThrowServiceException()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      int32_t in_code;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readInt32(&in_code);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument code from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    code: " << ::android::internal::ToString(in_code) << std::endl;
+      std::cout << "  return: void" << std::endl;
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 38:
+    {
+      std::cout << "ITestService.RepeatNullableIntArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<int32_t>> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<int32_t>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readInt32Vector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readInt32Vector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 39:
+    {
+      std::cout << "ITestService.RepeatNullableByteEnumArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::android::aidl::tests::ByteEnum>> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::android::aidl::tests::ByteEnum>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readEnumVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 40:
+    {
+      std::cout << "ITestService.RepeatNullableIntEnumArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::android::aidl::tests::IntEnum>> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::android::aidl::tests::IntEnum>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readEnumVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 41:
+    {
+      std::cout << "ITestService.RepeatNullableLongEnumArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::android::aidl::tests::LongEnum>> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::android::aidl::tests::LongEnum>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readEnumVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 42:
+    {
+      std::cout << "ITestService.RepeatNullableString()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::android::String16> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::android::String16> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readString16(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readString16(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 43:
+    {
+      std::cout << "ITestService.RepeatNullableStringList()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::std::optional<::android::String16>>> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::std::optional<::android::String16>>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readString16Vector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readString16Vector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 44:
+    {
+      std::cout << "ITestService.RepeatNullableParcelable()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::android::aidl::tests::ITestService::Empty> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::android::aidl::tests::ITestService::Empty> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readParcelable(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelable(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 45:
+    {
+      std::cout << "ITestService.RepeatNullableParcelableArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::std::optional<::android::aidl::tests::ITestService::Empty>>> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::std::optional<::android::aidl::tests::ITestService::Empty>>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readParcelableVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelableVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 46:
+    {
+      std::cout << "ITestService.RepeatNullableParcelableList()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::std::optional<::android::aidl::tests::ITestService::Empty>>> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::std::optional<::android::aidl::tests::ITestService::Empty>>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readParcelableVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelableVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 47:
+    {
+      std::cout << "ITestService.TakesAnIBinder()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::sp<::android::IBinder> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readStrongBinder(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "  return: void" << std::endl;
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 48:
+    {
+      std::cout << "ITestService.TakesANullableIBinder()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::sp<::android::IBinder> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readNullableStrongBinder(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "  return: void" << std::endl;
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 49:
+    {
+      std::cout << "ITestService.TakesAnIBinderList()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::sp<::android::IBinder>> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "  return: void" << std::endl;
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 50:
+    {
+      std::cout << "ITestService.TakesANullableIBinderList()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::android::sp<::android::IBinder>>> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "  return: void" << std::endl;
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 51:
+    {
+      std::cout << "ITestService.RepeatUtf8CppString()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::string in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::string _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readUtf8FromUtf16(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readUtf8FromUtf16(&in_token);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 52:
+    {
+      std::cout << "ITestService.RepeatNullableUtf8CppString()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::string> in_token;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::string> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readUtf8FromUtf16(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readUtf8FromUtf16(&in_token);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument token from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    token: " << ::android::internal::ToString(in_token) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 53:
+    {
+      std::cout << "ITestService.ReverseUtf8CppString()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::std::string> in_input;
+      ::std::vector<::std::string> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<::std::string> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readUtf8VectorFromUtf16Vector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readUtf8VectorFromUtf16Vector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readUtf8VectorFromUtf16Vector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 54:
+    {
+      std::cout << "ITestService.ReverseNullableUtf8CppString()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::std::optional<::std::string>>> in_input;
+      ::std::optional<::std::vector<::std::optional<::std::string>>> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::std::optional<::std::string>>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readUtf8VectorFromUtf16Vector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readUtf8VectorFromUtf16Vector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readUtf8VectorFromUtf16Vector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 55:
+    {
+      std::cout << "ITestService.ReverseUtf8CppStringList()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::std::optional<::std::string>>> in_input;
+      ::std::optional<::std::vector<::std::optional<::std::string>>> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::std::optional<::std::string>>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readUtf8VectorFromUtf16Vector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readUtf8VectorFromUtf16Vector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readUtf8VectorFromUtf16Vector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 56:
+    {
+      std::cout << "ITestService.GetCallback()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      bool in_return_null;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::sp<::android::aidl::tests::INamedCallback> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readNullableStrongBinder(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readBool(&in_return_null);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument return_null from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    return_null: " << ::android::internal::ToString(in_return_null) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 57:
+    {
+      std::cout << "ITestService.FillOutStructuredParcelable()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::aidl::tests::StructuredParcelable in_parcel;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelable(&in_parcel);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument parcel from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    parcel: " << ::android::internal::ToString(in_parcel) << std::endl;
+      std::cout << "  return: void" << std::endl;
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 58:
+    {
+      std::cout << "ITestService.RepeatExtendableParcelable()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::aidl::tests::extension::ExtendableParcelable in_ep;
+      ::android::aidl::tests::extension::ExtendableParcelable out_ep2;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelable(&in_ep);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument ep from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readParcelable(&out_ep2);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument ep2 from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    ep: " << ::android::internal::ToString(in_ep) << std::endl;
+      std::cout << "    ep2: " << ::android::internal::ToString(out_ep2) << std::endl;
+      std::cout << "  return: void" << std::endl;
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 59:
+    {
+      std::cout << "ITestService.ReverseList()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::aidl::tests::RecursiveList in_list;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::aidl::tests::RecursiveList _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readParcelable(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelable(&in_list);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument list from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    list: " << ::android::internal::ToString(in_list) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 60:
+    {
+      std::cout << "ITestService.ReverseIBinderArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::sp<::android::IBinder>> in_input;
+      ::std::vector<::android::sp<::android::IBinder>> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<::android::sp<::android::IBinder>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readStrongBinderVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readStrongBinderVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 61:
+    {
+      std::cout << "ITestService.ReverseNullableIBinderArray()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::optional<::std::vector<::android::sp<::android::IBinder>>> in_input;
+      ::std::optional<::std::vector<::android::sp<::android::IBinder>>> out_repeated;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::optional<::std::vector<::android::sp<::android::IBinder>>> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readStrongBinderVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readStrongBinderVector(&out_repeated);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument repeated from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      std::cout << "    repeated: " << ::android::internal::ToString(out_repeated) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 62:
+    {
+      std::cout << "ITestService.GetOldNameInterface()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::sp<::android::aidl::tests::IOldName> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readStrongBinder(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+      } while(false);
+      std::cout << "  arguments: " << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 63:
+    {
+      std::cout << "ITestService.GetNewNameInterface()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::sp<::android::aidl::tests::INewName> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readStrongBinder(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+      } while(false);
+      std::cout << "  arguments: " << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 64:
+    {
+      std::cout << "ITestService.GetUnionTags()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::std::vector<::android::aidl::tests::Union> in_input;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::std::vector<::android::aidl::tests::Union::Tag> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readEnumVector(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelableVector(&in_input);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument input from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    input: " << ::android::internal::ToString(in_input) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 65:
+    {
+      std::cout << "ITestService.GetCppJavaTests()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::sp<::android::IBinder> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readNullableStrongBinder(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+      } while(false);
+      std::cout << "  arguments: " << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 66:
+    {
+      std::cout << "ITestService.getBackendType()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::aidl::tests::BackendType _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readByte(reinterpret_cast<int8_t *>(&_aidl_return));
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+      } while(false);
+      std::cout << "  arguments: " << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 67:
+    {
+      std::cout << "ITestService.GetCircular()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.ITestService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::aidl::tests::CircularParcelable out_cp;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::sp<::android::aidl::tests::ICircular> _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readStrongBinder(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelable(&out_cp);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument cp from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    cp: " << ::android::internal::ToString(out_cp) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    default:
+    {
+      std::cout << "  Transaction code " << _aidl_code << " not known." << std::endl;
+    _aidl_ret_status = android::UNKNOWN_TRANSACTION;
+    }
+  }
+  return _aidl_ret_status;
+  // To prevent unused variable warnings
+  (void)_aidl_ret_status; (void)_aidl_data; (void)_aidl_reply;
+}
+
+} // namespace
+
+#include <Analyzer.h>
+using android::aidl::Analyzer;
+__attribute__((constructor)) static void addAnalyzer() {
+  Analyzer::installAnalyzer(std::make_unique<Analyzer>("android.aidl.tests.ITestService", "ITestService", &analyzeITestService));
+}
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ITestService.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ITestService.cpp.d
new file mode 100644
index 0000000..5884077
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ITestService.cpp.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ITestService.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IntEnum.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IntEnum.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IntEnum.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IntEnum.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IntEnum.cpp.d
new file mode 100644
index 0000000..cd09610
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IntEnum.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/IntEnum.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ListOfInterfaces.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ListOfInterfaces.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ListOfInterfaces.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ListOfInterfaces.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ListOfInterfaces.cpp.d
new file mode 100644
index 0000000..09abd96
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ListOfInterfaces.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ListOfInterfaces.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/ListOfInterfaces.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/LongEnum.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/LongEnum.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/LongEnum.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/LongEnum.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/LongEnum.cpp.d
new file mode 100644
index 0000000..d83d703
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/LongEnum.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/LongEnum.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/OtherParcelableForToString.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/OtherParcelableForToString.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/OtherParcelableForToString.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/OtherParcelableForToString.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/OtherParcelableForToString.cpp.d
new file mode 100644
index 0000000..1907745
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/OtherParcelableForToString.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/OtherParcelableForToString.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/OtherParcelableForToString.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ParcelableForToString.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ParcelableForToString.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ParcelableForToString.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ParcelableForToString.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ParcelableForToString.cpp.d
new file mode 100644
index 0000000..b89b897
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ParcelableForToString.cpp.d
@@ -0,0 +1,10 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/ParcelableForToString.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/ParcelableForToString.aidl \
+  system/tools/aidl/tests/android/aidl/tests/GenericStructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/OtherParcelableForToString.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/RecursiveList.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/RecursiveList.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/RecursiveList.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/RecursiveList.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/RecursiveList.cpp.d
new file mode 100644
index 0000000..d4e29f0
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/RecursiveList.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/RecursiveList.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/StructuredParcelable.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/StructuredParcelable.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/StructuredParcelable.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/StructuredParcelable.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/StructuredParcelable.cpp.d
new file mode 100644
index 0000000..dc83d1a
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/StructuredParcelable.cpp.d
@@ -0,0 +1,7 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/StructuredParcelable.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/Union.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/Union.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/Union.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/Union.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/Union.cpp.d
new file mode 100644
index 0000000..8a4c078
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/Union.cpp.d
@@ -0,0 +1,3 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/Union.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/UnionWithFd.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/UnionWithFd.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/UnionWithFd.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/UnionWithFd.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/UnionWithFd.cpp.d
new file mode 100644
index 0000000..db9f113
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/UnionWithFd.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/UnionWithFd.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/UnionWithFd.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/ExtendableParcelable.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/ExtendableParcelable.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/ExtendableParcelable.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/ExtendableParcelable.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/ExtendableParcelable.cpp.d
new file mode 100644
index 0000000..05a7b8b
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/ExtendableParcelable.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/ExtendableParcelable.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt.cpp.d
new file mode 100644
index 0000000..b408cd5
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/extension/MyExt.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt2.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt2.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt2.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt2.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt2.cpp.d
new file mode 100644
index 0000000..922747c
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt2.cpp.d
@@ -0,0 +1,3 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExt2.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/extension/MyExt2.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/MyExt.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExtLike.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExtLike.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExtLike.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExtLike.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExtLike.cpp.d
new file mode 100644
index 0000000..86841d0
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExtLike.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/extension/MyExtLike.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/extension/MyExtLike.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/DeeplyNested.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/DeeplyNested.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/DeeplyNested.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/DeeplyNested.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/DeeplyNested.cpp.d
new file mode 100644
index 0000000..60c4829
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/DeeplyNested.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/DeeplyNested.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/nested/DeeplyNested.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/INestedService.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/INestedService.cpp
new file mode 100644
index 0000000..1b39506
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/INestedService.cpp
@@ -0,0 +1,101 @@
+#include <iostream>
+#include <binder/Parcel.h>
+#include <android/binder_to_string.h>
+#include <android/aidl/tests/nested/INestedService.h>
+namespace {
+android::status_t analyzeINestedService(uint32_t _aidl_code, const android::Parcel& _aidl_data, const android::Parcel& _aidl_reply) {
+  android::status_t _aidl_ret_status;
+  switch(_aidl_code) {
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 0:
+    {
+      std::cout << "INestedService.flipStatus()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.nested.INestedService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::aidl::tests::nested::ParcelableWithNested in_p;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      ::android::aidl::tests::nested::INestedService::Result _aidl_return;
+      bool returnError = false;
+      _aidl_ret_status = _aidl_reply.readParcelable(&_aidl_return);
+      if (((_aidl_ret_status) != (android::NO_ERROR))) {
+        std::cerr << "Failure: error in reading return value from Parcel." << std::endl;
+        returnError = true;
+      }
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readParcelable(&in_p);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument p from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    p: " << ::android::internal::ToString(in_p) << std::endl;
+      if (returnError) {
+        std::cout << "  return: <error>" << std::endl;
+      } else {std::cout << "  return: " << ::android::internal::ToString(_aidl_return) << std::endl;
+      }
+    }
+    break;
+    case ::android::IBinder::FIRST_CALL_TRANSACTION + 1:
+    {
+      std::cout << "INestedService.flipStatusWithCallback()" << std::endl;
+      _aidl_ret_status = ::android::OK;
+      if (!(_aidl_data.enforceInterface(android::String16("android.aidl.tests.nested.INestedService")))) {
+        _aidl_ret_status = ::android::BAD_TYPE;
+        std::cout << "  Failure: Parcel interface does not match." << std::endl;
+        break;
+      }
+      ::android::aidl::tests::nested::ParcelableWithNested::Status in_status;
+      ::android::sp<::android::aidl::tests::nested::INestedService::ICallback> in_cb;
+      ::android::binder::Status binderStatus;
+      binderStatus.readFromParcel(_aidl_reply);
+      do { // Single-pass loop to break if argument reading fails
+        _aidl_ret_status = _aidl_data.readByte(reinterpret_cast<int8_t *>(&in_status));
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument status from Parcel." << std::endl;
+          break;
+        }
+        _aidl_ret_status = _aidl_data.readStrongBinder(&in_cb);
+        if (((_aidl_ret_status) != (android::NO_ERROR))) {
+          std::cerr << "Failure: error in reading argument cb from Parcel." << std::endl;
+          break;
+        }
+      } while(false);
+      if (!_aidl_data.enforceNoDataAvail().isOk()) {
+        _aidl_ret_status = android::BAD_VALUE;
+        std::cout << "  Failure: Parcel has too much data." << std::endl;
+        break;
+      }
+      std::cout << "  arguments: " << std::endl;
+      std::cout << "    status: " << ::android::internal::ToString(in_status) << std::endl;
+      std::cout << "    cb: " << ::android::internal::ToString(in_cb) << std::endl;
+      std::cout << "  return: void" << std::endl;
+    }
+    break;
+    default:
+    {
+      std::cout << "  Transaction code " << _aidl_code << " not known." << std::endl;
+    _aidl_ret_status = android::UNKNOWN_TRANSACTION;
+    }
+  }
+  return _aidl_ret_status;
+  // To prevent unused variable warnings
+  (void)_aidl_ret_status; (void)_aidl_data; (void)_aidl_reply;
+}
+
+} // namespace
+
+#include <Analyzer.h>
+using android::aidl::Analyzer;
+__attribute__((constructor)) static void addAnalyzer() {
+  Analyzer::installAnalyzer(std::make_unique<Analyzer>("android.aidl.tests.nested.INestedService", "INestedService", &analyzeINestedService));
+}
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/INestedService.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/INestedService.cpp.d
new file mode 100644
index 0000000..117662c
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/INestedService.cpp.d
@@ -0,0 +1,3 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/INestedService.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/nested/INestedService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/nested/ParcelableWithNested.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/ParcelableWithNested.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/ParcelableWithNested.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/ParcelableWithNested.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/ParcelableWithNested.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/ParcelableWithNested.cpp.d
new file mode 100644
index 0000000..6e2e015
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/ParcelableWithNested.cpp.d
@@ -0,0 +1,2 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/nested/ParcelableWithNested.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/nested/ParcelableWithNested.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/EnumUnion.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/EnumUnion.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/EnumUnion.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/EnumUnion.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/EnumUnion.cpp.d
new file mode 100644
index 0000000..dcebde5
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/EnumUnion.cpp.d
@@ -0,0 +1,4 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/EnumUnion.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/unions/EnumUnion.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/UnionInUnion.cpp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/UnionInUnion.cpp
new file mode 100644
index 0000000..578d437
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/UnionInUnion.cpp
@@ -0,0 +1 @@
+// This file is intentionally left blank as placeholder for building an analyzer.
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/UnionInUnion.cpp.d b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/UnionInUnion.cpp.d
new file mode 100644
index 0000000..dd9c00e
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/UnionInUnion.cpp.d
@@ -0,0 +1,5 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-analyzer-source/gen/android/aidl/tests/unions/UnionInUnion.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/unions/UnionInUnion.aidl \
+  system/tools/aidl/tests/android/aidl/tests/unions/EnumUnion.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/timestamp b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/timestamp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-analyzer-source/gen/timestamp
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp
index 75bc6b2..357e7d8 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ArrayOfInterfaces.cpp
@@ -114,6 +114,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IMyInterface::methodWithInterfaces::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -223,6 +224,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IMyInterface::methodWithInterfaces::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinder(&in_iface);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/CircularParcelable.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/CircularParcelable.cpp
new file mode 100644
index 0000000..26b8f44
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/CircularParcelable.cpp
@@ -0,0 +1,44 @@
+#include <android/aidl/tests/CircularParcelable.h>
+
+namespace android {
+namespace aidl {
+namespace tests {
+::android::status_t CircularParcelable::readFromParcel(const ::android::Parcel* _aidl_parcel) {
+  ::android::status_t _aidl_ret_status = ::android::OK;
+  size_t _aidl_start_pos = _aidl_parcel->dataPosition();
+  int32_t _aidl_parcelable_raw_size = 0;
+  _aidl_ret_status = _aidl_parcel->readInt32(&_aidl_parcelable_raw_size);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    return _aidl_ret_status;
+  }
+  if (_aidl_parcelable_raw_size < 4) return ::android::BAD_VALUE;
+  size_t _aidl_parcelable_size = static_cast<size_t>(_aidl_parcelable_raw_size);
+  if (_aidl_start_pos > INT32_MAX - _aidl_parcelable_size) return ::android::BAD_VALUE;
+  if (_aidl_parcel->dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) {
+    _aidl_parcel->setDataPosition(_aidl_start_pos + _aidl_parcelable_size);
+    return _aidl_ret_status;
+  }
+  _aidl_ret_status = _aidl_parcel->readNullableStrongBinder(&testService);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    return _aidl_ret_status;
+  }
+  _aidl_parcel->setDataPosition(_aidl_start_pos + _aidl_parcelable_size);
+  return _aidl_ret_status;
+}
+::android::status_t CircularParcelable::writeToParcel(::android::Parcel* _aidl_parcel) const {
+  ::android::status_t _aidl_ret_status = ::android::OK;
+  auto _aidl_start_pos = _aidl_parcel->dataPosition();
+  _aidl_parcel->writeInt32(0);
+  _aidl_ret_status = _aidl_parcel->writeStrongBinder(testService);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    return _aidl_ret_status;
+  }
+  auto _aidl_end_pos = _aidl_parcel->dataPosition();
+  _aidl_parcel->setDataPosition(_aidl_start_pos);
+  _aidl_parcel->writeInt32(_aidl_end_pos - _aidl_start_pos);
+  _aidl_parcel->setDataPosition(_aidl_end_pos);
+  return _aidl_ret_status;
+}
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/CircularParcelable.cpp.d b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/CircularParcelable.cpp.d
new file mode 100644
index 0000000..1606b92
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/CircularParcelable.cpp.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-source/gen/android/aidl/tests/CircularParcelable.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ICircular.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ICircular.cpp
new file mode 100644
index 0000000..ea7e574
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ICircular.cpp
@@ -0,0 +1,112 @@
+#include <android/aidl/tests/ICircular.h>
+#include <android/aidl/tests/BpCircular.h>
+namespace android {
+namespace aidl {
+namespace tests {
+DO_NOT_DIRECTLY_USE_ME_IMPLEMENT_META_INTERFACE(Circular, "android.aidl.tests.ICircular")
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+#include <android/aidl/tests/BpCircular.h>
+#include <android/aidl/tests/BnCircular.h>
+#include <binder/Parcel.h>
+#include <android-base/macros.h>
+
+namespace android {
+namespace aidl {
+namespace tests {
+
+BpCircular::BpCircular(const ::android::sp<::android::IBinder>& _aidl_impl)
+    : BpInterface<ICircular>(_aidl_impl){
+}
+
+::android::binder::Status BpCircular::GetTestService(::android::sp<::android::aidl::tests::ITestService>* _aidl_return) {
+  ::android::Parcel _aidl_data;
+  _aidl_data.markForBinder(remoteStrong());
+  ::android::Parcel _aidl_reply;
+  ::android::status_t _aidl_ret_status = ::android::OK;
+  ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ICircular::GetTestService::cppClient");
+  _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_ret_status = remote()->transact(BnCircular::TRANSACTION_GetTestService, _aidl_data, &_aidl_reply, 0);
+  if (UNLIKELY(_aidl_ret_status == ::android::UNKNOWN_TRANSACTION && ICircular::getDefaultImpl())) {
+     return ICircular::getDefaultImpl()->GetTestService(_aidl_return);
+  }
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  if (!_aidl_status.isOk()) {
+    return _aidl_status;
+  }
+  _aidl_ret_status = _aidl_reply.readNullableStrongBinder(_aidl_return);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_error:
+  _aidl_status.setFromStatusT(_aidl_ret_status);
+  return _aidl_status;
+}
+
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+#include <android/aidl/tests/BnCircular.h>
+#include <binder/Parcel.h>
+#include <binder/Stability.h>
+
+namespace android {
+namespace aidl {
+namespace tests {
+
+BnCircular::BnCircular()
+{
+  ::android::internal::Stability::markCompilationUnit(this);
+}
+
+::android::status_t BnCircular::onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) {
+  ::android::status_t _aidl_ret_status = ::android::OK;
+  switch (_aidl_code) {
+  case BnCircular::TRANSACTION_GetTestService:
+  {
+    ::android::sp<::android::aidl::tests::ITestService> _aidl_return;
+    if (!(_aidl_data.checkInterface(this))) {
+      _aidl_ret_status = ::android::BAD_TYPE;
+      break;
+    }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ICircular::GetTestService::cppServer");
+    ::android::binder::Status _aidl_status(GetTestService(&_aidl_return));
+    _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
+    if (((_aidl_ret_status) != (::android::OK))) {
+      break;
+    }
+    if (!_aidl_status.isOk()) {
+      break;
+    }
+    _aidl_ret_status = _aidl_reply->writeStrongBinder(_aidl_return);
+    if (((_aidl_ret_status) != (::android::OK))) {
+      break;
+    }
+  }
+  break;
+  default:
+  {
+    _aidl_ret_status = ::android::BBinder::onTransact(_aidl_code, _aidl_data, _aidl_reply, _aidl_flags);
+  }
+  break;
+  }
+  if (_aidl_ret_status == ::android::UNEXPECTED_NULL) {
+    _aidl_ret_status = ::android::binder::Status::fromExceptionCode(::android::binder::Status::EX_NULL_POINTER).writeOverParcel(_aidl_reply);
+  }
+  return _aidl_ret_status;
+}
+
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ICircular.cpp.d b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ICircular.cpp.d
new file mode 100644
index 0000000..eb56011
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ICircular.cpp.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-cpp-source/gen/android/aidl/tests/ICircular.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/INamedCallback.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/INamedCallback.cpp
index 1bc05dd..c212d54 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/INamedCallback.cpp
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/INamedCallback.cpp
@@ -26,6 +26,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::INamedCallback::GetName::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -79,6 +80,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::INamedCallback::GetName::cppServer");
     ::android::binder::Status _aidl_status(GetName(&_aidl_return));
     _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
     if (((_aidl_ret_status) != (::android::OK))) {
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/INewName.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/INewName.cpp
index b308856..955d36f 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/INewName.cpp
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/INewName.cpp
@@ -26,6 +26,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::INewName::RealName::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -79,6 +80,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::INewName::RealName::cppServer");
     ::android::binder::Status _aidl_status(RealName(&_aidl_return));
     _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
     if (((_aidl_ret_status) != (::android::OK))) {
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/IOldName.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/IOldName.cpp
index ee04a4e..0e99b42 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/IOldName.cpp
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/IOldName.cpp
@@ -26,6 +26,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IOldName::RealName::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -79,6 +80,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IOldName::RealName::cppServer");
     ::android::binder::Status _aidl_status(RealName(&_aidl_return));
     _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
     if (((_aidl_ret_status) != (::android::OK))) {
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp
index 326b094..4ca3e09 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp
@@ -39,6 +39,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::UnimplementedMethod::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -77,6 +78,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::Deprecated::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -107,6 +109,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::TestOneway::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -130,6 +133,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatBoolean::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -168,6 +172,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatByte::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -206,6 +211,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatChar::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -244,6 +250,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatInt::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -282,6 +289,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatLong::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -320,6 +328,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatFloat::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -358,6 +367,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatDouble::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -396,6 +406,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatString::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -434,6 +445,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatByteEnum::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -472,6 +484,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatIntEnum::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -510,6 +523,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatLongEnum::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -548,6 +562,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseBoolean::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -594,6 +609,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseByte::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -640,6 +656,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseChar::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -686,6 +703,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseInt::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -732,6 +750,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseLong::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -778,6 +797,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseFloat::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -824,6 +844,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseDouble::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -870,6 +891,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseString::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -916,6 +938,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseByteEnum::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -962,6 +985,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseIntEnum::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1008,6 +1032,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseLongEnum::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1054,6 +1079,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetOtherTestService::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1085,6 +1111,49 @@
   return _aidl_status;
 }
 
+::android::binder::Status BpTestService::SetOtherTestService(const ::android::String16& name, const ::android::sp<::android::aidl::tests::INamedCallback>& service, bool* _aidl_return) {
+  ::android::Parcel _aidl_data;
+  _aidl_data.markSensitive();
+  _aidl_data.markForBinder(remoteStrong());
+  ::android::Parcel _aidl_reply;
+  ::android::status_t _aidl_ret_status = ::android::OK;
+  ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::SetOtherTestService::cppClient");
+  _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_ret_status = _aidl_data.writeString16(name);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_ret_status = _aidl_data.writeStrongBinder(service);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_ret_status = remote()->transact(BnTestService::TRANSACTION_SetOtherTestService, _aidl_data, &_aidl_reply, ::android::IBinder::FLAG_CLEAR_BUF);
+  if (UNLIKELY(_aidl_ret_status == ::android::UNKNOWN_TRANSACTION && ITestService::getDefaultImpl())) {
+     return ITestService::getDefaultImpl()->SetOtherTestService(name, service, _aidl_return);
+  }
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  if (!_aidl_status.isOk()) {
+    return _aidl_status;
+  }
+  _aidl_ret_status = _aidl_reply.readBool(_aidl_return);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_error:
+  _aidl_status.setFromStatusT(_aidl_ret_status);
+  return _aidl_status;
+}
+
 ::android::binder::Status BpTestService::VerifyName(const ::android::sp<::android::aidl::tests::INamedCallback>& service, const ::android::String16& name, bool* _aidl_return) {
   ::android::Parcel _aidl_data;
   _aidl_data.markSensitive();
@@ -1092,6 +1161,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::VerifyName::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1134,6 +1204,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetInterfaceArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1172,6 +1243,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::VerifyNamesWithInterfaceArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1214,6 +1286,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetNullableInterfaceArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1252,6 +1325,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::VerifyNamesWithNullableInterfaceArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1294,6 +1368,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetInterfaceList::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1332,6 +1407,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::VerifyNamesWithInterfaceList::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1374,6 +1450,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseStringList::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1416,6 +1493,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatParcelFileDescriptor::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1454,6 +1532,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseParcelFileDescriptorArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1500,6 +1579,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ThrowServiceException::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1534,6 +1614,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableIntArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1572,6 +1653,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableByteEnumArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1610,6 +1692,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableIntEnumArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1648,6 +1731,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableLongEnumArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1686,6 +1770,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableString::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1724,6 +1809,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableStringList::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1762,6 +1848,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableParcelable::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1800,6 +1887,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableParcelableArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1838,6 +1926,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableParcelableList::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1876,6 +1965,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::TakesAnIBinder::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1910,6 +2000,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::TakesANullableIBinder::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1944,6 +2035,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::TakesAnIBinderList::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -1978,6 +2070,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::TakesANullableIBinderList::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2012,6 +2105,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatUtf8CppString::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2050,6 +2144,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableUtf8CppString::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2088,6 +2183,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseUtf8CppString::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2134,6 +2230,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseNullableUtf8CppString::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2180,6 +2277,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseUtf8CppStringList::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2222,6 +2320,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetCallback::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2260,6 +2359,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::FillOutStructuredParcelable::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2298,6 +2398,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatExtendableParcelable::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2336,6 +2437,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseList::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2374,6 +2476,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseIBinderArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2420,6 +2523,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseNullableIBinderArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2466,6 +2570,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetOldNameInterface::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2500,6 +2605,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetNewNameInterface::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2534,6 +2640,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetUnionTags::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2572,6 +2679,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetCppJavaTests::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2606,6 +2714,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::getBackendType::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -2633,6 +2742,45 @@
   return _aidl_status;
 }
 
+::android::binder::Status BpTestService::GetCircular(::android::aidl::tests::CircularParcelable* cp, ::android::sp<::android::aidl::tests::ICircular>* _aidl_return) {
+  ::android::Parcel _aidl_data;
+  _aidl_data.markSensitive();
+  _aidl_data.markForBinder(remoteStrong());
+  ::android::Parcel _aidl_reply;
+  ::android::status_t _aidl_ret_status = ::android::OK;
+  ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetCircular::cppClient");
+  _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_ret_status = remote()->transact(BnTestService::TRANSACTION_GetCircular, _aidl_data, &_aidl_reply, ::android::IBinder::FLAG_CLEAR_BUF);
+  if (UNLIKELY(_aidl_ret_status == ::android::UNKNOWN_TRANSACTION && ITestService::getDefaultImpl())) {
+     return ITestService::getDefaultImpl()->GetCircular(cp, _aidl_return);
+  }
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  if (!_aidl_status.isOk()) {
+    return _aidl_status;
+  }
+  _aidl_ret_status = _aidl_reply.readStrongBinder(_aidl_return);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_ret_status = _aidl_reply.readParcelable(cp);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    goto _aidl_error;
+  }
+  _aidl_error:
+  _aidl_status.setFromStatusT(_aidl_ret_status);
+  return _aidl_status;
+}
+
 }  // namespace tests
 }  // namespace aidl
 }  // namespace android
@@ -2663,6 +2811,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::UnimplementedMethod::cppServer");
     _aidl_ret_status = _aidl_data.readInt32(&in_arg);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -2691,6 +2840,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::Deprecated::cppServer");
     ::android::binder::Status _aidl_status(Deprecated());
     _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
     if (((_aidl_ret_status) != (::android::OK))) {
@@ -2707,6 +2857,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::TestOneway::cppServer");
     ::android::binder::Status _aidl_status(TestOneway());
   }
   break;
@@ -2718,6 +2869,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatBoolean::cppServer");
     _aidl_ret_status = _aidl_data.readBool(&in_token);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -2748,6 +2900,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatByte::cppServer");
     _aidl_ret_status = _aidl_data.readByte(&in_token);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -2778,6 +2931,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatChar::cppServer");
     _aidl_ret_status = _aidl_data.readChar(&in_token);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -2808,6 +2962,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatInt::cppServer");
     _aidl_ret_status = _aidl_data.readInt32(&in_token);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -2838,6 +2993,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatLong::cppServer");
     _aidl_ret_status = _aidl_data.readInt64(&in_token);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -2868,6 +3024,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatFloat::cppServer");
     _aidl_ret_status = _aidl_data.readFloat(&in_token);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -2898,6 +3055,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatDouble::cppServer");
     _aidl_ret_status = _aidl_data.readDouble(&in_token);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -2928,6 +3086,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatString::cppServer");
     _aidl_ret_status = _aidl_data.readString16(&in_token);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -2958,6 +3117,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatByteEnum::cppServer");
     _aidl_ret_status = _aidl_data.readByte(reinterpret_cast<int8_t *>(&in_token));
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -2988,6 +3148,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatIntEnum::cppServer");
     _aidl_ret_status = _aidl_data.readInt32(reinterpret_cast<int32_t *>(&in_token));
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3018,6 +3179,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatLongEnum::cppServer");
     _aidl_ret_status = _aidl_data.readInt64(reinterpret_cast<int64_t *>(&in_token));
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3049,6 +3211,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseBoolean::cppServer");
     _aidl_ret_status = _aidl_data.readBoolVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3088,6 +3251,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseByte::cppServer");
     _aidl_ret_status = _aidl_data.readByteVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3127,6 +3291,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseChar::cppServer");
     _aidl_ret_status = _aidl_data.readCharVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3166,6 +3331,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseInt::cppServer");
     _aidl_ret_status = _aidl_data.readInt32Vector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3205,6 +3371,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseLong::cppServer");
     _aidl_ret_status = _aidl_data.readInt64Vector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3244,6 +3411,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseFloat::cppServer");
     _aidl_ret_status = _aidl_data.readFloatVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3283,6 +3451,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseDouble::cppServer");
     _aidl_ret_status = _aidl_data.readDoubleVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3322,6 +3491,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseString::cppServer");
     _aidl_ret_status = _aidl_data.readString16Vector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3361,6 +3531,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseByteEnum::cppServer");
     _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3400,6 +3571,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseIntEnum::cppServer");
     _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3439,6 +3611,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseLongEnum::cppServer");
     _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3477,6 +3650,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetOtherTestService::cppServer");
     _aidl_ret_status = _aidl_data.readString16(&in_name);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3499,6 +3673,42 @@
     }
   }
   break;
+  case BnTestService::TRANSACTION_SetOtherTestService:
+  {
+    ::android::String16 in_name;
+    ::android::sp<::android::aidl::tests::INamedCallback> in_service;
+    bool _aidl_return;
+    if (!(_aidl_data.checkInterface(this))) {
+      _aidl_ret_status = ::android::BAD_TYPE;
+      break;
+    }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::SetOtherTestService::cppServer");
+    _aidl_ret_status = _aidl_data.readString16(&in_name);
+    if (((_aidl_ret_status) != (::android::OK))) {
+      break;
+    }
+    _aidl_ret_status = _aidl_data.readStrongBinder(&in_service);
+    if (((_aidl_ret_status) != (::android::OK))) {
+      break;
+    }
+    if (auto st = _aidl_data.enforceNoDataAvail(); !st.isOk()) {
+      _aidl_ret_status = st.writeToParcel(_aidl_reply);
+      break;
+    }
+    ::android::binder::Status _aidl_status(SetOtherTestService(in_name, in_service, &_aidl_return));
+    _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
+    if (((_aidl_ret_status) != (::android::OK))) {
+      break;
+    }
+    if (!_aidl_status.isOk()) {
+      break;
+    }
+    _aidl_ret_status = _aidl_reply->writeBool(_aidl_return);
+    if (((_aidl_ret_status) != (::android::OK))) {
+      break;
+    }
+  }
+  break;
   case BnTestService::TRANSACTION_VerifyName:
   {
     ::android::sp<::android::aidl::tests::INamedCallback> in_service;
@@ -3508,6 +3718,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::VerifyName::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinder(&in_service);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3542,6 +3753,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetInterfaceArray::cppServer");
     _aidl_ret_status = _aidl_data.readString16Vector(&in_names);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3573,6 +3785,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::VerifyNamesWithInterfaceArray::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_services);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3607,6 +3820,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetNullableInterfaceArray::cppServer");
     _aidl_ret_status = _aidl_data.readString16Vector(&in_names);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3638,6 +3852,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::VerifyNamesWithNullableInterfaceArray::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_services);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3672,6 +3887,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetInterfaceList::cppServer");
     _aidl_ret_status = _aidl_data.readString16Vector(&in_names);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3703,6 +3919,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::VerifyNamesWithInterfaceList::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_services);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3738,6 +3955,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseStringList::cppServer");
     _aidl_ret_status = _aidl_data.readString16Vector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3772,6 +3990,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatParcelFileDescriptor::cppServer");
     _aidl_ret_status = _aidl_data.readParcelable(&in_read);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3803,6 +4022,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseParcelFileDescriptorArray::cppServer");
     _aidl_ret_status = _aidl_data.readParcelableVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3840,6 +4060,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ThrowServiceException::cppServer");
     _aidl_ret_status = _aidl_data.readInt32(&in_code);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3866,6 +4087,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableIntArray::cppServer");
     _aidl_ret_status = _aidl_data.readInt32Vector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3896,6 +4118,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableByteEnumArray::cppServer");
     _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3926,6 +4149,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableIntEnumArray::cppServer");
     _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3956,6 +4180,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableLongEnumArray::cppServer");
     _aidl_ret_status = _aidl_data.readEnumVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -3986,6 +4211,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableString::cppServer");
     _aidl_ret_status = _aidl_data.readString16(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4016,6 +4242,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableStringList::cppServer");
     _aidl_ret_status = _aidl_data.readString16Vector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4046,6 +4273,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableParcelable::cppServer");
     _aidl_ret_status = _aidl_data.readParcelable(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4076,6 +4304,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableParcelableArray::cppServer");
     _aidl_ret_status = _aidl_data.readParcelableVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4106,6 +4335,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableParcelableList::cppServer");
     _aidl_ret_status = _aidl_data.readParcelableVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4135,6 +4365,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::TakesAnIBinder::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinder(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4160,6 +4391,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::TakesANullableIBinder::cppServer");
     _aidl_ret_status = _aidl_data.readNullableStrongBinder(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4185,6 +4417,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::TakesAnIBinderList::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4210,6 +4443,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::TakesANullableIBinderList::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4236,6 +4470,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatUtf8CppString::cppServer");
     _aidl_ret_status = _aidl_data.readUtf8FromUtf16(&in_token);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4266,6 +4501,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatNullableUtf8CppString::cppServer");
     _aidl_ret_status = _aidl_data.readUtf8FromUtf16(&in_token);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4297,6 +4533,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseUtf8CppString::cppServer");
     _aidl_ret_status = _aidl_data.readUtf8VectorFromUtf16Vector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4336,6 +4573,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseNullableUtf8CppString::cppServer");
     _aidl_ret_status = _aidl_data.readUtf8VectorFromUtf16Vector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4375,6 +4613,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseUtf8CppStringList::cppServer");
     _aidl_ret_status = _aidl_data.readUtf8VectorFromUtf16Vector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4409,6 +4648,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetCallback::cppServer");
     _aidl_ret_status = _aidl_data.readBool(&in_return_null);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4438,6 +4678,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::FillOutStructuredParcelable::cppServer");
     _aidl_ret_status = _aidl_data.readParcelable(&in_parcel);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4468,6 +4709,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::RepeatExtendableParcelable::cppServer");
     _aidl_ret_status = _aidl_data.readParcelable(&in_ep);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4498,6 +4740,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseList::cppServer");
     _aidl_ret_status = _aidl_data.readParcelable(&in_list);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4529,6 +4772,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseIBinderArray::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4568,6 +4812,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::ReverseNullableIBinderArray::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4605,6 +4850,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetOldNameInterface::cppServer");
     ::android::binder::Status _aidl_status(GetOldNameInterface(&_aidl_return));
     _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
     if (((_aidl_ret_status) != (::android::OK))) {
@@ -4626,6 +4872,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetNewNameInterface::cppServer");
     ::android::binder::Status _aidl_status(GetNewNameInterface(&_aidl_return));
     _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
     if (((_aidl_ret_status) != (::android::OK))) {
@@ -4648,6 +4895,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetUnionTags::cppServer");
     _aidl_ret_status = _aidl_data.readParcelableVector(&in_input);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -4677,6 +4925,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetCppJavaTests::cppServer");
     ::android::binder::Status _aidl_status(GetCppJavaTests(&_aidl_return));
     _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
     if (((_aidl_ret_status) != (::android::OK))) {
@@ -4698,6 +4947,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::getBackendType::cppServer");
     ::android::binder::Status _aidl_status(getBackendType(&_aidl_return));
     _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
     if (((_aidl_ret_status) != (::android::OK))) {
@@ -4712,6 +4962,37 @@
     }
   }
   break;
+  case BnTestService::TRANSACTION_GetCircular:
+  {
+    ::android::aidl::tests::CircularParcelable out_cp;
+    ::android::sp<::android::aidl::tests::ICircular> _aidl_return;
+    if (!(_aidl_data.checkInterface(this))) {
+      _aidl_ret_status = ::android::BAD_TYPE;
+      break;
+    }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ITestService::GetCircular::cppServer");
+    if (auto st = _aidl_data.enforceNoDataAvail(); !st.isOk()) {
+      _aidl_ret_status = st.writeToParcel(_aidl_reply);
+      break;
+    }
+    ::android::binder::Status _aidl_status(GetCircular(&out_cp, &_aidl_return));
+    _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
+    if (((_aidl_ret_status) != (::android::OK))) {
+      break;
+    }
+    if (!_aidl_status.isOk()) {
+      break;
+    }
+    _aidl_ret_status = _aidl_reply->writeStrongBinder(_aidl_return);
+    if (((_aidl_ret_status) != (::android::OK))) {
+      break;
+    }
+    _aidl_ret_status = _aidl_reply->writeParcelable(out_cp);
+    if (((_aidl_ret_status) != (::android::OK))) {
+      break;
+    }
+  }
+  break;
   default:
   {
     _aidl_ret_status = ::android::BBinder::onTransact(_aidl_code, _aidl_data, _aidl_reply, _aidl_flags);
@@ -5009,3 +5290,151 @@
 }  // namespace tests
 }  // namespace aidl
 }  // namespace android
+#include <android/aidl/tests/ITestService.h>
+#include <android/aidl/tests/ITestService.h>
+namespace android {
+namespace aidl {
+namespace tests {
+DO_NOT_DIRECTLY_USE_ME_IMPLEMENT_META_NESTED_INTERFACE(ITestService::CompilerChecks, Foo, "android.aidl.tests.ITestService.CompilerChecks.Foo")
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+#include <android/aidl/tests/ITestService.h>
+#include <android/aidl/tests/ITestService.h>
+#include <binder/Parcel.h>
+#include <android-base/macros.h>
+
+namespace android {
+namespace aidl {
+namespace tests {
+
+ITestService::CompilerChecks::BpFoo::BpFoo(const ::android::sp<::android::IBinder>& _aidl_impl)
+    : BpInterface<IFoo>(_aidl_impl){
+}
+
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+#include <android/aidl/tests/ITestService.h>
+#include <binder/Parcel.h>
+#include <binder/Stability.h>
+
+namespace android {
+namespace aidl {
+namespace tests {
+
+ITestService::CompilerChecks::BnFoo::BnFoo()
+{
+  ::android::internal::Stability::markCompilationUnit(this);
+}
+
+::android::status_t ITestService::CompilerChecks::BnFoo::onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) {
+  ::android::status_t _aidl_ret_status = ::android::OK;
+  switch (_aidl_code) {
+  default:
+  {
+    _aidl_ret_status = ::android::BBinder::onTransact(_aidl_code, _aidl_data, _aidl_reply, _aidl_flags);
+  }
+  break;
+  }
+  if (_aidl_ret_status == ::android::UNEXPECTED_NULL) {
+    _aidl_ret_status = ::android::binder::Status::fromExceptionCode(::android::binder::Status::EX_NULL_POINTER).writeOverParcel(_aidl_reply);
+  }
+  return _aidl_ret_status;
+}
+
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+#include <android/aidl/tests/ITestService.h>
+
+namespace android {
+namespace aidl {
+namespace tests {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+::android::status_t ITestService::CompilerChecks::HasDeprecated::readFromParcel(const ::android::Parcel* _aidl_parcel) {
+  ::android::status_t _aidl_ret_status = ::android::OK;
+  size_t _aidl_start_pos = _aidl_parcel->dataPosition();
+  int32_t _aidl_parcelable_raw_size = 0;
+  _aidl_ret_status = _aidl_parcel->readInt32(&_aidl_parcelable_raw_size);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    return _aidl_ret_status;
+  }
+  if (_aidl_parcelable_raw_size < 4) return ::android::BAD_VALUE;
+  size_t _aidl_parcelable_size = static_cast<size_t>(_aidl_parcelable_raw_size);
+  if (_aidl_start_pos > INT32_MAX - _aidl_parcelable_size) return ::android::BAD_VALUE;
+  if (_aidl_parcel->dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) {
+    _aidl_parcel->setDataPosition(_aidl_start_pos + _aidl_parcelable_size);
+    return _aidl_ret_status;
+  }
+  _aidl_ret_status = _aidl_parcel->readInt32(&deprecated);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    return _aidl_ret_status;
+  }
+  _aidl_parcel->setDataPosition(_aidl_start_pos + _aidl_parcelable_size);
+  return _aidl_ret_status;
+}
+::android::status_t ITestService::CompilerChecks::HasDeprecated::writeToParcel(::android::Parcel* _aidl_parcel) const {
+  ::android::status_t _aidl_ret_status = ::android::OK;
+  auto _aidl_start_pos = _aidl_parcel->dataPosition();
+  _aidl_parcel->writeInt32(0);
+  _aidl_ret_status = _aidl_parcel->writeInt32(deprecated);
+  if (((_aidl_ret_status) != (::android::OK))) {
+    return _aidl_ret_status;
+  }
+  auto _aidl_end_pos = _aidl_parcel->dataPosition();
+  _aidl_parcel->setDataPosition(_aidl_start_pos);
+  _aidl_parcel->writeInt32(_aidl_end_pos - _aidl_start_pos);
+  _aidl_parcel->setDataPosition(_aidl_end_pos);
+  return _aidl_ret_status;
+}
+#pragma clang diagnostic pop
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+#include <android/aidl/tests/ITestService.h>
+
+namespace android {
+namespace aidl {
+namespace tests {
+::android::status_t ITestService::CompilerChecks::UsingHasDeprecated::readFromParcel(const ::android::Parcel* _aidl_parcel) {
+  ::android::status_t _aidl_ret_status;
+  int32_t _aidl_tag;
+  if ((_aidl_ret_status = _aidl_parcel->readInt32(&_aidl_tag)) != ::android::OK) return _aidl_ret_status;
+  switch (static_cast<Tag>(_aidl_tag)) {
+  case n: {
+    int32_t _aidl_value;
+    if ((_aidl_ret_status = _aidl_parcel->readInt32(&_aidl_value)) != ::android::OK) return _aidl_ret_status;
+    if constexpr (std::is_trivially_copyable_v<int32_t>) {
+      set<n>(_aidl_value);
+    } else {
+      // NOLINTNEXTLINE(performance-move-const-arg)
+      set<n>(std::move(_aidl_value));
+    }
+    return ::android::OK; }
+  case m: {
+    ::android::aidl::tests::ITestService::CompilerChecks::HasDeprecated _aidl_value;
+    if ((_aidl_ret_status = _aidl_parcel->readParcelable(&_aidl_value)) != ::android::OK) return _aidl_ret_status;
+    if constexpr (std::is_trivially_copyable_v<::android::aidl::tests::ITestService::CompilerChecks::HasDeprecated>) {
+      set<m>(_aidl_value);
+    } else {
+      // NOLINTNEXTLINE(performance-move-const-arg)
+      set<m>(std::move(_aidl_value));
+    }
+    return ::android::OK; }
+  }
+  return ::android::BAD_VALUE;
+}
+::android::status_t ITestService::CompilerChecks::UsingHasDeprecated::writeToParcel(::android::Parcel* _aidl_parcel) const {
+  ::android::status_t _aidl_ret_status = _aidl_parcel->writeInt32(static_cast<int32_t>(getTag()));
+  if (_aidl_ret_status != ::android::OK) return _aidl_ret_status;
+  switch (getTag()) {
+  case n: return _aidl_parcel->writeInt32(get<n>());
+  case m: return _aidl_parcel->writeParcelable(get<m>());
+  }
+  __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "can't reach here");
+}
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp.d b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp.d
index de66202..89d3a1d 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp.d
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp.d
@@ -2,6 +2,8 @@
   system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
   system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
   system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
   system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
   system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
   system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ListOfInterfaces.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ListOfInterfaces.cpp
index f0c2f4d..949f0f7 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ListOfInterfaces.cpp
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ListOfInterfaces.cpp
@@ -114,6 +114,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IMyInterface::methodWithInterfaces::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -215,6 +216,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IMyInterface::methodWithInterfaces::cppServer");
     _aidl_ret_status = _aidl_data.readStrongBinder(&in_iface);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/nested/INestedService.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/nested/INestedService.cpp
index 01bffc9..7b35c59 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/nested/INestedService.cpp
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/nested/INestedService.cpp
@@ -29,6 +29,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::INestedService::flipStatus::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -66,6 +67,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::INestedService::flipStatusWithCallback::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -126,6 +128,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::INestedService::flipStatus::cppServer");
     _aidl_ret_status = _aidl_data.readParcelable(&in_p);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -156,6 +159,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::INestedService::flipStatusWithCallback::cppServer");
     _aidl_ret_status = _aidl_data.readByte(reinterpret_cast<int8_t *>(&in_status));
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -271,6 +275,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ICallback::done::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -326,6 +331,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ICallback::done::cppServer");
     _aidl_ret_status = _aidl_data.readByte(reinterpret_cast<int8_t *>(&in_status));
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/unions/EnumUnion.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/unions/EnumUnion.cpp
index 0261f25..058fa93 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/unions/EnumUnion.cpp
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/unions/EnumUnion.cpp
@@ -4,6 +4,8 @@
 namespace aidl {
 namespace tests {
 namespace unions {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
 ::android::status_t EnumUnion::readFromParcel(const ::android::Parcel* _aidl_parcel) {
   ::android::status_t _aidl_ret_status;
   int32_t _aidl_tag;
@@ -29,8 +31,6 @@
       set<longEnum>(std::move(_aidl_value));
     }
     return ::android::OK; }
-  #pragma clang diagnostic push
-  #pragma clang diagnostic ignored "-Wdeprecated-declarations"
   case deprecatedField: {
     int32_t _aidl_value;
     if ((_aidl_ret_status = _aidl_parcel->readInt32(&_aidl_value)) != ::android::OK) return _aidl_ret_status;
@@ -41,7 +41,6 @@
       set<deprecatedField>(std::move(_aidl_value));
     }
     return ::android::OK; }
-  #pragma clang diagnostic pop
   }
   return ::android::BAD_VALUE;
 }
@@ -58,6 +57,7 @@
   }
   __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "can't reach here");
 }
+#pragma clang diagnostic pop
 }  // namespace unions
 }  // namespace tests
 }  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ArrayOfInterfaces.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ArrayOfInterfaces.h
index 19b732b..342469e 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ArrayOfInterfaces.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ArrayOfInterfaces.h
@@ -3,11 +3,13 @@
 #include <android/aidl/tests/ArrayOfInterfaces.h>
 #include <android/binder_to_string.h>
 #include <array>
+#include <binder/Delegate.h>
 #include <binder/Enums.h>
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
 #include <cassert>
 #include <cstdint>
 #include <optional>
@@ -58,6 +60,7 @@
   public:
     explicit IEmptyInterfaceDelegator(const ::android::sp<IEmptyInterface> &impl) : _aidl_delegate(impl) {}
 
+    ::android::sp<IEmptyInterface> getImpl() { return _aidl_delegate; }
   private:
     ::android::sp<IEmptyInterface> _aidl_delegate;
   };  // class IEmptyInterfaceDelegator
@@ -96,8 +99,17 @@
   public:
     explicit IMyInterfaceDelegator(const ::android::sp<IMyInterface> &impl) : _aidl_delegate(impl) {}
 
+    ::android::sp<IMyInterface> getImpl() { return _aidl_delegate; }
     ::android::binder::Status methodWithInterfaces(const ::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterface>& iface, const ::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterface>& nullable_iface, const ::std::vector<::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterface>>& iface_array_in, ::std::vector<::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterface>>* iface_array_out, ::std::vector<::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterface>>* iface_array_inout, const ::std::optional<::std::vector<::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterface>>>& nullable_iface_array_in, ::std::optional<::std::vector<::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterface>>>* nullable_iface_array_out, ::std::optional<::std::vector<::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterface>>>* nullable_iface_array_inout, ::std::optional<::std::vector<::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterface>>>* _aidl_return) override {
-      return _aidl_delegate->methodWithInterfaces(iface, nullable_iface, iface_array_in, iface_array_out, iface_array_inout, nullable_iface_array_in, nullable_iface_array_out, nullable_iface_array_inout, _aidl_return);
+      ::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterfaceDelegator> _iface;
+      if (iface) {
+        _iface = ::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterfaceDelegator>::cast(delegate(iface));
+      }
+      ::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterfaceDelegator> _nullable_iface;
+      if (nullable_iface) {
+        _nullable_iface = ::android::sp<::android::aidl::tests::ArrayOfInterfaces::IEmptyInterfaceDelegator>::cast(delegate(nullable_iface));
+      }
+      return _aidl_delegate->methodWithInterfaces(_iface, _nullable_iface, iface_array_in, iface_array_out, iface_array_inout, nullable_iface_array_in, nullable_iface_array_out, nullable_iface_array_inout, _aidl_return);
     }
   private:
     ::android::sp<IMyInterface> _aidl_delegate;
@@ -130,8 +142,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.ArrayOfInterfaces.MyParcelable");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ArrayOfInterfaces.MyParcelable");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -225,8 +237,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.ArrayOfInterfaces.MyUnion");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ArrayOfInterfaces.MyUnion");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -265,8 +277,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.ArrayOfInterfaces");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ArrayOfInterfaces");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnCircular.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnCircular.h
new file mode 100644
index 0000000..c5c2f6e
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnCircular.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include <binder/IInterface.h>
+#include <android/aidl/tests/ICircular.h>
+#include <android/aidl/tests/BnCircular.h>
+#include <android/aidl/tests/BnTestService.h>
+#include <binder/Delegate.h>
+
+
+namespace android {
+namespace aidl {
+namespace tests {
+class BnCircular : public ::android::BnInterface<ICircular> {
+public:
+  static constexpr uint32_t TRANSACTION_GetTestService = ::android::IBinder::FIRST_CALL_TRANSACTION + 0;
+  explicit BnCircular();
+  ::android::status_t onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) override;
+};  // class BnCircular
+
+class ICircularDelegator : public BnCircular {
+public:
+  explicit ICircularDelegator(const ::android::sp<ICircular> &impl) : _aidl_delegate(impl) {}
+
+  ::android::sp<ICircular> getImpl() { return _aidl_delegate; }
+  ::android::binder::Status GetTestService(::android::sp<::android::aidl::tests::ITestService>* _aidl_return) override {
+    auto _status = _aidl_delegate->GetTestService(_aidl_return);
+    if (*_aidl_return) {
+      *_aidl_return = ::android::sp<::android::aidl::tests::ITestServiceDelegator>::cast(delegate(*_aidl_return));
+    }
+    return _status;
+  }
+private:
+  ::android::sp<ICircular> _aidl_delegate;
+};  // class ICircularDelegator
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnCircularParcelable.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnCircularParcelable.h
new file mode 100644
index 0000000..ce72aa3
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnCircularParcelable.h
@@ -0,0 +1 @@
+#error TODO(b/111362593) parcelables do not have bn classes
\ No newline at end of file
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnDeprecated.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnDeprecated.h
index 793a885..def983b 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnDeprecated.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnDeprecated.h
@@ -2,6 +2,9 @@
 
 #include <binder/IInterface.h>
 #include <android/aidl/tests/IDeprecated.h>
+#include <android/aidl/tests/BnDeprecated.h>
+#include <binder/Delegate.h>
+
 
 namespace android {
 namespace aidl {
@@ -16,6 +19,7 @@
 public:
   explicit IDeprecatedDelegator(const ::android::sp<IDeprecated> &impl) : _aidl_delegate(impl) {}
 
+  ::android::sp<IDeprecated> getImpl() { return _aidl_delegate; }
 private:
   ::android::sp<IDeprecated> _aidl_delegate;
 };  // class IDeprecatedDelegator
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnNamedCallback.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnNamedCallback.h
index 6e0ecdb..34cf670 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnNamedCallback.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnNamedCallback.h
@@ -2,6 +2,9 @@
 
 #include <binder/IInterface.h>
 #include <android/aidl/tests/INamedCallback.h>
+#include <android/aidl/tests/BnNamedCallback.h>
+#include <binder/Delegate.h>
+
 
 namespace android {
 namespace aidl {
@@ -17,6 +20,7 @@
 public:
   explicit INamedCallbackDelegator(const ::android::sp<INamedCallback> &impl) : _aidl_delegate(impl) {}
 
+  ::android::sp<INamedCallback> getImpl() { return _aidl_delegate; }
   ::android::binder::Status GetName(::android::String16* _aidl_return) override {
     return _aidl_delegate->GetName(_aidl_return);
   }
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnNewName.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnNewName.h
index 2afae99..0ce67e2 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnNewName.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnNewName.h
@@ -2,6 +2,9 @@
 
 #include <binder/IInterface.h>
 #include <android/aidl/tests/INewName.h>
+#include <android/aidl/tests/BnNewName.h>
+#include <binder/Delegate.h>
+
 
 namespace android {
 namespace aidl {
@@ -17,6 +20,7 @@
 public:
   explicit INewNameDelegator(const ::android::sp<INewName> &impl) : _aidl_delegate(impl) {}
 
+  ::android::sp<INewName> getImpl() { return _aidl_delegate; }
   ::android::binder::Status RealName(::android::String16* _aidl_return) override {
     return _aidl_delegate->RealName(_aidl_return);
   }
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnOldName.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnOldName.h
index 8679996..17dd344 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnOldName.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnOldName.h
@@ -2,6 +2,9 @@
 
 #include <binder/IInterface.h>
 #include <android/aidl/tests/IOldName.h>
+#include <android/aidl/tests/BnOldName.h>
+#include <binder/Delegate.h>
+
 
 namespace android {
 namespace aidl {
@@ -17,6 +20,7 @@
 public:
   explicit IOldNameDelegator(const ::android::sp<IOldName> &impl) : _aidl_delegate(impl) {}
 
+  ::android::sp<IOldName> getImpl() { return _aidl_delegate; }
   ::android::binder::Status RealName(::android::String16* _aidl_return) override {
     return _aidl_delegate->RealName(_aidl_return);
   }
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnTestService.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnTestService.h
index d4bd2d2..e1c8e13 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnTestService.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnTestService.h
@@ -2,6 +2,14 @@
 
 #include <binder/IInterface.h>
 #include <android/aidl/tests/ITestService.h>
+#include <android/aidl/tests/BnCircular.h>
+#include <android/aidl/tests/BnNamedCallback.h>
+#include <android/aidl/tests/BnNewName.h>
+#include <android/aidl/tests/BnOldName.h>
+#include <android/aidl/tests/BnTestService.h>
+#include <android/aidl/tests/ITestService.h>
+#include <binder/Delegate.h>
+
 
 namespace android {
 namespace aidl {
@@ -34,46 +42,48 @@
   static constexpr uint32_t TRANSACTION_ReverseIntEnum = ::android::IBinder::FIRST_CALL_TRANSACTION + 23;
   static constexpr uint32_t TRANSACTION_ReverseLongEnum = ::android::IBinder::FIRST_CALL_TRANSACTION + 24;
   static constexpr uint32_t TRANSACTION_GetOtherTestService = ::android::IBinder::FIRST_CALL_TRANSACTION + 25;
-  static constexpr uint32_t TRANSACTION_VerifyName = ::android::IBinder::FIRST_CALL_TRANSACTION + 26;
-  static constexpr uint32_t TRANSACTION_GetInterfaceArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 27;
-  static constexpr uint32_t TRANSACTION_VerifyNamesWithInterfaceArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 28;
-  static constexpr uint32_t TRANSACTION_GetNullableInterfaceArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 29;
-  static constexpr uint32_t TRANSACTION_VerifyNamesWithNullableInterfaceArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 30;
-  static constexpr uint32_t TRANSACTION_GetInterfaceList = ::android::IBinder::FIRST_CALL_TRANSACTION + 31;
-  static constexpr uint32_t TRANSACTION_VerifyNamesWithInterfaceList = ::android::IBinder::FIRST_CALL_TRANSACTION + 32;
-  static constexpr uint32_t TRANSACTION_ReverseStringList = ::android::IBinder::FIRST_CALL_TRANSACTION + 33;
-  static constexpr uint32_t TRANSACTION_RepeatParcelFileDescriptor = ::android::IBinder::FIRST_CALL_TRANSACTION + 34;
-  static constexpr uint32_t TRANSACTION_ReverseParcelFileDescriptorArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 35;
-  static constexpr uint32_t TRANSACTION_ThrowServiceException = ::android::IBinder::FIRST_CALL_TRANSACTION + 36;
-  static constexpr uint32_t TRANSACTION_RepeatNullableIntArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 37;
-  static constexpr uint32_t TRANSACTION_RepeatNullableByteEnumArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 38;
-  static constexpr uint32_t TRANSACTION_RepeatNullableIntEnumArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 39;
-  static constexpr uint32_t TRANSACTION_RepeatNullableLongEnumArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 40;
-  static constexpr uint32_t TRANSACTION_RepeatNullableString = ::android::IBinder::FIRST_CALL_TRANSACTION + 41;
-  static constexpr uint32_t TRANSACTION_RepeatNullableStringList = ::android::IBinder::FIRST_CALL_TRANSACTION + 42;
-  static constexpr uint32_t TRANSACTION_RepeatNullableParcelable = ::android::IBinder::FIRST_CALL_TRANSACTION + 43;
-  static constexpr uint32_t TRANSACTION_RepeatNullableParcelableArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 44;
-  static constexpr uint32_t TRANSACTION_RepeatNullableParcelableList = ::android::IBinder::FIRST_CALL_TRANSACTION + 45;
-  static constexpr uint32_t TRANSACTION_TakesAnIBinder = ::android::IBinder::FIRST_CALL_TRANSACTION + 46;
-  static constexpr uint32_t TRANSACTION_TakesANullableIBinder = ::android::IBinder::FIRST_CALL_TRANSACTION + 47;
-  static constexpr uint32_t TRANSACTION_TakesAnIBinderList = ::android::IBinder::FIRST_CALL_TRANSACTION + 48;
-  static constexpr uint32_t TRANSACTION_TakesANullableIBinderList = ::android::IBinder::FIRST_CALL_TRANSACTION + 49;
-  static constexpr uint32_t TRANSACTION_RepeatUtf8CppString = ::android::IBinder::FIRST_CALL_TRANSACTION + 50;
-  static constexpr uint32_t TRANSACTION_RepeatNullableUtf8CppString = ::android::IBinder::FIRST_CALL_TRANSACTION + 51;
-  static constexpr uint32_t TRANSACTION_ReverseUtf8CppString = ::android::IBinder::FIRST_CALL_TRANSACTION + 52;
-  static constexpr uint32_t TRANSACTION_ReverseNullableUtf8CppString = ::android::IBinder::FIRST_CALL_TRANSACTION + 53;
-  static constexpr uint32_t TRANSACTION_ReverseUtf8CppStringList = ::android::IBinder::FIRST_CALL_TRANSACTION + 54;
-  static constexpr uint32_t TRANSACTION_GetCallback = ::android::IBinder::FIRST_CALL_TRANSACTION + 55;
-  static constexpr uint32_t TRANSACTION_FillOutStructuredParcelable = ::android::IBinder::FIRST_CALL_TRANSACTION + 56;
-  static constexpr uint32_t TRANSACTION_RepeatExtendableParcelable = ::android::IBinder::FIRST_CALL_TRANSACTION + 57;
-  static constexpr uint32_t TRANSACTION_ReverseList = ::android::IBinder::FIRST_CALL_TRANSACTION + 58;
-  static constexpr uint32_t TRANSACTION_ReverseIBinderArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 59;
-  static constexpr uint32_t TRANSACTION_ReverseNullableIBinderArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 60;
-  static constexpr uint32_t TRANSACTION_GetOldNameInterface = ::android::IBinder::FIRST_CALL_TRANSACTION + 61;
-  static constexpr uint32_t TRANSACTION_GetNewNameInterface = ::android::IBinder::FIRST_CALL_TRANSACTION + 62;
-  static constexpr uint32_t TRANSACTION_GetUnionTags = ::android::IBinder::FIRST_CALL_TRANSACTION + 63;
-  static constexpr uint32_t TRANSACTION_GetCppJavaTests = ::android::IBinder::FIRST_CALL_TRANSACTION + 64;
-  static constexpr uint32_t TRANSACTION_getBackendType = ::android::IBinder::FIRST_CALL_TRANSACTION + 65;
+  static constexpr uint32_t TRANSACTION_SetOtherTestService = ::android::IBinder::FIRST_CALL_TRANSACTION + 26;
+  static constexpr uint32_t TRANSACTION_VerifyName = ::android::IBinder::FIRST_CALL_TRANSACTION + 27;
+  static constexpr uint32_t TRANSACTION_GetInterfaceArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 28;
+  static constexpr uint32_t TRANSACTION_VerifyNamesWithInterfaceArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 29;
+  static constexpr uint32_t TRANSACTION_GetNullableInterfaceArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 30;
+  static constexpr uint32_t TRANSACTION_VerifyNamesWithNullableInterfaceArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 31;
+  static constexpr uint32_t TRANSACTION_GetInterfaceList = ::android::IBinder::FIRST_CALL_TRANSACTION + 32;
+  static constexpr uint32_t TRANSACTION_VerifyNamesWithInterfaceList = ::android::IBinder::FIRST_CALL_TRANSACTION + 33;
+  static constexpr uint32_t TRANSACTION_ReverseStringList = ::android::IBinder::FIRST_CALL_TRANSACTION + 34;
+  static constexpr uint32_t TRANSACTION_RepeatParcelFileDescriptor = ::android::IBinder::FIRST_CALL_TRANSACTION + 35;
+  static constexpr uint32_t TRANSACTION_ReverseParcelFileDescriptorArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 36;
+  static constexpr uint32_t TRANSACTION_ThrowServiceException = ::android::IBinder::FIRST_CALL_TRANSACTION + 37;
+  static constexpr uint32_t TRANSACTION_RepeatNullableIntArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 38;
+  static constexpr uint32_t TRANSACTION_RepeatNullableByteEnumArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 39;
+  static constexpr uint32_t TRANSACTION_RepeatNullableIntEnumArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 40;
+  static constexpr uint32_t TRANSACTION_RepeatNullableLongEnumArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 41;
+  static constexpr uint32_t TRANSACTION_RepeatNullableString = ::android::IBinder::FIRST_CALL_TRANSACTION + 42;
+  static constexpr uint32_t TRANSACTION_RepeatNullableStringList = ::android::IBinder::FIRST_CALL_TRANSACTION + 43;
+  static constexpr uint32_t TRANSACTION_RepeatNullableParcelable = ::android::IBinder::FIRST_CALL_TRANSACTION + 44;
+  static constexpr uint32_t TRANSACTION_RepeatNullableParcelableArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 45;
+  static constexpr uint32_t TRANSACTION_RepeatNullableParcelableList = ::android::IBinder::FIRST_CALL_TRANSACTION + 46;
+  static constexpr uint32_t TRANSACTION_TakesAnIBinder = ::android::IBinder::FIRST_CALL_TRANSACTION + 47;
+  static constexpr uint32_t TRANSACTION_TakesANullableIBinder = ::android::IBinder::FIRST_CALL_TRANSACTION + 48;
+  static constexpr uint32_t TRANSACTION_TakesAnIBinderList = ::android::IBinder::FIRST_CALL_TRANSACTION + 49;
+  static constexpr uint32_t TRANSACTION_TakesANullableIBinderList = ::android::IBinder::FIRST_CALL_TRANSACTION + 50;
+  static constexpr uint32_t TRANSACTION_RepeatUtf8CppString = ::android::IBinder::FIRST_CALL_TRANSACTION + 51;
+  static constexpr uint32_t TRANSACTION_RepeatNullableUtf8CppString = ::android::IBinder::FIRST_CALL_TRANSACTION + 52;
+  static constexpr uint32_t TRANSACTION_ReverseUtf8CppString = ::android::IBinder::FIRST_CALL_TRANSACTION + 53;
+  static constexpr uint32_t TRANSACTION_ReverseNullableUtf8CppString = ::android::IBinder::FIRST_CALL_TRANSACTION + 54;
+  static constexpr uint32_t TRANSACTION_ReverseUtf8CppStringList = ::android::IBinder::FIRST_CALL_TRANSACTION + 55;
+  static constexpr uint32_t TRANSACTION_GetCallback = ::android::IBinder::FIRST_CALL_TRANSACTION + 56;
+  static constexpr uint32_t TRANSACTION_FillOutStructuredParcelable = ::android::IBinder::FIRST_CALL_TRANSACTION + 57;
+  static constexpr uint32_t TRANSACTION_RepeatExtendableParcelable = ::android::IBinder::FIRST_CALL_TRANSACTION + 58;
+  static constexpr uint32_t TRANSACTION_ReverseList = ::android::IBinder::FIRST_CALL_TRANSACTION + 59;
+  static constexpr uint32_t TRANSACTION_ReverseIBinderArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 60;
+  static constexpr uint32_t TRANSACTION_ReverseNullableIBinderArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 61;
+  static constexpr uint32_t TRANSACTION_GetOldNameInterface = ::android::IBinder::FIRST_CALL_TRANSACTION + 62;
+  static constexpr uint32_t TRANSACTION_GetNewNameInterface = ::android::IBinder::FIRST_CALL_TRANSACTION + 63;
+  static constexpr uint32_t TRANSACTION_GetUnionTags = ::android::IBinder::FIRST_CALL_TRANSACTION + 64;
+  static constexpr uint32_t TRANSACTION_GetCppJavaTests = ::android::IBinder::FIRST_CALL_TRANSACTION + 65;
+  static constexpr uint32_t TRANSACTION_getBackendType = ::android::IBinder::FIRST_CALL_TRANSACTION + 66;
+  static constexpr uint32_t TRANSACTION_GetCircular = ::android::IBinder::FIRST_CALL_TRANSACTION + 67;
   explicit BnTestService();
   ::android::status_t onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) override;
 };  // class BnTestService
@@ -82,6 +92,7 @@
 public:
   explicit ITestServiceDelegator(const ::android::sp<ITestService> &impl) : _aidl_delegate(impl) {}
 
+  ::android::sp<ITestService> getImpl() { return _aidl_delegate; }
   ::android::binder::Status UnimplementedMethod(int32_t arg, int32_t* _aidl_return) override {
     return _aidl_delegate->UnimplementedMethod(arg, _aidl_return);
   }
@@ -158,10 +169,25 @@
     return _aidl_delegate->ReverseLongEnum(input, repeated, _aidl_return);
   }
   ::android::binder::Status GetOtherTestService(const ::android::String16& name, ::android::sp<::android::aidl::tests::INamedCallback>* _aidl_return) override {
-    return _aidl_delegate->GetOtherTestService(name, _aidl_return);
+    auto _status = _aidl_delegate->GetOtherTestService(name, _aidl_return);
+    if (*_aidl_return) {
+      *_aidl_return = ::android::sp<::android::aidl::tests::INamedCallbackDelegator>::cast(delegate(*_aidl_return));
+    }
+    return _status;
+  }
+  ::android::binder::Status SetOtherTestService(const ::android::String16& name, const ::android::sp<::android::aidl::tests::INamedCallback>& service, bool* _aidl_return) override {
+    ::android::sp<::android::aidl::tests::INamedCallbackDelegator> _service;
+    if (service) {
+      _service = ::android::sp<::android::aidl::tests::INamedCallbackDelegator>::cast(delegate(service));
+    }
+    return _aidl_delegate->SetOtherTestService(name, _service, _aidl_return);
   }
   ::android::binder::Status VerifyName(const ::android::sp<::android::aidl::tests::INamedCallback>& service, const ::android::String16& name, bool* _aidl_return) override {
-    return _aidl_delegate->VerifyName(service, name, _aidl_return);
+    ::android::sp<::android::aidl::tests::INamedCallbackDelegator> _service;
+    if (service) {
+      _service = ::android::sp<::android::aidl::tests::INamedCallbackDelegator>::cast(delegate(service));
+    }
+    return _aidl_delegate->VerifyName(_service, name, _aidl_return);
   }
   ::android::binder::Status GetInterfaceArray(const ::std::vector<::android::String16>& names, ::std::vector<::android::sp<::android::aidl::tests::INamedCallback>>* _aidl_return) override {
     return _aidl_delegate->GetInterfaceArray(names, _aidl_return);
@@ -248,7 +274,11 @@
     return _aidl_delegate->ReverseUtf8CppStringList(input, repeated, _aidl_return);
   }
   ::android::binder::Status GetCallback(bool return_null, ::android::sp<::android::aidl::tests::INamedCallback>* _aidl_return) override {
-    return _aidl_delegate->GetCallback(return_null, _aidl_return);
+    auto _status = _aidl_delegate->GetCallback(return_null, _aidl_return);
+    if (*_aidl_return) {
+      *_aidl_return = ::android::sp<::android::aidl::tests::INamedCallbackDelegator>::cast(delegate(*_aidl_return));
+    }
+    return _status;
   }
   ::android::binder::Status FillOutStructuredParcelable(::android::aidl::tests::StructuredParcelable* parcel) override {
     return _aidl_delegate->FillOutStructuredParcelable(parcel);
@@ -266,10 +296,18 @@
     return _aidl_delegate->ReverseNullableIBinderArray(input, repeated, _aidl_return);
   }
   ::android::binder::Status GetOldNameInterface(::android::sp<::android::aidl::tests::IOldName>* _aidl_return) override {
-    return _aidl_delegate->GetOldNameInterface(_aidl_return);
+    auto _status = _aidl_delegate->GetOldNameInterface(_aidl_return);
+    if (*_aidl_return) {
+      *_aidl_return = ::android::sp<::android::aidl::tests::IOldNameDelegator>::cast(delegate(*_aidl_return));
+    }
+    return _status;
   }
   ::android::binder::Status GetNewNameInterface(::android::sp<::android::aidl::tests::INewName>* _aidl_return) override {
-    return _aidl_delegate->GetNewNameInterface(_aidl_return);
+    auto _status = _aidl_delegate->GetNewNameInterface(_aidl_return);
+    if (*_aidl_return) {
+      *_aidl_return = ::android::sp<::android::aidl::tests::INewNameDelegator>::cast(delegate(*_aidl_return));
+    }
+    return _status;
   }
   ::android::binder::Status GetUnionTags(const ::std::vector<::android::aidl::tests::Union>& input, ::std::vector<::android::aidl::tests::Union::Tag>* _aidl_return) override {
     return _aidl_delegate->GetUnionTags(input, _aidl_return);
@@ -280,6 +318,13 @@
   ::android::binder::Status getBackendType(::android::aidl::tests::BackendType* _aidl_return) override {
     return _aidl_delegate->getBackendType(_aidl_return);
   }
+  ::android::binder::Status GetCircular(::android::aidl::tests::CircularParcelable* cp, ::android::sp<::android::aidl::tests::ICircular>* _aidl_return) override {
+    auto _status = _aidl_delegate->GetCircular(cp, _aidl_return);
+    if (*_aidl_return) {
+      *_aidl_return = ::android::sp<::android::aidl::tests::ICircularDelegator>::cast(delegate(*_aidl_return));
+    }
+    return _status;
+  }
 private:
   ::android::sp<ITestService> _aidl_delegate;
 };  // class ITestServiceDelegator
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpCircular.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpCircular.h
new file mode 100644
index 0000000..a9f10c8
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpCircular.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <binder/IBinder.h>
+#include <binder/IInterface.h>
+#include <utils/Errors.h>
+#include <android/aidl/tests/ICircular.h>
+
+namespace android {
+namespace aidl {
+namespace tests {
+class BpCircular : public ::android::BpInterface<ICircular> {
+public:
+  explicit BpCircular(const ::android::sp<::android::IBinder>& _aidl_impl);
+  virtual ~BpCircular() = default;
+  ::android::binder::Status GetTestService(::android::sp<::android::aidl::tests::ITestService>* _aidl_return) override;
+};  // class BpCircular
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpCircularParcelable.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpCircularParcelable.h
new file mode 100644
index 0000000..27af6b1
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpCircularParcelable.h
@@ -0,0 +1 @@
+#error TODO(b/111362593) parcelables do not have bp classes
\ No newline at end of file
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpTestService.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpTestService.h
index 3829d9b..9bd58d6 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpTestService.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpTestService.h
@@ -38,6 +38,7 @@
   ::android::binder::Status ReverseIntEnum(const ::std::vector<::android::aidl::tests::IntEnum>& input, ::std::vector<::android::aidl::tests::IntEnum>* repeated, ::std::vector<::android::aidl::tests::IntEnum>* _aidl_return) override;
   ::android::binder::Status ReverseLongEnum(const ::std::vector<::android::aidl::tests::LongEnum>& input, ::std::vector<::android::aidl::tests::LongEnum>* repeated, ::std::vector<::android::aidl::tests::LongEnum>* _aidl_return) override;
   ::android::binder::Status GetOtherTestService(const ::android::String16& name, ::android::sp<::android::aidl::tests::INamedCallback>* _aidl_return) override;
+  ::android::binder::Status SetOtherTestService(const ::android::String16& name, const ::android::sp<::android::aidl::tests::INamedCallback>& service, bool* _aidl_return) override;
   ::android::binder::Status VerifyName(const ::android::sp<::android::aidl::tests::INamedCallback>& service, const ::android::String16& name, bool* _aidl_return) override;
   ::android::binder::Status GetInterfaceArray(const ::std::vector<::android::String16>& names, ::std::vector<::android::sp<::android::aidl::tests::INamedCallback>>* _aidl_return) override;
   ::android::binder::Status VerifyNamesWithInterfaceArray(const ::std::vector<::android::sp<::android::aidl::tests::INamedCallback>>& services, const ::std::vector<::android::String16>& names, bool* _aidl_return) override;
@@ -78,6 +79,7 @@
   ::android::binder::Status GetUnionTags(const ::std::vector<::android::aidl::tests::Union>& input, ::std::vector<::android::aidl::tests::Union::Tag>* _aidl_return) override;
   ::android::binder::Status GetCppJavaTests(::android::sp<::android::IBinder>* _aidl_return) override;
   ::android::binder::Status getBackendType(::android::aidl::tests::BackendType* _aidl_return) override;
+  ::android::binder::Status GetCircular(::android::aidl::tests::CircularParcelable* cp, ::android::sp<::android::aidl::tests::ICircular>* _aidl_return) override;
 };  // class BpTestService
 }  // namespace tests
 }  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/CircularParcelable.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/CircularParcelable.h
new file mode 100644
index 0000000..c2d8a02
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/CircularParcelable.h
@@ -0,0 +1,55 @@
+#pragma once
+
+#include <android/aidl/tests/ITestService.h>
+#include <android/binder_to_string.h>
+#include <binder/Parcel.h>
+#include <binder/Status.h>
+#include <optional>
+#include <tuple>
+#include <utils/String16.h>
+
+namespace android::aidl::tests {
+class ITestService;
+}  // namespace android::aidl::tests
+namespace android {
+namespace aidl {
+namespace tests {
+class CircularParcelable : public ::android::Parcelable {
+public:
+  ::android::sp<::android::aidl::tests::ITestService> testService;
+  inline bool operator!=(const CircularParcelable& rhs) const {
+    return std::tie(testService) != std::tie(rhs.testService);
+  }
+  inline bool operator<(const CircularParcelable& rhs) const {
+    return std::tie(testService) < std::tie(rhs.testService);
+  }
+  inline bool operator<=(const CircularParcelable& rhs) const {
+    return std::tie(testService) <= std::tie(rhs.testService);
+  }
+  inline bool operator==(const CircularParcelable& rhs) const {
+    return std::tie(testService) == std::tie(rhs.testService);
+  }
+  inline bool operator>(const CircularParcelable& rhs) const {
+    return std::tie(testService) > std::tie(rhs.testService);
+  }
+  inline bool operator>=(const CircularParcelable& rhs) const {
+    return std::tie(testService) >= std::tie(rhs.testService);
+  }
+
+  ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
+  ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
+  static const ::android::String16& getParcelableDescriptor() {
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.CircularParcelable");
+    return DESCRIPTOR;
+  }
+  inline std::string toString() const {
+    std::ostringstream os;
+    os << "CircularParcelable{";
+    os << "testService: " << ::android::internal::ToString(testService);
+    os << "}";
+    return os.str();
+  }
+};  // class CircularParcelable
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/DeprecatedParcelable.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/DeprecatedParcelable.h
index aab5089..5d6079b 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/DeprecatedParcelable.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/DeprecatedParcelable.h
@@ -33,8 +33,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.DeprecatedParcelable");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.DeprecatedParcelable");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h
index 65f6711..4930494 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h
@@ -111,8 +111,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.FixedSize.FixedUnion");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.FixedSize.FixedUnion");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -178,8 +178,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.FixedSize.FixedParcelable");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.FixedSize.FixedParcelable");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -219,8 +219,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.FixedSize");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.FixedSize");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/GenericStructuredParcelable.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/GenericStructuredParcelable.h
index ef88a1c..cacf198 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/GenericStructuredParcelable.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/GenericStructuredParcelable.h
@@ -37,8 +37,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.GenericStructuredParcelable");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.GenericStructuredParcelable");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ICircular.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ICircular.h
new file mode 100644
index 0000000..c000a06
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ICircular.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include <android/aidl/tests/ITestService.h>
+#include <binder/IBinder.h>
+#include <binder/IInterface.h>
+#include <binder/Status.h>
+#include <binder/Trace.h>
+#include <optional>
+#include <utils/StrongPointer.h>
+
+namespace android::aidl::tests {
+class ITestService;
+}  // namespace android::aidl::tests
+namespace android {
+namespace aidl {
+namespace tests {
+class ICircularDelegator;
+
+class ICircular : public ::android::IInterface {
+public:
+  typedef ICircularDelegator DefaultDelegator;
+  DECLARE_META_INTERFACE(Circular)
+  virtual ::android::binder::Status GetTestService(::android::sp<::android::aidl::tests::ITestService>* _aidl_return) = 0;
+};  // class ICircular
+
+class ICircularDefault : public ICircular {
+public:
+  ::android::IBinder* onAsBinder() override {
+    return nullptr;
+  }
+  ::android::binder::Status GetTestService(::android::sp<::android::aidl::tests::ITestService>* /*_aidl_return*/) override {
+    return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
+  }
+};  // class ICircularDefault
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/IDeprecated.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/IDeprecated.h
index e926d47..7d829d3 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/IDeprecated.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/IDeprecated.h
@@ -3,6 +3,7 @@
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
 #include <utils/StrongPointer.h>
 
 namespace android {
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/INamedCallback.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/INamedCallback.h
index 11f3687..2ceca2d 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/INamedCallback.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/INamedCallback.h
@@ -3,6 +3,7 @@
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
 #include <utils/String16.h>
 #include <utils/StrongPointer.h>
 
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/INewName.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/INewName.h
index b74b253..b2615cc 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/INewName.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/INewName.h
@@ -3,6 +3,7 @@
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
 #include <utils/String16.h>
 #include <utils/StrongPointer.h>
 
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/IOldName.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/IOldName.h
index f25ddea..86494fa 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/IOldName.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/IOldName.h
@@ -3,6 +3,7 @@
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
 #include <utils/String16.h>
 #include <utils/StrongPointer.h>
 
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ITestService.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ITestService.h
index a3458e1..ed0afc3 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ITestService.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ITestService.h
@@ -2,6 +2,8 @@
 
 #include <android/aidl/tests/BackendType.h>
 #include <android/aidl/tests/ByteEnum.h>
+#include <android/aidl/tests/CircularParcelable.h>
+#include <android/aidl/tests/ICircular.h>
 #include <android/aidl/tests/INamedCallback.h>
 #include <android/aidl/tests/INewName.h>
 #include <android/aidl/tests/IOldName.h>
@@ -13,19 +15,43 @@
 #include <android/aidl/tests/Union.h>
 #include <android/aidl/tests/extension/ExtendableParcelable.h>
 #include <android/binder_to_string.h>
+#include <array>
+#include <binder/Delegate.h>
+#include <binder/Enums.h>
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Parcel.h>
 #include <binder/ParcelFileDescriptor.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
+#include <cassert>
 #include <cstdint>
 #include <optional>
 #include <string>
 #include <tuple>
+#include <type_traits>
+#include <utility>
 #include <utils/String16.h>
 #include <utils/StrongPointer.h>
+#include <variant>
 #include <vector>
 
+#ifndef __BIONIC__
+#define __assert2(a,b,c,d) ((void)0)
+#endif
+
+namespace android::aidl::tests {
+class CircularParcelable;
+class ICircular;
+class INamedCallback;
+class INewName;
+class IOldName;
+class RecursiveList;
+class StructuredParcelable;
+}  // namespace android::aidl::tests
+namespace android::aidl::tests::extension {
+class ExtendableParcelable;
+}  // namespace android::aidl::tests::extension
 namespace android {
 namespace aidl {
 namespace tests {
@@ -59,8 +85,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.ITestService.Empty");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ITestService.Empty");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -71,6 +97,171 @@
   };  // class Empty
   class CompilerChecks : public ::android::Parcelable {
   public:
+    class IFooDelegator;
+
+    class IFoo : public ::android::IInterface {
+    public:
+      typedef IFooDelegator DefaultDelegator;
+      DECLARE_META_INTERFACE(Foo)
+    };  // class IFoo
+
+    class IFooDefault : public IFoo {
+    public:
+      ::android::IBinder* onAsBinder() override {
+        return nullptr;
+      }
+    };  // class IFooDefault
+    class BpFoo : public ::android::BpInterface<IFoo> {
+    public:
+      explicit BpFoo(const ::android::sp<::android::IBinder>& _aidl_impl);
+      virtual ~BpFoo() = default;
+    };  // class BpFoo
+    class BnFoo : public ::android::BnInterface<IFoo> {
+    public:
+      explicit BnFoo();
+      ::android::status_t onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) override;
+    };  // class BnFoo
+
+    class IFooDelegator : public BnFoo {
+    public:
+      explicit IFooDelegator(const ::android::sp<IFoo> &impl) : _aidl_delegate(impl) {}
+
+      ::android::sp<IFoo> getImpl() { return _aidl_delegate; }
+    private:
+      ::android::sp<IFoo> _aidl_delegate;
+    };  // class IFooDelegator
+    #pragma clang diagnostic push
+    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    class HasDeprecated : public ::android::Parcelable {
+    public:
+      int32_t __attribute__((deprecated("field"))) deprecated = 0;
+      inline bool operator!=(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) != std::tie(rhs.deprecated);
+      }
+      inline bool operator<(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) < std::tie(rhs.deprecated);
+      }
+      inline bool operator<=(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) <= std::tie(rhs.deprecated);
+      }
+      inline bool operator==(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) == std::tie(rhs.deprecated);
+      }
+      inline bool operator>(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) > std::tie(rhs.deprecated);
+      }
+      inline bool operator>=(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) >= std::tie(rhs.deprecated);
+      }
+
+      ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
+      ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
+      static const ::android::String16& getParcelableDescriptor() {
+        static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ITestService.CompilerChecks.HasDeprecated");
+        return DESCRIPTOR;
+      }
+      inline std::string toString() const {
+        std::ostringstream os;
+        os << "HasDeprecated{";
+        os << "deprecated: " << ::android::internal::ToString(deprecated);
+        os << "}";
+        return os.str();
+      }
+    };  // class HasDeprecated
+    #pragma clang diagnostic pop
+    class UsingHasDeprecated : public ::android::Parcelable {
+    public:
+      enum class Tag : int32_t {
+        n = 0,
+        m = 1,
+      };
+      // Expose tag symbols for legacy code
+      static const inline Tag n = Tag::n;
+      static const inline Tag m = Tag::m;
+
+      template<typename _Tp>
+      static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, UsingHasDeprecated>;
+
+      UsingHasDeprecated() : _value(std::in_place_index<static_cast<size_t>(n)>, int32_t(0)) { }
+
+      template <typename _Tp, typename = std::enable_if_t<_not_self<_Tp>>>
+      // NOLINTNEXTLINE(google-explicit-constructor)
+      constexpr UsingHasDeprecated(_Tp&& _arg)
+          : _value(std::forward<_Tp>(_arg)) {}
+
+      template <size_t _Np, typename... _Tp>
+      constexpr explicit UsingHasDeprecated(std::in_place_index_t<_Np>, _Tp&&... _args)
+          : _value(std::in_place_index<_Np>, std::forward<_Tp>(_args)...) {}
+
+      template <Tag _tag, typename... _Tp>
+      static UsingHasDeprecated make(_Tp&&... _args) {
+        return UsingHasDeprecated(std::in_place_index<static_cast<size_t>(_tag)>, std::forward<_Tp>(_args)...);
+      }
+
+      template <Tag _tag, typename _Tp, typename... _Up>
+      static UsingHasDeprecated make(std::initializer_list<_Tp> _il, _Up&&... _args) {
+        return UsingHasDeprecated(std::in_place_index<static_cast<size_t>(_tag)>, std::move(_il), std::forward<_Up>(_args)...);
+      }
+
+      Tag getTag() const {
+        return static_cast<Tag>(_value.index());
+      }
+
+      template <Tag _tag>
+      const auto& get() const {
+        if (getTag() != _tag) { __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "bad access: a wrong tag"); }
+        return std::get<static_cast<size_t>(_tag)>(_value);
+      }
+
+      template <Tag _tag>
+      auto& get() {
+        if (getTag() != _tag) { __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "bad access: a wrong tag"); }
+        return std::get<static_cast<size_t>(_tag)>(_value);
+      }
+
+      template <Tag _tag, typename... _Tp>
+      void set(_Tp&&... _args) {
+        _value.emplace<static_cast<size_t>(_tag)>(std::forward<_Tp>(_args)...);
+      }
+
+      inline bool operator!=(const UsingHasDeprecated& rhs) const {
+        return _value != rhs._value;
+      }
+      inline bool operator<(const UsingHasDeprecated& rhs) const {
+        return _value < rhs._value;
+      }
+      inline bool operator<=(const UsingHasDeprecated& rhs) const {
+        return _value <= rhs._value;
+      }
+      inline bool operator==(const UsingHasDeprecated& rhs) const {
+        return _value == rhs._value;
+      }
+      inline bool operator>(const UsingHasDeprecated& rhs) const {
+        return _value > rhs._value;
+      }
+      inline bool operator>=(const UsingHasDeprecated& rhs) const {
+        return _value >= rhs._value;
+      }
+
+      ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
+      ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
+      static const ::android::String16& getParcelableDescriptor() {
+        static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ITestService.CompilerChecks.UsingHasDeprecated");
+        return DESCRIPTOR;
+      }
+      inline std::string toString() const {
+        std::ostringstream os;
+        os << "UsingHasDeprecated{";
+        switch (getTag()) {
+        case n: os << "n: " << ::android::internal::ToString(get<n>()); break;
+        case m: os << "m: " << ::android::internal::ToString(get<m>()); break;
+        }
+        os << "}";
+        return os.str();
+      }
+    private:
+      std::variant<int32_t, ::android::aidl::tests::ITestService::CompilerChecks::HasDeprecated> _value;
+    };  // class UsingHasDeprecated
     ::android::sp<::android::IBinder> binder;
     ::android::sp<::android::IBinder> nullable_binder;
     ::std::vector<::android::sp<::android::IBinder>> binder_array;
@@ -111,8 +302,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.ITestService.CompilerChecks");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ITestService.CompilerChecks");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -239,6 +430,7 @@
   virtual ::android::binder::Status ReverseIntEnum(const ::std::vector<::android::aidl::tests::IntEnum>& input, ::std::vector<::android::aidl::tests::IntEnum>* repeated, ::std::vector<::android::aidl::tests::IntEnum>* _aidl_return) = 0;
   virtual ::android::binder::Status ReverseLongEnum(const ::std::vector<::android::aidl::tests::LongEnum>& input, ::std::vector<::android::aidl::tests::LongEnum>* repeated, ::std::vector<::android::aidl::tests::LongEnum>* _aidl_return) = 0;
   virtual ::android::binder::Status GetOtherTestService(const ::android::String16& name, ::android::sp<::android::aidl::tests::INamedCallback>* _aidl_return) = 0;
+  virtual ::android::binder::Status SetOtherTestService(const ::android::String16& name, const ::android::sp<::android::aidl::tests::INamedCallback>& service, bool* _aidl_return) = 0;
   virtual ::android::binder::Status VerifyName(const ::android::sp<::android::aidl::tests::INamedCallback>& service, const ::android::String16& name, bool* _aidl_return) = 0;
   virtual ::android::binder::Status GetInterfaceArray(const ::std::vector<::android::String16>& names, ::std::vector<::android::sp<::android::aidl::tests::INamedCallback>>* _aidl_return) = 0;
   virtual ::android::binder::Status VerifyNamesWithInterfaceArray(const ::std::vector<::android::sp<::android::aidl::tests::INamedCallback>>& services, const ::std::vector<::android::String16>& names, bool* _aidl_return) = 0;
@@ -279,6 +471,7 @@
   virtual ::android::binder::Status GetUnionTags(const ::std::vector<::android::aidl::tests::Union>& input, ::std::vector<::android::aidl::tests::Union::Tag>* _aidl_return) = 0;
   virtual ::android::binder::Status GetCppJavaTests(::android::sp<::android::IBinder>* _aidl_return) = 0;
   virtual ::android::binder::Status getBackendType(::android::aidl::tests::BackendType* _aidl_return) = 0;
+  virtual ::android::binder::Status GetCircular(::android::aidl::tests::CircularParcelable* cp, ::android::sp<::android::aidl::tests::ICircular>* _aidl_return) = 0;
 };  // class ITestService
 
 class ITestServiceDefault : public ITestService {
@@ -364,6 +557,9 @@
   ::android::binder::Status GetOtherTestService(const ::android::String16& /*name*/, ::android::sp<::android::aidl::tests::INamedCallback>* /*_aidl_return*/) override {
     return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
   }
+  ::android::binder::Status SetOtherTestService(const ::android::String16& /*name*/, const ::android::sp<::android::aidl::tests::INamedCallback>& /*service*/, bool* /*_aidl_return*/) override {
+    return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
+  }
   ::android::binder::Status VerifyName(const ::android::sp<::android::aidl::tests::INamedCallback>& /*service*/, const ::android::String16& /*name*/, bool* /*_aidl_return*/) override {
     return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
   }
@@ -484,7 +680,38 @@
   ::android::binder::Status getBackendType(::android::aidl::tests::BackendType* /*_aidl_return*/) override {
     return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
   }
+  ::android::binder::Status GetCircular(::android::aidl::tests::CircularParcelable* /*cp*/, ::android::sp<::android::aidl::tests::ICircular>* /*_aidl_return*/) override {
+    return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
+  }
 };  // class ITestServiceDefault
 }  // namespace tests
 }  // namespace aidl
 }  // namespace android
+namespace android {
+namespace aidl {
+namespace tests {
+[[nodiscard]] static inline std::string toString(ITestService::CompilerChecks::UsingHasDeprecated::Tag val) {
+  switch(val) {
+  case ITestService::CompilerChecks::UsingHasDeprecated::Tag::n:
+    return "n";
+  case ITestService::CompilerChecks::UsingHasDeprecated::Tag::m:
+    return "m";
+  default:
+    return std::to_string(static_cast<int32_t>(val));
+  }
+}
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+namespace android {
+namespace internal {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wc++17-extensions"
+template <>
+constexpr inline std::array<::android::aidl::tests::ITestService::CompilerChecks::UsingHasDeprecated::Tag, 2> enum_values<::android::aidl::tests::ITestService::CompilerChecks::UsingHasDeprecated::Tag> = {
+  ::android::aidl::tests::ITestService::CompilerChecks::UsingHasDeprecated::Tag::n,
+  ::android::aidl::tests::ITestService::CompilerChecks::UsingHasDeprecated::Tag::m,
+};
+#pragma clang diagnostic pop
+}  // namespace internal
+}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ListOfInterfaces.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ListOfInterfaces.h
index e090dcf..e391f57 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ListOfInterfaces.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ListOfInterfaces.h
@@ -3,11 +3,13 @@
 #include <android/aidl/tests/ListOfInterfaces.h>
 #include <android/binder_to_string.h>
 #include <array>
+#include <binder/Delegate.h>
 #include <binder/Enums.h>
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
 #include <cassert>
 #include <cstdint>
 #include <optional>
@@ -58,6 +60,7 @@
   public:
     explicit IEmptyInterfaceDelegator(const ::android::sp<IEmptyInterface> &impl) : _aidl_delegate(impl) {}
 
+    ::android::sp<IEmptyInterface> getImpl() { return _aidl_delegate; }
   private:
     ::android::sp<IEmptyInterface> _aidl_delegate;
   };  // class IEmptyInterfaceDelegator
@@ -96,8 +99,17 @@
   public:
     explicit IMyInterfaceDelegator(const ::android::sp<IMyInterface> &impl) : _aidl_delegate(impl) {}
 
+    ::android::sp<IMyInterface> getImpl() { return _aidl_delegate; }
     ::android::binder::Status methodWithInterfaces(const ::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterface>& iface, const ::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterface>& nullable_iface, const ::std::vector<::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterface>>& iface_list_in, ::std::vector<::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterface>>* iface_list_out, ::std::vector<::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterface>>* iface_list_inout, const ::std::optional<::std::vector<::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterface>>>& nullable_iface_list_in, ::std::optional<::std::vector<::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterface>>>* nullable_iface_list_out, ::std::optional<::std::vector<::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterface>>>* nullable_iface_list_inout, ::std::optional<::std::vector<::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterface>>>* _aidl_return) override {
-      return _aidl_delegate->methodWithInterfaces(iface, nullable_iface, iface_list_in, iface_list_out, iface_list_inout, nullable_iface_list_in, nullable_iface_list_out, nullable_iface_list_inout, _aidl_return);
+      ::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterfaceDelegator> _iface;
+      if (iface) {
+        _iface = ::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterfaceDelegator>::cast(delegate(iface));
+      }
+      ::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterfaceDelegator> _nullable_iface;
+      if (nullable_iface) {
+        _nullable_iface = ::android::sp<::android::aidl::tests::ListOfInterfaces::IEmptyInterfaceDelegator>::cast(delegate(nullable_iface));
+      }
+      return _aidl_delegate->methodWithInterfaces(_iface, _nullable_iface, iface_list_in, iface_list_out, iface_list_inout, nullable_iface_list_in, nullable_iface_list_out, nullable_iface_list_inout, _aidl_return);
     }
   private:
     ::android::sp<IMyInterface> _aidl_delegate;
@@ -130,8 +142,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.ListOfInterfaces.MyParcelable");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ListOfInterfaces.MyParcelable");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -225,8 +237,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.ListOfInterfaces.MyUnion");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ListOfInterfaces.MyUnion");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -265,8 +277,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.ListOfInterfaces");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ListOfInterfaces");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/OtherParcelableForToString.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/OtherParcelableForToString.h
index fa05b15..6f32726 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/OtherParcelableForToString.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/OtherParcelableForToString.h
@@ -34,8 +34,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.OtherParcelableForToString");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.OtherParcelableForToString");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ParcelableForToString.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ParcelableForToString.h
index 7f3adf7..e57c7f7 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ParcelableForToString.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ParcelableForToString.h
@@ -13,6 +13,12 @@
 #include <utils/String16.h>
 #include <vector>
 
+namespace android::aidl::tests {
+template <typename T, typename U, typename B>
+class GenericStructuredParcelable;
+class OtherParcelableForToString;
+class StructuredParcelable;
+}  // namespace android::aidl::tests
 namespace android {
 namespace aidl {
 namespace tests {
@@ -63,8 +69,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.ParcelableForToString");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.ParcelableForToString");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/RecursiveList.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/RecursiveList.h
index d874d9f..c835bb8 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/RecursiveList.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/RecursiveList.h
@@ -9,6 +9,9 @@
 #include <tuple>
 #include <utils/String16.h>
 
+namespace android::aidl::tests {
+class RecursiveList;
+}  // namespace android::aidl::tests
 namespace android {
 namespace aidl {
 namespace tests {
@@ -38,8 +41,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.RecursiveList");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.RecursiveList");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/StructuredParcelable.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/StructuredParcelable.h
index 339c516..ee17d48 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/StructuredParcelable.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/StructuredParcelable.h
@@ -46,8 +46,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.StructuredParcelable.Empty");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.StructuredParcelable.Empty");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -136,8 +136,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.StructuredParcelable");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.StructuredParcelable");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/Union.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/Union.h
index a82300f..b3493e9 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/Union.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/Union.h
@@ -111,8 +111,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.Union");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.Union");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/UnionWithFd.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/UnionWithFd.h
index c97edf1..fae7745 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/UnionWithFd.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/UnionWithFd.h
@@ -98,8 +98,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.UnionWithFd");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.UnionWithFd");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/ExtendableParcelable.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/ExtendableParcelable.h
index cf709f1..18dfb06 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/ExtendableParcelable.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/ExtendableParcelable.h
@@ -42,8 +42,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.extension.ExtendableParcelable");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.extension.ExtendableParcelable");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExt.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExt.h
index f89954a..ae311ac 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExt.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExt.h
@@ -38,8 +38,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.extension.MyExt");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.extension.MyExt");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExt2.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExt2.h
index 93fcd01..cfd04c6 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExt2.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExt2.h
@@ -9,6 +9,9 @@
 #include <tuple>
 #include <utils/String16.h>
 
+namespace android::aidl::tests::extension {
+class MyExt;
+}  // namespace android::aidl::tests::extension
 namespace android {
 namespace aidl {
 namespace tests {
@@ -40,8 +43,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.extension.MyExt2");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.extension.MyExt2");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExtLike.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExtLike.h
index 0ac2bf7..97a740c 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExtLike.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/extension/MyExtLike.h
@@ -37,8 +37,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.extension.MyExtLike");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.extension.MyExtLike");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/BnNestedService.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/BnNestedService.h
index 1978f3f..3072ca3 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/BnNestedService.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/BnNestedService.h
@@ -2,6 +2,10 @@
 
 #include <binder/IInterface.h>
 #include <android/aidl/tests/nested/INestedService.h>
+#include <android/aidl/tests/nested/BnNestedService.h>
+#include <android/aidl/tests/nested/INestedService.h>
+#include <binder/Delegate.h>
+
 
 namespace android {
 namespace aidl {
@@ -19,11 +23,16 @@
 public:
   explicit INestedServiceDelegator(const ::android::sp<INestedService> &impl) : _aidl_delegate(impl) {}
 
+  ::android::sp<INestedService> getImpl() { return _aidl_delegate; }
   ::android::binder::Status flipStatus(const ::android::aidl::tests::nested::ParcelableWithNested& p, ::android::aidl::tests::nested::INestedService::Result* _aidl_return) override {
     return _aidl_delegate->flipStatus(p, _aidl_return);
   }
   ::android::binder::Status flipStatusWithCallback(::android::aidl::tests::nested::ParcelableWithNested::Status status, const ::android::sp<::android::aidl::tests::nested::INestedService::ICallback>& cb) override {
-    return _aidl_delegate->flipStatusWithCallback(status, cb);
+    ::android::sp<::android::aidl::tests::nested::INestedService::ICallbackDelegator> _cb;
+    if (cb) {
+      _cb = ::android::sp<::android::aidl::tests::nested::INestedService::ICallbackDelegator>::cast(delegate(cb));
+    }
+    return _aidl_delegate->flipStatusWithCallback(status, _cb);
   }
 private:
   ::android::sp<INestedService> _aidl_delegate;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/DeeplyNested.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/DeeplyNested.h
index 6e280b4..d26c1c1 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/DeeplyNested.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/DeeplyNested.h
@@ -48,8 +48,8 @@
         ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
         ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
         static const ::android::String16& getParcelableDescriptor() {
-          static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.nested.DeeplyNested.B.C.D");
-          return DESCIPTOR;
+          static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.nested.DeeplyNested.B.C.D");
+          return DESCRIPTOR;
         }
         inline std::string toString() const {
           std::ostringstream os;
@@ -80,8 +80,8 @@
       ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
       ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
       static const ::android::String16& getParcelableDescriptor() {
-        static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.nested.DeeplyNested.B.C");
-        return DESCIPTOR;
+        static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.nested.DeeplyNested.B.C");
+        return DESCRIPTOR;
       }
       inline std::string toString() const {
         std::ostringstream os;
@@ -112,8 +112,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.nested.DeeplyNested.B");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.nested.DeeplyNested.B");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -147,8 +147,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.nested.DeeplyNested.A");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.nested.DeeplyNested.A");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -180,8 +180,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.nested.DeeplyNested");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.nested.DeeplyNested");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/INestedService.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/INestedService.h
index 3d48eda..ae0bbef 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/INestedService.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/INestedService.h
@@ -3,14 +3,19 @@
 #include <android/aidl/tests/nested/INestedService.h>
 #include <android/aidl/tests/nested/ParcelableWithNested.h>
 #include <android/binder_to_string.h>
+#include <binder/Delegate.h>
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
 #include <tuple>
 #include <utils/String16.h>
 #include <utils/StrongPointer.h>
 
+namespace android::aidl::tests::nested {
+class ParcelableWithNested;
+}  // namespace android::aidl::tests::nested
 namespace android {
 namespace aidl {
 namespace tests {
@@ -46,8 +51,8 @@
     ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
     ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
     static const ::android::String16& getParcelableDescriptor() {
-      static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.nested.INestedService.Result");
-      return DESCIPTOR;
+      static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.nested.INestedService.Result");
+      return DESCRIPTOR;
     }
     inline std::string toString() const {
       std::ostringstream os;
@@ -92,6 +97,7 @@
   public:
     explicit ICallbackDelegator(const ::android::sp<ICallback> &impl) : _aidl_delegate(impl) {}
 
+    ::android::sp<ICallback> getImpl() { return _aidl_delegate; }
     ::android::binder::Status done(::android::aidl::tests::nested::ParcelableWithNested::Status status) override {
       return _aidl_delegate->done(status);
     }
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/ParcelableWithNested.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/ParcelableWithNested.h
index 56a3c4d..b46af40 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/ParcelableWithNested.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/nested/ParcelableWithNested.h
@@ -44,8 +44,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.nested.ParcelableWithNested");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.nested.ParcelableWithNested");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h
index 7a41b20..81d93b6 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h
@@ -23,6 +23,8 @@
 namespace aidl {
 namespace tests {
 namespace unions {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
 class EnumUnion : public ::android::Parcelable {
 public:
   enum class Tag : int32_t {
@@ -102,8 +104,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.unions.EnumUnion");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.unions.EnumUnion");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
@@ -111,10 +113,7 @@
     switch (getTag()) {
     case intEnum: os << "intEnum: " << ::android::internal::ToString(get<intEnum>()); break;
     case longEnum: os << "longEnum: " << ::android::internal::ToString(get<longEnum>()); break;
-    #pragma clang diagnostic push
-    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
     case deprecatedField: os << "deprecatedField: " << ::android::internal::ToString(get<deprecatedField>()); break;
-    #pragma clang diagnostic pop
     }
     os << "}";
     return os.str();
@@ -122,6 +121,7 @@
 private:
   std::variant<::android::aidl::tests::IntEnum, ::android::aidl::tests::LongEnum, int32_t> _value;
 };  // class EnumUnion
+#pragma clang diagnostic pop
 }  // namespace unions
 }  // namespace tests
 }  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/UnionInUnion.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/UnionInUnion.h
index 9badc3a..50f19cc 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/UnionInUnion.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/UnionInUnion.h
@@ -99,8 +99,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.tests.unions.UnionInUnion");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.tests.unions.UnionInUnion");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java
index e6480f1..a4f89ab 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java
@@ -80,6 +80,22 @@
       {
         return this;
       }
+      /** @hide */
+      public static java.lang.String getDefaultTransactionName(int transactionCode)
+      {
+        switch (transactionCode)
+        {
+          default:
+          {
+            return null;
+          }
+        }
+      }
+      /** @hide */
+      public java.lang.String getTransactionName(int transactionCode)
+      {
+        return this.getDefaultTransactionName(transactionCode);
+      }
       @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
       {
         java.lang.String descriptor = DESCRIPTOR;
@@ -115,6 +131,11 @@
           return DESCRIPTOR;
         }
       }
+      /** @hide */
+      public int getMaxTransactionId()
+      {
+        return 0;
+      }
     }
     public static final java.lang.String DESCRIPTOR = "android$aidl$tests$ArrayOfInterfaces$IEmptyInterface".replace('$', '.');
   }
@@ -159,6 +180,26 @@
       {
         return this;
       }
+      /** @hide */
+      public static java.lang.String getDefaultTransactionName(int transactionCode)
+      {
+        switch (transactionCode)
+        {
+          case TRANSACTION_methodWithInterfaces:
+          {
+            return "methodWithInterfaces";
+          }
+          default:
+          {
+            return null;
+          }
+        }
+      }
+      /** @hide */
+      public java.lang.String getTransactionName(int transactionCode)
+      {
+        return this.getDefaultTransactionName(transactionCode);
+      }
       @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
       {
         java.lang.String descriptor = DESCRIPTOR;
@@ -266,6 +307,11 @@
         }
       }
       static final int TRANSACTION_methodWithInterfaces = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+      /** @hide */
+      public int getMaxTransactionId()
+      {
+        return 0;
+      }
     }
     public static final java.lang.String DESCRIPTOR = "android$aidl$tests$ArrayOfInterfaces$IMyInterface".replace('$', '.');
     public android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] methodWithInterfaces(android.aidl.tests.ArrayOfInterfaces.IEmptyInterface iface, android.aidl.tests.ArrayOfInterfaces.IEmptyInterface nullable_iface, android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] iface_array_in, android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] iface_array_out, android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] iface_array_inout, android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] nullable_iface_array_in, android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] nullable_iface_array_out, android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] nullable_iface_array_inout) throws android.os.RemoteException;
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/CircularParcelable.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/CircularParcelable.java
new file mode 100644
index 0000000..37c2036
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/CircularParcelable.java
@@ -0,0 +1,50 @@
+/*
+ * This file is auto-generated.  DO NOT MODIFY.
+ */
+package android.aidl.tests;
+public class CircularParcelable implements android.os.Parcelable
+{
+  public android.aidl.tests.ITestService testService;
+  public static final android.os.Parcelable.Creator<CircularParcelable> CREATOR = new android.os.Parcelable.Creator<CircularParcelable>() {
+    @Override
+    public CircularParcelable createFromParcel(android.os.Parcel _aidl_source) {
+      CircularParcelable _aidl_out = new CircularParcelable();
+      _aidl_out.readFromParcel(_aidl_source);
+      return _aidl_out;
+    }
+    @Override
+    public CircularParcelable[] newArray(int _aidl_size) {
+      return new CircularParcelable[_aidl_size];
+    }
+  };
+  @Override public final void writeToParcel(android.os.Parcel _aidl_parcel, int _aidl_flag)
+  {
+    int _aidl_start_pos = _aidl_parcel.dataPosition();
+    _aidl_parcel.writeInt(0);
+    _aidl_parcel.writeStrongInterface(testService);
+    int _aidl_end_pos = _aidl_parcel.dataPosition();
+    _aidl_parcel.setDataPosition(_aidl_start_pos);
+    _aidl_parcel.writeInt(_aidl_end_pos - _aidl_start_pos);
+    _aidl_parcel.setDataPosition(_aidl_end_pos);
+  }
+  public final void readFromParcel(android.os.Parcel _aidl_parcel)
+  {
+    int _aidl_start_pos = _aidl_parcel.dataPosition();
+    int _aidl_parcelable_size = _aidl_parcel.readInt();
+    try {
+      if (_aidl_parcelable_size < 4) throw new android.os.BadParcelableException("Parcelable too small");;
+      if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return;
+      testService = android.aidl.tests.ITestService.Stub.asInterface(_aidl_parcel.readStrongBinder());
+    } finally {
+      if (_aidl_start_pos > (Integer.MAX_VALUE - _aidl_parcelable_size)) {
+        throw new android.os.BadParcelableException("Overflow in the size of parcelable");
+      }
+      _aidl_parcel.setDataPosition(_aidl_start_pos + _aidl_parcelable_size);
+    }
+  }
+  @Override
+  public int describeContents() {
+    int _mask = 0;
+    return _mask;
+  }
+}
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/CircularParcelable.java.d b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/CircularParcelable.java.d
new file mode 100644
index 0000000..bf6f8ca
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/CircularParcelable.java.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-java-source/gen/android/aidl/tests/CircularParcelable.java : \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java
new file mode 100644
index 0000000..e24b2b4
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java
@@ -0,0 +1,138 @@
+/*
+ * This file is auto-generated.  DO NOT MODIFY.
+ */
+package android.aidl.tests;
+public interface ICircular extends android.os.IInterface
+{
+  /** Default implementation for ICircular. */
+  public static class Default implements android.aidl.tests.ICircular
+  {
+    @Override public android.aidl.tests.ITestService GetTestService() throws android.os.RemoteException
+    {
+      return null;
+    }
+    @Override
+    public android.os.IBinder asBinder() {
+      return null;
+    }
+  }
+  /** Local-side IPC implementation stub class. */
+  public static abstract class Stub extends android.os.Binder implements android.aidl.tests.ICircular
+  {
+    /** Construct the stub at attach it to the interface. */
+    public Stub()
+    {
+      this.attachInterface(this, DESCRIPTOR);
+    }
+    /**
+     * Cast an IBinder object into an android.aidl.tests.ICircular interface,
+     * generating a proxy if needed.
+     */
+    public static android.aidl.tests.ICircular asInterface(android.os.IBinder obj)
+    {
+      if ((obj==null)) {
+        return null;
+      }
+      android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
+      if (((iin!=null)&&(iin instanceof android.aidl.tests.ICircular))) {
+        return ((android.aidl.tests.ICircular)iin);
+      }
+      return new android.aidl.tests.ICircular.Stub.Proxy(obj);
+    }
+    @Override public android.os.IBinder asBinder()
+    {
+      return this;
+    }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_GetTestService:
+        {
+          return "GetTestService";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
+    @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
+    {
+      java.lang.String descriptor = DESCRIPTOR;
+      if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
+        data.enforceInterface(descriptor);
+      }
+      switch (code)
+      {
+        case INTERFACE_TRANSACTION:
+        {
+          reply.writeString(descriptor);
+          return true;
+        }
+      }
+      switch (code)
+      {
+        case TRANSACTION_GetTestService:
+        {
+          android.aidl.tests.ITestService _result = this.GetTestService();
+          reply.writeNoException();
+          reply.writeStrongInterface(_result);
+          break;
+        }
+        default:
+        {
+          return super.onTransact(code, data, reply, flags);
+        }
+      }
+      return true;
+    }
+    private static class Proxy implements android.aidl.tests.ICircular
+    {
+      private android.os.IBinder mRemote;
+      Proxy(android.os.IBinder remote)
+      {
+        mRemote = remote;
+      }
+      @Override public android.os.IBinder asBinder()
+      {
+        return mRemote;
+      }
+      public java.lang.String getInterfaceDescriptor()
+      {
+        return DESCRIPTOR;
+      }
+      @Override public android.aidl.tests.ITestService GetTestService() throws android.os.RemoteException
+      {
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
+        android.os.Parcel _reply = android.os.Parcel.obtain();
+        android.aidl.tests.ITestService _result;
+        try {
+          _data.writeInterfaceToken(DESCRIPTOR);
+          boolean _status = mRemote.transact(Stub.TRANSACTION_GetTestService, _data, _reply, 0);
+          _reply.readException();
+          _result = android.aidl.tests.ITestService.Stub.asInterface(_reply.readStrongBinder());
+        }
+        finally {
+          _reply.recycle();
+          _data.recycle();
+        }
+        return _result;
+      }
+    }
+    static final int TRANSACTION_GetTestService = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 0;
+    }
+  }
+  public static final java.lang.String DESCRIPTOR = "android$aidl$tests$ICircular".replace('$', '.');
+  public android.aidl.tests.ITestService GetTestService() throws android.os.RemoteException;
+}
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java.d b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java.d
new file mode 100644
index 0000000..1add0dd
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-java-source/gen/android/aidl/tests/ICircular.java : \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IDeprecated.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IDeprecated.java
index 09578f5..d9c1d4b 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IDeprecated.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IDeprecated.java
@@ -41,6 +41,22 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -76,6 +92,11 @@
         return DESCRIPTOR;
       }
     }
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 0;
+    }
   }
   public static final java.lang.String DESCRIPTOR = "android$aidl$tests$IDeprecated".replace('$', '.');
 }
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java
index 3500271..95c3526 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INamedCallback.java
@@ -43,6 +43,26 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_GetName:
+        {
+          return "GetName";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -107,6 +127,11 @@
       }
     }
     static final int TRANSACTION_GetName = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 0;
+    }
   }
   public static final java.lang.String DESCRIPTOR = "android$aidl$tests$INamedCallback".replace('$', '.');
   public java.lang.String GetName() throws android.os.RemoteException;
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java
index 265f8ef..1fdf120 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/INewName.java
@@ -43,6 +43,26 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_RealName:
+        {
+          return "RealName";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -107,6 +127,11 @@
       }
     }
     static final int TRANSACTION_RealName = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 0;
+    }
   }
   public static final java.lang.String DESCRIPTOR = "android$aidl$tests$IOldName".replace('$', '.');
   public java.lang.String RealName() throws android.os.RemoteException;
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java
index 7013fce..325fd8f 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/IOldName.java
@@ -43,6 +43,26 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_RealName:
+        {
+          return "RealName";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -107,6 +127,11 @@
       }
     }
     static final int TRANSACTION_RealName = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 0;
+    }
   }
   public static final java.lang.String DESCRIPTOR = "android$aidl$tests$IOldName".replace('$', '.');
   public java.lang.String RealName() throws android.os.RemoteException;
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java
index 5883b2f..480489a 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java
@@ -128,6 +128,11 @@
     {
       return null;
     }
+    // returns true if the same service is already registered with the same name
+    @Override public boolean SetOtherTestService(java.lang.String name, android.aidl.tests.INamedCallback service) throws android.os.RemoteException
+    {
+      return false;
+    }
     @Override public boolean VerifyName(android.aidl.tests.INamedCallback service, java.lang.String name) throws android.os.RemoteException
     {
       return false;
@@ -289,6 +294,10 @@
     {
       return 0;
     }
+    @Override public android.aidl.tests.ICircular GetCircular(android.aidl.tests.CircularParcelable cp) throws android.os.RemoteException
+    {
+      return null;
+    }
     @Override
     public android.os.IBinder asBinder() {
       return null;
@@ -422,6 +431,11 @@
     {
       return mImpl.GetOtherTestService(name);
     }
+    // returns true if the same service is already registered with the same name
+    @Override public boolean SetOtherTestService(java.lang.String name, android.aidl.tests.INamedCallback service) throws android.os.RemoteException
+    {
+      return mImpl.SetOtherTestService(name,service);
+    }
     @Override public boolean VerifyName(android.aidl.tests.INamedCallback service, java.lang.String name) throws android.os.RemoteException
     {
       return mImpl.VerifyName(service,name);
@@ -590,6 +604,10 @@
     {
       return mImpl.getBackendType();
     }
+    @Override public android.aidl.tests.ICircular GetCircular(android.aidl.tests.CircularParcelable cp) throws android.os.RemoteException
+    {
+      return mImpl.GetCircular(cp);
+    }
     android.aidl.tests.ITestService mImpl;
   }
   /** Local-side IPC implementation stub class. */
@@ -619,6 +637,294 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_UnimplementedMethod:
+        {
+          return "UnimplementedMethod";
+        }
+        case TRANSACTION_Deprecated:
+        {
+          return "Deprecated";
+        }
+        case TRANSACTION_TestOneway:
+        {
+          return "TestOneway";
+        }
+        case TRANSACTION_RepeatBoolean:
+        {
+          return "RepeatBoolean";
+        }
+        case TRANSACTION_RepeatByte:
+        {
+          return "RepeatByte";
+        }
+        case TRANSACTION_RepeatChar:
+        {
+          return "RepeatChar";
+        }
+        case TRANSACTION_RepeatInt:
+        {
+          return "RepeatInt";
+        }
+        case TRANSACTION_RepeatLong:
+        {
+          return "RepeatLong";
+        }
+        case TRANSACTION_RepeatFloat:
+        {
+          return "RepeatFloat";
+        }
+        case TRANSACTION_RepeatDouble:
+        {
+          return "RepeatDouble";
+        }
+        case TRANSACTION_RepeatString:
+        {
+          return "RepeatString";
+        }
+        case TRANSACTION_RepeatByteEnum:
+        {
+          return "RepeatByteEnum";
+        }
+        case TRANSACTION_RepeatIntEnum:
+        {
+          return "RepeatIntEnum";
+        }
+        case TRANSACTION_RepeatLongEnum:
+        {
+          return "RepeatLongEnum";
+        }
+        case TRANSACTION_ReverseBoolean:
+        {
+          return "ReverseBoolean";
+        }
+        case TRANSACTION_ReverseByte:
+        {
+          return "ReverseByte";
+        }
+        case TRANSACTION_ReverseChar:
+        {
+          return "ReverseChar";
+        }
+        case TRANSACTION_ReverseInt:
+        {
+          return "ReverseInt";
+        }
+        case TRANSACTION_ReverseLong:
+        {
+          return "ReverseLong";
+        }
+        case TRANSACTION_ReverseFloat:
+        {
+          return "ReverseFloat";
+        }
+        case TRANSACTION_ReverseDouble:
+        {
+          return "ReverseDouble";
+        }
+        case TRANSACTION_ReverseString:
+        {
+          return "ReverseString";
+        }
+        case TRANSACTION_ReverseByteEnum:
+        {
+          return "ReverseByteEnum";
+        }
+        case TRANSACTION_ReverseIntEnum:
+        {
+          return "ReverseIntEnum";
+        }
+        case TRANSACTION_ReverseLongEnum:
+        {
+          return "ReverseLongEnum";
+        }
+        case TRANSACTION_GetOtherTestService:
+        {
+          return "GetOtherTestService";
+        }
+        case TRANSACTION_SetOtherTestService:
+        {
+          return "SetOtherTestService";
+        }
+        case TRANSACTION_VerifyName:
+        {
+          return "VerifyName";
+        }
+        case TRANSACTION_GetInterfaceArray:
+        {
+          return "GetInterfaceArray";
+        }
+        case TRANSACTION_VerifyNamesWithInterfaceArray:
+        {
+          return "VerifyNamesWithInterfaceArray";
+        }
+        case TRANSACTION_GetNullableInterfaceArray:
+        {
+          return "GetNullableInterfaceArray";
+        }
+        case TRANSACTION_VerifyNamesWithNullableInterfaceArray:
+        {
+          return "VerifyNamesWithNullableInterfaceArray";
+        }
+        case TRANSACTION_GetInterfaceList:
+        {
+          return "GetInterfaceList";
+        }
+        case TRANSACTION_VerifyNamesWithInterfaceList:
+        {
+          return "VerifyNamesWithInterfaceList";
+        }
+        case TRANSACTION_ReverseStringList:
+        {
+          return "ReverseStringList";
+        }
+        case TRANSACTION_RepeatParcelFileDescriptor:
+        {
+          return "RepeatParcelFileDescriptor";
+        }
+        case TRANSACTION_ReverseParcelFileDescriptorArray:
+        {
+          return "ReverseParcelFileDescriptorArray";
+        }
+        case TRANSACTION_ThrowServiceException:
+        {
+          return "ThrowServiceException";
+        }
+        case TRANSACTION_RepeatNullableIntArray:
+        {
+          return "RepeatNullableIntArray";
+        }
+        case TRANSACTION_RepeatNullableByteEnumArray:
+        {
+          return "RepeatNullableByteEnumArray";
+        }
+        case TRANSACTION_RepeatNullableIntEnumArray:
+        {
+          return "RepeatNullableIntEnumArray";
+        }
+        case TRANSACTION_RepeatNullableLongEnumArray:
+        {
+          return "RepeatNullableLongEnumArray";
+        }
+        case TRANSACTION_RepeatNullableString:
+        {
+          return "RepeatNullableString";
+        }
+        case TRANSACTION_RepeatNullableStringList:
+        {
+          return "RepeatNullableStringList";
+        }
+        case TRANSACTION_RepeatNullableParcelable:
+        {
+          return "RepeatNullableParcelable";
+        }
+        case TRANSACTION_RepeatNullableParcelableArray:
+        {
+          return "RepeatNullableParcelableArray";
+        }
+        case TRANSACTION_RepeatNullableParcelableList:
+        {
+          return "RepeatNullableParcelableList";
+        }
+        case TRANSACTION_TakesAnIBinder:
+        {
+          return "TakesAnIBinder";
+        }
+        case TRANSACTION_TakesANullableIBinder:
+        {
+          return "TakesANullableIBinder";
+        }
+        case TRANSACTION_TakesAnIBinderList:
+        {
+          return "TakesAnIBinderList";
+        }
+        case TRANSACTION_TakesANullableIBinderList:
+        {
+          return "TakesANullableIBinderList";
+        }
+        case TRANSACTION_RepeatUtf8CppString:
+        {
+          return "RepeatUtf8CppString";
+        }
+        case TRANSACTION_RepeatNullableUtf8CppString:
+        {
+          return "RepeatNullableUtf8CppString";
+        }
+        case TRANSACTION_ReverseUtf8CppString:
+        {
+          return "ReverseUtf8CppString";
+        }
+        case TRANSACTION_ReverseNullableUtf8CppString:
+        {
+          return "ReverseNullableUtf8CppString";
+        }
+        case TRANSACTION_ReverseUtf8CppStringList:
+        {
+          return "ReverseUtf8CppStringList";
+        }
+        case TRANSACTION_GetCallback:
+        {
+          return "GetCallback";
+        }
+        case TRANSACTION_FillOutStructuredParcelable:
+        {
+          return "FillOutStructuredParcelable";
+        }
+        case TRANSACTION_RepeatExtendableParcelable:
+        {
+          return "RepeatExtendableParcelable";
+        }
+        case TRANSACTION_ReverseList:
+        {
+          return "ReverseList";
+        }
+        case TRANSACTION_ReverseIBinderArray:
+        {
+          return "ReverseIBinderArray";
+        }
+        case TRANSACTION_ReverseNullableIBinderArray:
+        {
+          return "ReverseNullableIBinderArray";
+        }
+        case TRANSACTION_GetOldNameInterface:
+        {
+          return "GetOldNameInterface";
+        }
+        case TRANSACTION_GetNewNameInterface:
+        {
+          return "GetNewNameInterface";
+        }
+        case TRANSACTION_GetUnionTags:
+        {
+          return "GetUnionTags";
+        }
+        case TRANSACTION_GetCppJavaTests:
+        {
+          return "GetCppJavaTests";
+        }
+        case TRANSACTION_getBackendType:
+        {
+          return "getBackendType";
+        }
+        case TRANSACTION_GetCircular:
+        {
+          return "GetCircular";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -974,6 +1280,18 @@
           reply.writeStrongInterface(_result);
           break;
         }
+        case TRANSACTION_SetOtherTestService:
+        {
+          java.lang.String _arg0;
+          _arg0 = data.readString();
+          android.aidl.tests.INamedCallback _arg1;
+          _arg1 = android.aidl.tests.INamedCallback.Stub.asInterface(data.readStrongBinder());
+          data.enforceNoDataAvail();
+          boolean _result = this.SetOtherTestService(_arg0, _arg1);
+          reply.writeNoException();
+          reply.writeBoolean(_result);
+          break;
+        }
         case TRANSACTION_VerifyName:
         {
           android.aidl.tests.INamedCallback _arg0;
@@ -1413,6 +1731,17 @@
           reply.writeByte(_result);
           break;
         }
+        case TRANSACTION_GetCircular:
+        {
+          android.aidl.tests.CircularParcelable _arg0;
+          _arg0 = new android.aidl.tests.CircularParcelable();
+          data.enforceNoDataAvail();
+          android.aidl.tests.ICircular _result = this.GetCircular(_arg0);
+          reply.writeNoException();
+          reply.writeStrongInterface(_result);
+          reply.writeTypedObject(_arg0, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+          break;
+        }
         default:
         {
           return super.onTransact(code, data, reply, flags);
@@ -2091,6 +2420,32 @@
         }
         return _result;
       }
+      // returns true if the same service is already registered with the same name
+      @Override public boolean SetOtherTestService(java.lang.String name, android.aidl.tests.INamedCallback service) throws android.os.RemoteException
+      {
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
+        _data.markSensitive();
+        android.os.Parcel _reply = android.os.Parcel.obtain();
+        boolean _result;
+        try {
+          _data.writeInterfaceToken(DESCRIPTOR);
+          _data.writeString(name);
+          _data.writeStrongInterface(service);
+          boolean _status = mRemote.transact(Stub.TRANSACTION_SetOtherTestService, _data, _reply, android.os.IBinder.FLAG_CLEAR_BUF);
+          if (!_status) {
+            if (getDefaultImpl() != null) {
+              return getDefaultImpl().SetOtherTestService(name, service);
+            }
+          }
+          _reply.readException();
+          _result = _reply.readBoolean();
+        }
+        finally {
+          _reply.recycle();
+          _data.recycle();
+        }
+        return _result;
+      }
       @Override public boolean VerifyName(android.aidl.tests.INamedCallback service, java.lang.String name) throws android.os.RemoteException
       {
         android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
@@ -3063,6 +3418,32 @@
         }
         return _result;
       }
+      @Override public android.aidl.tests.ICircular GetCircular(android.aidl.tests.CircularParcelable cp) throws android.os.RemoteException
+      {
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
+        _data.markSensitive();
+        android.os.Parcel _reply = android.os.Parcel.obtain();
+        android.aidl.tests.ICircular _result;
+        try {
+          _data.writeInterfaceToken(DESCRIPTOR);
+          boolean _status = mRemote.transact(Stub.TRANSACTION_GetCircular, _data, _reply, android.os.IBinder.FLAG_CLEAR_BUF);
+          if (!_status) {
+            if (getDefaultImpl() != null) {
+              return getDefaultImpl().GetCircular(cp);
+            }
+          }
+          _reply.readException();
+          _result = android.aidl.tests.ICircular.Stub.asInterface(_reply.readStrongBinder());
+          if ((0!=_reply.readInt())) {
+            cp.readFromParcel(_reply);
+          }
+        }
+        finally {
+          _reply.recycle();
+          _data.recycle();
+        }
+        return _result;
+      }
       public static android.aidl.tests.ITestService sDefaultImpl;
     }
     static final int TRANSACTION_UnimplementedMethod = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
@@ -3091,46 +3472,53 @@
     static final int TRANSACTION_ReverseIntEnum = (android.os.IBinder.FIRST_CALL_TRANSACTION + 23);
     static final int TRANSACTION_ReverseLongEnum = (android.os.IBinder.FIRST_CALL_TRANSACTION + 24);
     static final int TRANSACTION_GetOtherTestService = (android.os.IBinder.FIRST_CALL_TRANSACTION + 25);
-    static final int TRANSACTION_VerifyName = (android.os.IBinder.FIRST_CALL_TRANSACTION + 26);
-    static final int TRANSACTION_GetInterfaceArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 27);
-    static final int TRANSACTION_VerifyNamesWithInterfaceArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 28);
-    static final int TRANSACTION_GetNullableInterfaceArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 29);
-    static final int TRANSACTION_VerifyNamesWithNullableInterfaceArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 30);
-    static final int TRANSACTION_GetInterfaceList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 31);
-    static final int TRANSACTION_VerifyNamesWithInterfaceList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 32);
-    static final int TRANSACTION_ReverseStringList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 33);
-    static final int TRANSACTION_RepeatParcelFileDescriptor = (android.os.IBinder.FIRST_CALL_TRANSACTION + 34);
-    static final int TRANSACTION_ReverseParcelFileDescriptorArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 35);
-    static final int TRANSACTION_ThrowServiceException = (android.os.IBinder.FIRST_CALL_TRANSACTION + 36);
-    static final int TRANSACTION_RepeatNullableIntArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 37);
-    static final int TRANSACTION_RepeatNullableByteEnumArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 38);
-    static final int TRANSACTION_RepeatNullableIntEnumArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 39);
-    static final int TRANSACTION_RepeatNullableLongEnumArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 40);
-    static final int TRANSACTION_RepeatNullableString = (android.os.IBinder.FIRST_CALL_TRANSACTION + 41);
-    static final int TRANSACTION_RepeatNullableStringList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 42);
-    static final int TRANSACTION_RepeatNullableParcelable = (android.os.IBinder.FIRST_CALL_TRANSACTION + 43);
-    static final int TRANSACTION_RepeatNullableParcelableArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 44);
-    static final int TRANSACTION_RepeatNullableParcelableList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 45);
-    static final int TRANSACTION_TakesAnIBinder = (android.os.IBinder.FIRST_CALL_TRANSACTION + 46);
-    static final int TRANSACTION_TakesANullableIBinder = (android.os.IBinder.FIRST_CALL_TRANSACTION + 47);
-    static final int TRANSACTION_TakesAnIBinderList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 48);
-    static final int TRANSACTION_TakesANullableIBinderList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 49);
-    static final int TRANSACTION_RepeatUtf8CppString = (android.os.IBinder.FIRST_CALL_TRANSACTION + 50);
-    static final int TRANSACTION_RepeatNullableUtf8CppString = (android.os.IBinder.FIRST_CALL_TRANSACTION + 51);
-    static final int TRANSACTION_ReverseUtf8CppString = (android.os.IBinder.FIRST_CALL_TRANSACTION + 52);
-    static final int TRANSACTION_ReverseNullableUtf8CppString = (android.os.IBinder.FIRST_CALL_TRANSACTION + 53);
-    static final int TRANSACTION_ReverseUtf8CppStringList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 54);
-    static final int TRANSACTION_GetCallback = (android.os.IBinder.FIRST_CALL_TRANSACTION + 55);
-    static final int TRANSACTION_FillOutStructuredParcelable = (android.os.IBinder.FIRST_CALL_TRANSACTION + 56);
-    static final int TRANSACTION_RepeatExtendableParcelable = (android.os.IBinder.FIRST_CALL_TRANSACTION + 57);
-    static final int TRANSACTION_ReverseList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 58);
-    static final int TRANSACTION_ReverseIBinderArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 59);
-    static final int TRANSACTION_ReverseNullableIBinderArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 60);
-    static final int TRANSACTION_GetOldNameInterface = (android.os.IBinder.FIRST_CALL_TRANSACTION + 61);
-    static final int TRANSACTION_GetNewNameInterface = (android.os.IBinder.FIRST_CALL_TRANSACTION + 62);
-    static final int TRANSACTION_GetUnionTags = (android.os.IBinder.FIRST_CALL_TRANSACTION + 63);
-    static final int TRANSACTION_GetCppJavaTests = (android.os.IBinder.FIRST_CALL_TRANSACTION + 64);
-    static final int TRANSACTION_getBackendType = (android.os.IBinder.FIRST_CALL_TRANSACTION + 65);
+    static final int TRANSACTION_SetOtherTestService = (android.os.IBinder.FIRST_CALL_TRANSACTION + 26);
+    static final int TRANSACTION_VerifyName = (android.os.IBinder.FIRST_CALL_TRANSACTION + 27);
+    static final int TRANSACTION_GetInterfaceArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 28);
+    static final int TRANSACTION_VerifyNamesWithInterfaceArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 29);
+    static final int TRANSACTION_GetNullableInterfaceArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 30);
+    static final int TRANSACTION_VerifyNamesWithNullableInterfaceArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 31);
+    static final int TRANSACTION_GetInterfaceList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 32);
+    static final int TRANSACTION_VerifyNamesWithInterfaceList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 33);
+    static final int TRANSACTION_ReverseStringList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 34);
+    static final int TRANSACTION_RepeatParcelFileDescriptor = (android.os.IBinder.FIRST_CALL_TRANSACTION + 35);
+    static final int TRANSACTION_ReverseParcelFileDescriptorArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 36);
+    static final int TRANSACTION_ThrowServiceException = (android.os.IBinder.FIRST_CALL_TRANSACTION + 37);
+    static final int TRANSACTION_RepeatNullableIntArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 38);
+    static final int TRANSACTION_RepeatNullableByteEnumArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 39);
+    static final int TRANSACTION_RepeatNullableIntEnumArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 40);
+    static final int TRANSACTION_RepeatNullableLongEnumArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 41);
+    static final int TRANSACTION_RepeatNullableString = (android.os.IBinder.FIRST_CALL_TRANSACTION + 42);
+    static final int TRANSACTION_RepeatNullableStringList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 43);
+    static final int TRANSACTION_RepeatNullableParcelable = (android.os.IBinder.FIRST_CALL_TRANSACTION + 44);
+    static final int TRANSACTION_RepeatNullableParcelableArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 45);
+    static final int TRANSACTION_RepeatNullableParcelableList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 46);
+    static final int TRANSACTION_TakesAnIBinder = (android.os.IBinder.FIRST_CALL_TRANSACTION + 47);
+    static final int TRANSACTION_TakesANullableIBinder = (android.os.IBinder.FIRST_CALL_TRANSACTION + 48);
+    static final int TRANSACTION_TakesAnIBinderList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 49);
+    static final int TRANSACTION_TakesANullableIBinderList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 50);
+    static final int TRANSACTION_RepeatUtf8CppString = (android.os.IBinder.FIRST_CALL_TRANSACTION + 51);
+    static final int TRANSACTION_RepeatNullableUtf8CppString = (android.os.IBinder.FIRST_CALL_TRANSACTION + 52);
+    static final int TRANSACTION_ReverseUtf8CppString = (android.os.IBinder.FIRST_CALL_TRANSACTION + 53);
+    static final int TRANSACTION_ReverseNullableUtf8CppString = (android.os.IBinder.FIRST_CALL_TRANSACTION + 54);
+    static final int TRANSACTION_ReverseUtf8CppStringList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 55);
+    static final int TRANSACTION_GetCallback = (android.os.IBinder.FIRST_CALL_TRANSACTION + 56);
+    static final int TRANSACTION_FillOutStructuredParcelable = (android.os.IBinder.FIRST_CALL_TRANSACTION + 57);
+    static final int TRANSACTION_RepeatExtendableParcelable = (android.os.IBinder.FIRST_CALL_TRANSACTION + 58);
+    static final int TRANSACTION_ReverseList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 59);
+    static final int TRANSACTION_ReverseIBinderArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 60);
+    static final int TRANSACTION_ReverseNullableIBinderArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 61);
+    static final int TRANSACTION_GetOldNameInterface = (android.os.IBinder.FIRST_CALL_TRANSACTION + 62);
+    static final int TRANSACTION_GetNewNameInterface = (android.os.IBinder.FIRST_CALL_TRANSACTION + 63);
+    static final int TRANSACTION_GetUnionTags = (android.os.IBinder.FIRST_CALL_TRANSACTION + 64);
+    static final int TRANSACTION_GetCppJavaTests = (android.os.IBinder.FIRST_CALL_TRANSACTION + 65);
+    static final int TRANSACTION_getBackendType = (android.os.IBinder.FIRST_CALL_TRANSACTION + 66);
+    static final int TRANSACTION_GetCircular = (android.os.IBinder.FIRST_CALL_TRANSACTION + 67);
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 67;
+    }
     public static boolean setDefaultImpl(android.aidl.tests.ITestService impl) {
       // Only one user of this interface can use this function
       // at a time. This is a heuristic to detect if two different
@@ -3276,6 +3664,8 @@
   public long[] ReverseLongEnum(long[] input, long[] repeated) throws android.os.RemoteException;
   // Test that clients can send and receive Binders.
   public android.aidl.tests.INamedCallback GetOtherTestService(java.lang.String name) throws android.os.RemoteException;
+  // returns true if the same service is already registered with the same name
+  public boolean SetOtherTestService(java.lang.String name, android.aidl.tests.INamedCallback service) throws android.os.RemoteException;
   public boolean VerifyName(android.aidl.tests.INamedCallback service, java.lang.String name) throws android.os.RemoteException;
   public android.aidl.tests.INamedCallback[] GetInterfaceArray(java.lang.String[] names) throws android.os.RemoteException;
   public boolean VerifyNamesWithInterfaceArray(android.aidl.tests.INamedCallback[] services, java.lang.String[] names) throws android.os.RemoteException;
@@ -3324,6 +3714,7 @@
   // Retrieve the ICppJavaTests if the server supports it
   public android.os.IBinder GetCppJavaTests() throws android.os.RemoteException;
   public byte getBackendType() throws android.os.RemoteException;
+  public android.aidl.tests.ICircular GetCircular(android.aidl.tests.CircularParcelable cp) throws android.os.RemoteException;
   // Small empty parcelable for nullability check
   public static class Empty implements android.os.Parcelable
   {
@@ -3529,5 +3920,290 @@
       }
       return 0;
     }
+    // interface without I-
+    public interface Foo extends android.os.IInterface
+    {
+      /** Default implementation for Foo. */
+      public static class Default implements android.aidl.tests.ITestService.CompilerChecks.Foo
+      {
+        @Override
+        public android.os.IBinder asBinder() {
+          return null;
+        }
+      }
+      /** Local-side IPC implementation stub class. */
+      public static abstract class Stub extends android.os.Binder implements android.aidl.tests.ITestService.CompilerChecks.Foo
+      {
+        /** Construct the stub at attach it to the interface. */
+        public Stub()
+        {
+          this.attachInterface(this, DESCRIPTOR);
+        }
+        /**
+         * Cast an IBinder object into an android.aidl.tests.ITestService.CompilerChecks.Foo interface,
+         * generating a proxy if needed.
+         */
+        public static android.aidl.tests.ITestService.CompilerChecks.Foo asInterface(android.os.IBinder obj)
+        {
+          if ((obj==null)) {
+            return null;
+          }
+          android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
+          if (((iin!=null)&&(iin instanceof android.aidl.tests.ITestService.CompilerChecks.Foo))) {
+            return ((android.aidl.tests.ITestService.CompilerChecks.Foo)iin);
+          }
+          return new android.aidl.tests.ITestService.CompilerChecks.Foo.Stub.Proxy(obj);
+        }
+        @Override public android.os.IBinder asBinder()
+        {
+          return this;
+        }
+        /** @hide */
+        public static java.lang.String getDefaultTransactionName(int transactionCode)
+        {
+          switch (transactionCode)
+          {
+            default:
+            {
+              return null;
+            }
+          }
+        }
+        /** @hide */
+        public java.lang.String getTransactionName(int transactionCode)
+        {
+          return this.getDefaultTransactionName(transactionCode);
+        }
+        @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
+        {
+          java.lang.String descriptor = DESCRIPTOR;
+          switch (code)
+          {
+            case INTERFACE_TRANSACTION:
+            {
+              reply.writeString(descriptor);
+              return true;
+            }
+          }
+          switch (code)
+          {
+            default:
+            {
+              return super.onTransact(code, data, reply, flags);
+            }
+          }
+        }
+        private static class Proxy implements android.aidl.tests.ITestService.CompilerChecks.Foo
+        {
+          private android.os.IBinder mRemote;
+          Proxy(android.os.IBinder remote)
+          {
+            mRemote = remote;
+          }
+          @Override public android.os.IBinder asBinder()
+          {
+            return mRemote;
+          }
+          public java.lang.String getInterfaceDescriptor()
+          {
+            return DESCRIPTOR;
+          }
+        }
+        /** @hide */
+        public int getMaxTransactionId()
+        {
+          return 0;
+        }
+      }
+      public static final java.lang.String DESCRIPTOR = "android$aidl$tests$ITestService$CompilerChecks$Foo".replace('$', '.');
+    }
+    public static class HasDeprecated implements android.os.Parcelable
+    {
+      /** @deprecated field */
+      @Deprecated
+      public int deprecated = 0;
+      public static final android.os.Parcelable.Creator<HasDeprecated> CREATOR = new android.os.Parcelable.Creator<HasDeprecated>() {
+        @Override
+        public HasDeprecated createFromParcel(android.os.Parcel _aidl_source) {
+          HasDeprecated _aidl_out = new HasDeprecated();
+          _aidl_out.readFromParcel(_aidl_source);
+          return _aidl_out;
+        }
+        @Override
+        public HasDeprecated[] newArray(int _aidl_size) {
+          return new HasDeprecated[_aidl_size];
+        }
+      };
+      @Override public final void writeToParcel(android.os.Parcel _aidl_parcel, int _aidl_flag)
+      {
+        int _aidl_start_pos = _aidl_parcel.dataPosition();
+        _aidl_parcel.writeInt(0);
+        _aidl_parcel.writeInt(deprecated);
+        int _aidl_end_pos = _aidl_parcel.dataPosition();
+        _aidl_parcel.setDataPosition(_aidl_start_pos);
+        _aidl_parcel.writeInt(_aidl_end_pos - _aidl_start_pos);
+        _aidl_parcel.setDataPosition(_aidl_end_pos);
+      }
+      public final void readFromParcel(android.os.Parcel _aidl_parcel)
+      {
+        int _aidl_start_pos = _aidl_parcel.dataPosition();
+        int _aidl_parcelable_size = _aidl_parcel.readInt();
+        try {
+          if (_aidl_parcelable_size < 4) throw new android.os.BadParcelableException("Parcelable too small");;
+          if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return;
+          deprecated = _aidl_parcel.readInt();
+        } finally {
+          if (_aidl_start_pos > (Integer.MAX_VALUE - _aidl_parcelable_size)) {
+            throw new android.os.BadParcelableException("Overflow in the size of parcelable");
+          }
+          _aidl_parcel.setDataPosition(_aidl_start_pos + _aidl_parcelable_size);
+        }
+      }
+      @Override
+      public int describeContents() {
+        int _mask = 0;
+        return _mask;
+      }
+    }
+    public static final class UsingHasDeprecated implements android.os.Parcelable {
+      // tags for union fields
+      public final static int n = 0;  // int n;
+      public final static int m = 1;  // android.aidl.tests.ITestService.CompilerChecks.HasDeprecated m;
+
+      private int _tag;
+      private Object _value;
+
+      public UsingHasDeprecated() {
+        int _value = 0;
+        this._tag = n;
+        this._value = _value;
+      }
+
+      private UsingHasDeprecated(android.os.Parcel _aidl_parcel) {
+        readFromParcel(_aidl_parcel);
+      }
+
+      private UsingHasDeprecated(int _tag, Object _value) {
+        this._tag = _tag;
+        this._value = _value;
+      }
+
+      public int getTag() {
+        return _tag;
+      }
+
+      // int n;
+
+      public static UsingHasDeprecated n(int _value) {
+        return new UsingHasDeprecated(n, _value);
+      }
+
+      public int getN() {
+        _assertTag(n);
+        return (int) _value;
+      }
+
+      public void setN(int _value) {
+        _set(n, _value);
+      }
+
+      // android.aidl.tests.ITestService.CompilerChecks.HasDeprecated m;
+
+      public static UsingHasDeprecated m(android.aidl.tests.ITestService.CompilerChecks.HasDeprecated _value) {
+        return new UsingHasDeprecated(m, _value);
+      }
+
+      public android.aidl.tests.ITestService.CompilerChecks.HasDeprecated getM() {
+        _assertTag(m);
+        return (android.aidl.tests.ITestService.CompilerChecks.HasDeprecated) _value;
+      }
+
+      public void setM(android.aidl.tests.ITestService.CompilerChecks.HasDeprecated _value) {
+        _set(m, _value);
+      }
+
+      public static final android.os.Parcelable.Creator<UsingHasDeprecated> CREATOR = new android.os.Parcelable.Creator<UsingHasDeprecated>() {
+        @Override
+        public UsingHasDeprecated createFromParcel(android.os.Parcel _aidl_source) {
+          return new UsingHasDeprecated(_aidl_source);
+        }
+        @Override
+        public UsingHasDeprecated[] newArray(int _aidl_size) {
+          return new UsingHasDeprecated[_aidl_size];
+        }
+      };
+
+      @Override
+      public final void writeToParcel(android.os.Parcel _aidl_parcel, int _aidl_flag) {
+        _aidl_parcel.writeInt(_tag);
+        switch (_tag) {
+        case n:
+          _aidl_parcel.writeInt(getN());
+          break;
+        case m:
+          _aidl_parcel.writeTypedObject(getM(), _aidl_flag);
+          break;
+        }
+      }
+
+      public void readFromParcel(android.os.Parcel _aidl_parcel) {
+        int _aidl_tag;
+        _aidl_tag = _aidl_parcel.readInt();
+        switch (_aidl_tag) {
+        case n: {
+          int _aidl_value;
+          _aidl_value = _aidl_parcel.readInt();
+          _set(_aidl_tag, _aidl_value);
+          return; }
+        case m: {
+          android.aidl.tests.ITestService.CompilerChecks.HasDeprecated _aidl_value;
+          _aidl_value = _aidl_parcel.readTypedObject(android.aidl.tests.ITestService.CompilerChecks.HasDeprecated.CREATOR);
+          _set(_aidl_tag, _aidl_value);
+          return; }
+        }
+        throw new IllegalArgumentException("union: unknown tag: " + _aidl_tag);
+      }
+
+      @Override
+      public int describeContents() {
+        int _mask = 0;
+        switch (getTag()) {
+        case m:
+          _mask |= describeContents(getM());
+          break;
+        }
+        return _mask;
+      }
+      private int describeContents(Object _v) {
+        if (_v == null) return 0;
+        if (_v instanceof android.os.Parcelable) {
+          return ((android.os.Parcelable) _v).describeContents();
+        }
+        return 0;
+      }
+
+      private void _assertTag(int tag) {
+        if (getTag() != tag) {
+          throw new IllegalStateException("bad access: " + _tagString(tag) + ", " + _tagString(getTag()) + " is available.");
+        }
+      }
+
+      private String _tagString(int _tag) {
+        switch (_tag) {
+        case n: return "n";
+        case m: return "m";
+        }
+        throw new IllegalStateException("unknown field: " + _tag);
+      }
+
+      private void _set(int _tag, Object _value) {
+        this._tag = _tag;
+        this._value = _value;
+      }
+      public static @interface Tag {
+        public static final int n = 0;
+        public static final int m = 1;
+      }
+    }
   }
 }
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java.d b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java.d
index 561c508..34f4255 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java.d
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java.d
@@ -2,6 +2,8 @@
   system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
   system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
   system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
   system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
   system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
   system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java
index 6a2564d..cb240f4 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java
@@ -80,6 +80,22 @@
       {
         return this;
       }
+      /** @hide */
+      public static java.lang.String getDefaultTransactionName(int transactionCode)
+      {
+        switch (transactionCode)
+        {
+          default:
+          {
+            return null;
+          }
+        }
+      }
+      /** @hide */
+      public java.lang.String getTransactionName(int transactionCode)
+      {
+        return this.getDefaultTransactionName(transactionCode);
+      }
       @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
       {
         java.lang.String descriptor = DESCRIPTOR;
@@ -115,6 +131,11 @@
           return DESCRIPTOR;
         }
       }
+      /** @hide */
+      public int getMaxTransactionId()
+      {
+        return 0;
+      }
     }
     public static final java.lang.String DESCRIPTOR = "android$aidl$tests$ListOfInterfaces$IEmptyInterface".replace('$', '.');
   }
@@ -159,6 +180,26 @@
       {
         return this;
       }
+      /** @hide */
+      public static java.lang.String getDefaultTransactionName(int transactionCode)
+      {
+        switch (transactionCode)
+        {
+          case TRANSACTION_methodWithInterfaces:
+          {
+            return "methodWithInterfaces";
+          }
+          default:
+          {
+            return null;
+          }
+        }
+      }
+      /** @hide */
+      public java.lang.String getTransactionName(int transactionCode)
+      {
+        return this.getDefaultTransactionName(transactionCode);
+      }
       @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
       {
         java.lang.String descriptor = DESCRIPTOR;
@@ -254,6 +295,11 @@
         }
       }
       static final int TRANSACTION_methodWithInterfaces = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+      /** @hide */
+      public int getMaxTransactionId()
+      {
+        return 0;
+      }
     }
     public static final java.lang.String DESCRIPTOR = "android$aidl$tests$ListOfInterfaces$IMyInterface".replace('$', '.');
     public java.util.List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> methodWithInterfaces(android.aidl.tests.ListOfInterfaces.IEmptyInterface iface, android.aidl.tests.ListOfInterfaces.IEmptyInterface nullable_iface, java.util.List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> iface_list_in, java.util.List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> iface_list_out, java.util.List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> iface_list_inout, java.util.List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> nullable_iface_list_in, java.util.List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> nullable_iface_list_out, java.util.List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> nullable_iface_list_inout) throws android.os.RemoteException;
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/nested/INestedService.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/nested/INestedService.java
index 7fdce35..004f0e3 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/nested/INestedService.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/nested/INestedService.java
@@ -46,6 +46,30 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_flipStatus:
+        {
+          return "flipStatus";
+        }
+        case TRANSACTION_flipStatusWithCallback:
+        {
+          return "flipStatusWithCallback";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -142,6 +166,11 @@
     }
     static final int TRANSACTION_flipStatus = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
     static final int TRANSACTION_flipStatusWithCallback = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 1;
+    }
   }
   public static final java.lang.String DESCRIPTOR = "android$aidl$tests$nested$INestedService".replace('$', '.');
   public android.aidl.tests.nested.INestedService.Result flipStatus(android.aidl.tests.nested.ParcelableWithNested p) throws android.os.RemoteException;
@@ -232,6 +261,26 @@
       {
         return this;
       }
+      /** @hide */
+      public static java.lang.String getDefaultTransactionName(int transactionCode)
+      {
+        switch (transactionCode)
+        {
+          case TRANSACTION_done:
+          {
+            return "done";
+          }
+          default:
+          {
+            return null;
+          }
+        }
+      }
+      /** @hide */
+      public java.lang.String getTransactionName(int transactionCode)
+      {
+        return this.getDefaultTransactionName(transactionCode);
+      }
       @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
       {
         java.lang.String descriptor = DESCRIPTOR;
@@ -296,6 +345,11 @@
         }
       }
       static final int TRANSACTION_done = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+      /** @hide */
+      public int getMaxTransactionId()
+      {
+        return 0;
+      }
     }
     public static final java.lang.String DESCRIPTOR = "android$aidl$tests$nested$INestedService$ICallback".replace('$', '.');
     public void done(byte status) throws android.os.RemoteException;
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/CircularParcelable.cpp b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/CircularParcelable.cpp
new file mode 100644
index 0000000..77acb17
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/CircularParcelable.cpp
@@ -0,0 +1,64 @@
+#include "aidl/android/aidl/tests/CircularParcelable.h"
+
+#include <android/binder_parcel_utils.h>
+#include <aidl/android/aidl/tests/BnCircular.h>
+#include <aidl/android/aidl/tests/BnNamedCallback.h>
+#include <aidl/android/aidl/tests/BnNewName.h>
+#include <aidl/android/aidl/tests/BnOldName.h>
+#include <aidl/android/aidl/tests/BnTestService.h>
+#include <aidl/android/aidl/tests/BpCircular.h>
+#include <aidl/android/aidl/tests/BpNamedCallback.h>
+#include <aidl/android/aidl/tests/BpNewName.h>
+#include <aidl/android/aidl/tests/BpOldName.h>
+#include <aidl/android/aidl/tests/BpTestService.h>
+#include <aidl/android/aidl/tests/ICircular.h>
+#include <aidl/android/aidl/tests/INamedCallback.h>
+#include <aidl/android/aidl/tests/INewName.h>
+#include <aidl/android/aidl/tests/IOldName.h>
+#include <aidl/android/aidl/tests/ITestService.h>
+
+namespace aidl {
+namespace android {
+namespace aidl {
+namespace tests {
+const char* CircularParcelable::descriptor = "android.aidl.tests.CircularParcelable";
+
+binder_status_t CircularParcelable::readFromParcel(const AParcel* _aidl_parcel) {
+  binder_status_t _aidl_ret_status = STATUS_OK;
+  int32_t _aidl_start_pos = AParcel_getDataPosition(_aidl_parcel);
+  int32_t _aidl_parcelable_size = 0;
+  _aidl_ret_status = AParcel_readInt32(_aidl_parcel, &_aidl_parcelable_size);
+  if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status;
+
+  if (_aidl_parcelable_size < 4) return STATUS_BAD_VALUE;
+  if (_aidl_start_pos > INT32_MAX - _aidl_parcelable_size) return STATUS_BAD_VALUE;
+  if (AParcel_getDataPosition(_aidl_parcel) - _aidl_start_pos >= _aidl_parcelable_size) {
+    AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size);
+    return _aidl_ret_status;
+  }
+  _aidl_ret_status = ::ndk::AParcel_readNullableData(_aidl_parcel, &testService);
+  if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status;
+
+  AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size);
+  return _aidl_ret_status;
+}
+binder_status_t CircularParcelable::writeToParcel(AParcel* _aidl_parcel) const {
+  binder_status_t _aidl_ret_status;
+  size_t _aidl_start_pos = AParcel_getDataPosition(_aidl_parcel);
+  _aidl_ret_status = AParcel_writeInt32(_aidl_parcel, 0);
+  if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status;
+
+  _aidl_ret_status = ::ndk::AParcel_writeNullableData(_aidl_parcel, testService);
+  if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status;
+
+  size_t _aidl_end_pos = AParcel_getDataPosition(_aidl_parcel);
+  AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos);
+  AParcel_writeInt32(_aidl_parcel, _aidl_end_pos - _aidl_start_pos);
+  AParcel_setDataPosition(_aidl_parcel, _aidl_end_pos);
+  return _aidl_ret_status;
+}
+
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+}  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/CircularParcelable.cpp.d b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/CircularParcelable.cpp.d
new file mode 100644
index 0000000..a455283
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/CircularParcelable.cpp.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-ndk-source/gen/android/aidl/tests/CircularParcelable.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ICircular.cpp b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ICircular.cpp
new file mode 100644
index 0000000..6a62699
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ICircular.cpp
@@ -0,0 +1,153 @@
+#include "aidl/android/aidl/tests/ICircular.h"
+
+#include <android/binder_parcel_utils.h>
+#include <aidl/android/aidl/tests/BnCircular.h>
+#include <aidl/android/aidl/tests/BnNamedCallback.h>
+#include <aidl/android/aidl/tests/BnNewName.h>
+#include <aidl/android/aidl/tests/BnOldName.h>
+#include <aidl/android/aidl/tests/BnTestService.h>
+#include <aidl/android/aidl/tests/BpCircular.h>
+#include <aidl/android/aidl/tests/BpNamedCallback.h>
+#include <aidl/android/aidl/tests/BpNewName.h>
+#include <aidl/android/aidl/tests/BpOldName.h>
+#include <aidl/android/aidl/tests/BpTestService.h>
+#include <aidl/android/aidl/tests/INamedCallback.h>
+#include <aidl/android/aidl/tests/INewName.h>
+#include <aidl/android/aidl/tests/IOldName.h>
+#include <aidl/android/aidl/tests/ITestService.h>
+
+namespace aidl {
+namespace android {
+namespace aidl {
+namespace tests {
+static binder_status_t _aidl_android_aidl_tests_ICircular_onTransact(AIBinder* _aidl_binder, transaction_code_t _aidl_code, const AParcel* _aidl_in, AParcel* _aidl_out) {
+  (void)_aidl_in;
+  (void)_aidl_out;
+  binder_status_t _aidl_ret_status = STATUS_UNKNOWN_TRANSACTION;
+  std::shared_ptr<BnCircular> _aidl_impl = std::static_pointer_cast<BnCircular>(::ndk::ICInterface::asInterface(_aidl_binder));
+  switch (_aidl_code) {
+    case (FIRST_CALL_TRANSACTION + 0 /*GetTestService*/): {
+      std::shared_ptr<::aidl::android::aidl::tests::ITestService> _aidl_return;
+
+      ::ndk::ScopedAStatus _aidl_status = _aidl_impl->GetTestService(&_aidl_return);
+      _aidl_ret_status = AParcel_writeStatusHeader(_aidl_out, _aidl_status.get());
+      if (_aidl_ret_status != STATUS_OK) break;
+
+      if (!AStatus_isOk(_aidl_status.get())) break;
+
+      _aidl_ret_status = ::ndk::AParcel_writeNullableData(_aidl_out, _aidl_return);
+      if (_aidl_ret_status != STATUS_OK) break;
+
+      break;
+    }
+  }
+  return _aidl_ret_status;
+}
+
+static AIBinder_Class* _g_aidl_android_aidl_tests_ICircular_clazz = ::ndk::ICInterface::defineClass(ICircular::descriptor, _aidl_android_aidl_tests_ICircular_onTransact);
+
+BpCircular::BpCircular(const ::ndk::SpAIBinder& binder) : BpCInterface(binder) {}
+BpCircular::~BpCircular() {}
+
+::ndk::ScopedAStatus BpCircular::GetTestService(std::shared_ptr<::aidl::android::aidl::tests::ITestService>* _aidl_return) {
+  binder_status_t _aidl_ret_status = STATUS_OK;
+  ::ndk::ScopedAStatus _aidl_status;
+  ::ndk::ScopedAParcel _aidl_in;
+  ::ndk::ScopedAParcel _aidl_out;
+
+  _aidl_ret_status = AIBinder_prepareTransaction(asBinder().get(), _aidl_in.getR());
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_ret_status = AIBinder_transact(
+    asBinder().get(),
+    (FIRST_CALL_TRANSACTION + 0 /*GetTestService*/),
+    _aidl_in.getR(),
+    _aidl_out.getR(),
+    0
+    #ifdef BINDER_STABILITY_SUPPORT
+    | FLAG_PRIVATE_LOCAL
+    #endif  // BINDER_STABILITY_SUPPORT
+    );
+  if (_aidl_ret_status == STATUS_UNKNOWN_TRANSACTION && ICircular::getDefaultImpl()) {
+    _aidl_status = ICircular::getDefaultImpl()->GetTestService(_aidl_return);
+    goto _aidl_status_return;
+  }
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_ret_status = AParcel_readStatusHeader(_aidl_out.get(), _aidl_status.getR());
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  if (!AStatus_isOk(_aidl_status.get())) goto _aidl_status_return;
+  _aidl_ret_status = ::ndk::AParcel_readNullableData(_aidl_out.get(), _aidl_return);
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_error:
+  _aidl_status.set(AStatus_fromStatus(_aidl_ret_status));
+  _aidl_status_return:
+  return _aidl_status;
+}
+// Source for BnCircular
+BnCircular::BnCircular() {}
+BnCircular::~BnCircular() {}
+::ndk::SpAIBinder BnCircular::createBinder() {
+  AIBinder* binder = AIBinder_new(_g_aidl_android_aidl_tests_ICircular_clazz, static_cast<void*>(this));
+  #ifdef BINDER_STABILITY_SUPPORT
+  AIBinder_markCompilationUnitStability(binder);
+  #endif  // BINDER_STABILITY_SUPPORT
+  return ::ndk::SpAIBinder(binder);
+}
+// Source for ICircular
+const char* ICircular::descriptor = "android.aidl.tests.ICircular";
+ICircular::ICircular() {}
+ICircular::~ICircular() {}
+
+
+std::shared_ptr<ICircular> ICircular::fromBinder(const ::ndk::SpAIBinder& binder) {
+  if (!AIBinder_associateClass(binder.get(), _g_aidl_android_aidl_tests_ICircular_clazz)) { return nullptr; }
+  std::shared_ptr<::ndk::ICInterface> interface = ::ndk::ICInterface::asInterface(binder.get());
+  if (interface) {
+    return std::static_pointer_cast<ICircular>(interface);
+  }
+  return ::ndk::SharedRefBase::make<BpCircular>(binder);
+}
+
+binder_status_t ICircular::writeToParcel(AParcel* parcel, const std::shared_ptr<ICircular>& instance) {
+  return AParcel_writeStrongBinder(parcel, instance ? instance->asBinder().get() : nullptr);
+}
+binder_status_t ICircular::readFromParcel(const AParcel* parcel, std::shared_ptr<ICircular>* instance) {
+  ::ndk::SpAIBinder binder;
+  binder_status_t status = AParcel_readStrongBinder(parcel, binder.getR());
+  if (status != STATUS_OK) return status;
+  *instance = ICircular::fromBinder(binder);
+  return STATUS_OK;
+}
+bool ICircular::setDefaultImpl(const std::shared_ptr<ICircular>& impl) {
+  // Only one user of this interface can use this function
+  // at a time. This is a heuristic to detect if two different
+  // users in the same process use this function.
+  assert(!ICircular::default_impl);
+  if (impl) {
+    ICircular::default_impl = impl;
+    return true;
+  }
+  return false;
+}
+const std::shared_ptr<ICircular>& ICircular::getDefaultImpl() {
+  return ICircular::default_impl;
+}
+std::shared_ptr<ICircular> ICircular::default_impl = nullptr;
+::ndk::ScopedAStatus ICircularDefault::GetTestService(std::shared_ptr<::aidl::android::aidl::tests::ITestService>* /*_aidl_return*/) {
+  ::ndk::ScopedAStatus _aidl_status;
+  _aidl_status.set(AStatus_fromStatus(STATUS_UNKNOWN_TRANSACTION));
+  return _aidl_status;
+}
+::ndk::SpAIBinder ICircularDefault::asBinder() {
+  return ::ndk::SpAIBinder();
+}
+bool ICircularDefault::isRemote() {
+  return false;
+}
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+}  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ICircular.cpp.d b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ICircular.cpp.d
new file mode 100644
index 0000000..3c20e3a
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ICircular.cpp.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-ndk-source/gen/android/aidl/tests/ICircular.cpp : \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp
index 8c9ff0a..bc34377 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp
@@ -1,14 +1,17 @@
 #include "aidl/android/aidl/tests/ITestService.h"
 
 #include <android/binder_parcel_utils.h>
+#include <aidl/android/aidl/tests/BnCircular.h>
 #include <aidl/android/aidl/tests/BnNamedCallback.h>
 #include <aidl/android/aidl/tests/BnNewName.h>
 #include <aidl/android/aidl/tests/BnOldName.h>
 #include <aidl/android/aidl/tests/BnTestService.h>
+#include <aidl/android/aidl/tests/BpCircular.h>
 #include <aidl/android/aidl/tests/BpNamedCallback.h>
 #include <aidl/android/aidl/tests/BpNewName.h>
 #include <aidl/android/aidl/tests/BpOldName.h>
 #include <aidl/android/aidl/tests/BpTestService.h>
+#include <aidl/android/aidl/tests/ICircular.h>
 #include <aidl/android/aidl/tests/INamedCallback.h>
 #include <aidl/android/aidl/tests/INewName.h>
 #include <aidl/android/aidl/tests/IOldName.h>
@@ -550,7 +553,29 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 26 /*VerifyName*/): {
+    case (FIRST_CALL_TRANSACTION + 26 /*SetOtherTestService*/): {
+      std::string in_name;
+      std::shared_ptr<::aidl::android::aidl::tests::INamedCallback> in_service;
+      bool _aidl_return;
+
+      _aidl_ret_status = ::ndk::AParcel_readData(_aidl_in, &in_name);
+      if (_aidl_ret_status != STATUS_OK) break;
+
+      _aidl_ret_status = ::ndk::AParcel_readData(_aidl_in, &in_service);
+      if (_aidl_ret_status != STATUS_OK) break;
+
+      ::ndk::ScopedAStatus _aidl_status = _aidl_impl->SetOtherTestService(in_name, in_service, &_aidl_return);
+      _aidl_ret_status = AParcel_writeStatusHeader(_aidl_out, _aidl_status.get());
+      if (_aidl_ret_status != STATUS_OK) break;
+
+      if (!AStatus_isOk(_aidl_status.get())) break;
+
+      _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_out, _aidl_return);
+      if (_aidl_ret_status != STATUS_OK) break;
+
+      break;
+    }
+    case (FIRST_CALL_TRANSACTION + 27 /*VerifyName*/): {
       std::shared_ptr<::aidl::android::aidl::tests::INamedCallback> in_service;
       std::string in_name;
       bool _aidl_return;
@@ -572,7 +597,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 27 /*GetInterfaceArray*/): {
+    case (FIRST_CALL_TRANSACTION + 28 /*GetInterfaceArray*/): {
       std::vector<std::string> in_names;
       std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>> _aidl_return;
 
@@ -590,7 +615,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 28 /*VerifyNamesWithInterfaceArray*/): {
+    case (FIRST_CALL_TRANSACTION + 29 /*VerifyNamesWithInterfaceArray*/): {
       std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>> in_services;
       std::vector<std::string> in_names;
       bool _aidl_return;
@@ -612,7 +637,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 29 /*GetNullableInterfaceArray*/): {
+    case (FIRST_CALL_TRANSACTION + 30 /*GetNullableInterfaceArray*/): {
       std::optional<std::vector<std::optional<std::string>>> in_names;
       std::optional<std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>>> _aidl_return;
 
@@ -630,7 +655,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 30 /*VerifyNamesWithNullableInterfaceArray*/): {
+    case (FIRST_CALL_TRANSACTION + 31 /*VerifyNamesWithNullableInterfaceArray*/): {
       std::optional<std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>>> in_services;
       std::optional<std::vector<std::optional<std::string>>> in_names;
       bool _aidl_return;
@@ -652,7 +677,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 31 /*GetInterfaceList*/): {
+    case (FIRST_CALL_TRANSACTION + 32 /*GetInterfaceList*/): {
       std::optional<std::vector<std::optional<std::string>>> in_names;
       std::optional<std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>>> _aidl_return;
 
@@ -670,7 +695,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 32 /*VerifyNamesWithInterfaceList*/): {
+    case (FIRST_CALL_TRANSACTION + 33 /*VerifyNamesWithInterfaceList*/): {
       std::optional<std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>>> in_services;
       std::optional<std::vector<std::optional<std::string>>> in_names;
       bool _aidl_return;
@@ -692,7 +717,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 33 /*ReverseStringList*/): {
+    case (FIRST_CALL_TRANSACTION + 34 /*ReverseStringList*/): {
       std::vector<std::string> in_input;
       std::vector<std::string> out_repeated;
       std::vector<std::string> _aidl_return;
@@ -714,7 +739,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 34 /*RepeatParcelFileDescriptor*/): {
+    case (FIRST_CALL_TRANSACTION + 35 /*RepeatParcelFileDescriptor*/): {
       ::ndk::ScopedFileDescriptor in_read;
       ::ndk::ScopedFileDescriptor _aidl_return;
 
@@ -732,7 +757,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 35 /*ReverseParcelFileDescriptorArray*/): {
+    case (FIRST_CALL_TRANSACTION + 36 /*ReverseParcelFileDescriptorArray*/): {
       std::vector<::ndk::ScopedFileDescriptor> in_input;
       std::vector<::ndk::ScopedFileDescriptor> out_repeated;
       std::vector<::ndk::ScopedFileDescriptor> _aidl_return;
@@ -757,7 +782,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 36 /*ThrowServiceException*/): {
+    case (FIRST_CALL_TRANSACTION + 37 /*ThrowServiceException*/): {
       int32_t in_code;
 
       _aidl_ret_status = ::ndk::AParcel_readData(_aidl_in, &in_code);
@@ -771,7 +796,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 37 /*RepeatNullableIntArray*/): {
+    case (FIRST_CALL_TRANSACTION + 38 /*RepeatNullableIntArray*/): {
       std::optional<std::vector<int32_t>> in_input;
       std::optional<std::vector<int32_t>> _aidl_return;
 
@@ -789,7 +814,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 38 /*RepeatNullableByteEnumArray*/): {
+    case (FIRST_CALL_TRANSACTION + 39 /*RepeatNullableByteEnumArray*/): {
       std::optional<std::vector<::aidl::android::aidl::tests::ByteEnum>> in_input;
       std::optional<std::vector<::aidl::android::aidl::tests::ByteEnum>> _aidl_return;
 
@@ -807,7 +832,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 39 /*RepeatNullableIntEnumArray*/): {
+    case (FIRST_CALL_TRANSACTION + 40 /*RepeatNullableIntEnumArray*/): {
       std::optional<std::vector<::aidl::android::aidl::tests::IntEnum>> in_input;
       std::optional<std::vector<::aidl::android::aidl::tests::IntEnum>> _aidl_return;
 
@@ -825,7 +850,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 40 /*RepeatNullableLongEnumArray*/): {
+    case (FIRST_CALL_TRANSACTION + 41 /*RepeatNullableLongEnumArray*/): {
       std::optional<std::vector<::aidl::android::aidl::tests::LongEnum>> in_input;
       std::optional<std::vector<::aidl::android::aidl::tests::LongEnum>> _aidl_return;
 
@@ -843,7 +868,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 41 /*RepeatNullableString*/): {
+    case (FIRST_CALL_TRANSACTION + 42 /*RepeatNullableString*/): {
       std::optional<std::string> in_input;
       std::optional<std::string> _aidl_return;
 
@@ -861,7 +886,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 42 /*RepeatNullableStringList*/): {
+    case (FIRST_CALL_TRANSACTION + 43 /*RepeatNullableStringList*/): {
       std::optional<std::vector<std::optional<std::string>>> in_input;
       std::optional<std::vector<std::optional<std::string>>> _aidl_return;
 
@@ -879,7 +904,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 43 /*RepeatNullableParcelable*/): {
+    case (FIRST_CALL_TRANSACTION + 44 /*RepeatNullableParcelable*/): {
       std::optional<::aidl::android::aidl::tests::ITestService::Empty> in_input;
       std::optional<::aidl::android::aidl::tests::ITestService::Empty> _aidl_return;
 
@@ -897,7 +922,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 44 /*RepeatNullableParcelableArray*/): {
+    case (FIRST_CALL_TRANSACTION + 45 /*RepeatNullableParcelableArray*/): {
       std::optional<std::vector<std::optional<::aidl::android::aidl::tests::ITestService::Empty>>> in_input;
       std::optional<std::vector<std::optional<::aidl::android::aidl::tests::ITestService::Empty>>> _aidl_return;
 
@@ -915,7 +940,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 45 /*RepeatNullableParcelableList*/): {
+    case (FIRST_CALL_TRANSACTION + 46 /*RepeatNullableParcelableList*/): {
       std::optional<std::vector<std::optional<::aidl::android::aidl::tests::ITestService::Empty>>> in_input;
       std::optional<std::vector<std::optional<::aidl::android::aidl::tests::ITestService::Empty>>> _aidl_return;
 
@@ -933,7 +958,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 46 /*TakesAnIBinder*/): {
+    case (FIRST_CALL_TRANSACTION + 47 /*TakesAnIBinder*/): {
       ::ndk::SpAIBinder in_input;
 
       _aidl_ret_status = ::ndk::AParcel_readData(_aidl_in, &in_input);
@@ -947,7 +972,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 47 /*TakesANullableIBinder*/): {
+    case (FIRST_CALL_TRANSACTION + 48 /*TakesANullableIBinder*/): {
       ::ndk::SpAIBinder in_input;
 
       _aidl_ret_status = ::ndk::AParcel_readNullableData(_aidl_in, &in_input);
@@ -961,7 +986,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 48 /*TakesAnIBinderList*/): {
+    case (FIRST_CALL_TRANSACTION + 49 /*TakesAnIBinderList*/): {
       std::vector<::ndk::SpAIBinder> in_input;
 
       _aidl_ret_status = ::ndk::AParcel_readData(_aidl_in, &in_input);
@@ -975,7 +1000,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 49 /*TakesANullableIBinderList*/): {
+    case (FIRST_CALL_TRANSACTION + 50 /*TakesANullableIBinderList*/): {
       std::optional<std::vector<::ndk::SpAIBinder>> in_input;
 
       _aidl_ret_status = ::ndk::AParcel_readNullableData(_aidl_in, &in_input);
@@ -989,7 +1014,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 50 /*RepeatUtf8CppString*/): {
+    case (FIRST_CALL_TRANSACTION + 51 /*RepeatUtf8CppString*/): {
       std::string in_token;
       std::string _aidl_return;
 
@@ -1007,7 +1032,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 51 /*RepeatNullableUtf8CppString*/): {
+    case (FIRST_CALL_TRANSACTION + 52 /*RepeatNullableUtf8CppString*/): {
       std::optional<std::string> in_token;
       std::optional<std::string> _aidl_return;
 
@@ -1025,7 +1050,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 52 /*ReverseUtf8CppString*/): {
+    case (FIRST_CALL_TRANSACTION + 53 /*ReverseUtf8CppString*/): {
       std::vector<std::string> in_input;
       std::vector<std::string> out_repeated;
       std::vector<std::string> _aidl_return;
@@ -1050,7 +1075,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 53 /*ReverseNullableUtf8CppString*/): {
+    case (FIRST_CALL_TRANSACTION + 54 /*ReverseNullableUtf8CppString*/): {
       std::optional<std::vector<std::optional<std::string>>> in_input;
       std::optional<std::vector<std::optional<std::string>>> out_repeated;
       std::optional<std::vector<std::optional<std::string>>> _aidl_return;
@@ -1075,7 +1100,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 54 /*ReverseUtf8CppStringList*/): {
+    case (FIRST_CALL_TRANSACTION + 55 /*ReverseUtf8CppStringList*/): {
       std::optional<std::vector<std::optional<std::string>>> in_input;
       std::optional<std::vector<std::optional<std::string>>> out_repeated;
       std::optional<std::vector<std::optional<std::string>>> _aidl_return;
@@ -1097,7 +1122,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 55 /*GetCallback*/): {
+    case (FIRST_CALL_TRANSACTION + 56 /*GetCallback*/): {
       bool in_return_null;
       std::shared_ptr<::aidl::android::aidl::tests::INamedCallback> _aidl_return;
 
@@ -1115,7 +1140,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 56 /*FillOutStructuredParcelable*/): {
+    case (FIRST_CALL_TRANSACTION + 57 /*FillOutStructuredParcelable*/): {
       ::aidl::android::aidl::tests::StructuredParcelable in_parcel;
 
       _aidl_ret_status = ::ndk::AParcel_readData(_aidl_in, &in_parcel);
@@ -1132,7 +1157,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 57 /*RepeatExtendableParcelable*/): {
+    case (FIRST_CALL_TRANSACTION + 58 /*RepeatExtendableParcelable*/): {
       ::aidl::android::aidl::tests::extension::ExtendableParcelable in_ep;
       ::aidl::android::aidl::tests::extension::ExtendableParcelable out_ep2;
 
@@ -1150,7 +1175,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 58 /*ReverseList*/): {
+    case (FIRST_CALL_TRANSACTION + 59 /*ReverseList*/): {
       ::aidl::android::aidl::tests::RecursiveList in_list;
       ::aidl::android::aidl::tests::RecursiveList _aidl_return;
 
@@ -1168,7 +1193,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 59 /*ReverseIBinderArray*/): {
+    case (FIRST_CALL_TRANSACTION + 60 /*ReverseIBinderArray*/): {
       std::vector<::ndk::SpAIBinder> in_input;
       std::vector<::ndk::SpAIBinder> out_repeated;
       std::vector<::ndk::SpAIBinder> _aidl_return;
@@ -1193,7 +1218,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 60 /*ReverseNullableIBinderArray*/): {
+    case (FIRST_CALL_TRANSACTION + 61 /*ReverseNullableIBinderArray*/): {
       std::optional<std::vector<::ndk::SpAIBinder>> in_input;
       std::optional<std::vector<::ndk::SpAIBinder>> out_repeated;
       std::optional<std::vector<::ndk::SpAIBinder>> _aidl_return;
@@ -1218,7 +1243,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 61 /*GetOldNameInterface*/): {
+    case (FIRST_CALL_TRANSACTION + 62 /*GetOldNameInterface*/): {
       std::shared_ptr<::aidl::android::aidl::tests::IOldName> _aidl_return;
 
       ::ndk::ScopedAStatus _aidl_status = _aidl_impl->GetOldNameInterface(&_aidl_return);
@@ -1232,7 +1257,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 62 /*GetNewNameInterface*/): {
+    case (FIRST_CALL_TRANSACTION + 63 /*GetNewNameInterface*/): {
       std::shared_ptr<::aidl::android::aidl::tests::INewName> _aidl_return;
 
       ::ndk::ScopedAStatus _aidl_status = _aidl_impl->GetNewNameInterface(&_aidl_return);
@@ -1246,7 +1271,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 63 /*GetUnionTags*/): {
+    case (FIRST_CALL_TRANSACTION + 64 /*GetUnionTags*/): {
       std::vector<::aidl::android::aidl::tests::Union> in_input;
       std::vector<::aidl::android::aidl::tests::Union::Tag> _aidl_return;
 
@@ -1264,7 +1289,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 64 /*GetCppJavaTests*/): {
+    case (FIRST_CALL_TRANSACTION + 65 /*GetCppJavaTests*/): {
       ::ndk::SpAIBinder _aidl_return;
 
       ::ndk::ScopedAStatus _aidl_status = _aidl_impl->GetCppJavaTests(&_aidl_return);
@@ -1278,7 +1303,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 65 /*getBackendType*/): {
+    case (FIRST_CALL_TRANSACTION + 66 /*getBackendType*/): {
       ::aidl::android::aidl::tests::BackendType _aidl_return;
 
       ::ndk::ScopedAStatus _aidl_status = _aidl_impl->getBackendType(&_aidl_return);
@@ -1292,6 +1317,24 @@
 
       break;
     }
+    case (FIRST_CALL_TRANSACTION + 67 /*GetCircular*/): {
+      ::aidl::android::aidl::tests::CircularParcelable out_cp;
+      std::shared_ptr<::aidl::android::aidl::tests::ICircular> _aidl_return;
+
+      ::ndk::ScopedAStatus _aidl_status = _aidl_impl->GetCircular(&out_cp, &_aidl_return);
+      _aidl_ret_status = AParcel_writeStatusHeader(_aidl_out, _aidl_status.get());
+      if (_aidl_ret_status != STATUS_OK) break;
+
+      if (!AStatus_isOk(_aidl_status.get())) break;
+
+      _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_out, _aidl_return);
+      if (_aidl_ret_status != STATUS_OK) break;
+
+      _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_out, out_cp);
+      if (_aidl_ret_status != STATUS_OK) break;
+
+      break;
+    }
   }
   return _aidl_ret_status;
 }
@@ -2418,6 +2461,50 @@
   _aidl_status_return:
   return _aidl_status;
 }
+::ndk::ScopedAStatus BpTestService::SetOtherTestService(const std::string& in_name, const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& in_service, bool* _aidl_return) {
+  binder_status_t _aidl_ret_status = STATUS_OK;
+  ::ndk::ScopedAStatus _aidl_status;
+  ::ndk::ScopedAParcel _aidl_in;
+  ::ndk::ScopedAParcel _aidl_out;
+
+  _aidl_ret_status = AIBinder_prepareTransaction(asBinder().get(), _aidl_in.getR());
+  AParcel_markSensitive(_aidl_in.get());
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_in.get(), in_name);
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_in.get(), in_service);
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_ret_status = AIBinder_transact(
+    asBinder().get(),
+    (FIRST_CALL_TRANSACTION + 26 /*SetOtherTestService*/),
+    _aidl_in.getR(),
+    _aidl_out.getR(),
+    FLAG_CLEAR_BUF
+    #ifdef BINDER_STABILITY_SUPPORT
+    | FLAG_PRIVATE_LOCAL
+    #endif  // BINDER_STABILITY_SUPPORT
+    );
+  if (_aidl_ret_status == STATUS_UNKNOWN_TRANSACTION && ITestService::getDefaultImpl()) {
+    _aidl_status = ITestService::getDefaultImpl()->SetOtherTestService(in_name, in_service, _aidl_return);
+    goto _aidl_status_return;
+  }
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_ret_status = AParcel_readStatusHeader(_aidl_out.get(), _aidl_status.getR());
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  if (!AStatus_isOk(_aidl_status.get())) goto _aidl_status_return;
+  _aidl_ret_status = ::ndk::AParcel_readData(_aidl_out.get(), _aidl_return);
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_error:
+  _aidl_status.set(AStatus_fromStatus(_aidl_ret_status));
+  _aidl_status_return:
+  return _aidl_status;
+}
 ::ndk::ScopedAStatus BpTestService::VerifyName(const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& in_service, const std::string& in_name, bool* _aidl_return) {
   binder_status_t _aidl_ret_status = STATUS_OK;
   ::ndk::ScopedAStatus _aidl_status;
@@ -2436,7 +2523,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 26 /*VerifyName*/),
+    (FIRST_CALL_TRANSACTION + 27 /*VerifyName*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2477,7 +2564,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 27 /*GetInterfaceArray*/),
+    (FIRST_CALL_TRANSACTION + 28 /*GetInterfaceArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2521,7 +2608,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 28 /*VerifyNamesWithInterfaceArray*/),
+    (FIRST_CALL_TRANSACTION + 29 /*VerifyNamesWithInterfaceArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2562,7 +2649,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 29 /*GetNullableInterfaceArray*/),
+    (FIRST_CALL_TRANSACTION + 30 /*GetNullableInterfaceArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2606,7 +2693,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 30 /*VerifyNamesWithNullableInterfaceArray*/),
+    (FIRST_CALL_TRANSACTION + 31 /*VerifyNamesWithNullableInterfaceArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2647,7 +2734,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 31 /*GetInterfaceList*/),
+    (FIRST_CALL_TRANSACTION + 32 /*GetInterfaceList*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2691,7 +2778,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 32 /*VerifyNamesWithInterfaceList*/),
+    (FIRST_CALL_TRANSACTION + 33 /*VerifyNamesWithInterfaceList*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2732,7 +2819,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 33 /*ReverseStringList*/),
+    (FIRST_CALL_TRANSACTION + 34 /*ReverseStringList*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2776,7 +2863,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 34 /*RepeatParcelFileDescriptor*/),
+    (FIRST_CALL_TRANSACTION + 35 /*RepeatParcelFileDescriptor*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2820,7 +2907,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 35 /*ReverseParcelFileDescriptorArray*/),
+    (FIRST_CALL_TRANSACTION + 36 /*ReverseParcelFileDescriptorArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2864,7 +2951,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 36 /*ThrowServiceException*/),
+    (FIRST_CALL_TRANSACTION + 37 /*ThrowServiceException*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2902,7 +2989,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 37 /*RepeatNullableIntArray*/),
+    (FIRST_CALL_TRANSACTION + 38 /*RepeatNullableIntArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2943,7 +3030,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 38 /*RepeatNullableByteEnumArray*/),
+    (FIRST_CALL_TRANSACTION + 39 /*RepeatNullableByteEnumArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -2984,7 +3071,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 39 /*RepeatNullableIntEnumArray*/),
+    (FIRST_CALL_TRANSACTION + 40 /*RepeatNullableIntEnumArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3025,7 +3112,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 40 /*RepeatNullableLongEnumArray*/),
+    (FIRST_CALL_TRANSACTION + 41 /*RepeatNullableLongEnumArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3066,7 +3153,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 41 /*RepeatNullableString*/),
+    (FIRST_CALL_TRANSACTION + 42 /*RepeatNullableString*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3107,7 +3194,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 42 /*RepeatNullableStringList*/),
+    (FIRST_CALL_TRANSACTION + 43 /*RepeatNullableStringList*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3148,7 +3235,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 43 /*RepeatNullableParcelable*/),
+    (FIRST_CALL_TRANSACTION + 44 /*RepeatNullableParcelable*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3189,7 +3276,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 44 /*RepeatNullableParcelableArray*/),
+    (FIRST_CALL_TRANSACTION + 45 /*RepeatNullableParcelableArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3230,7 +3317,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 45 /*RepeatNullableParcelableList*/),
+    (FIRST_CALL_TRANSACTION + 46 /*RepeatNullableParcelableList*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3271,7 +3358,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 46 /*TakesAnIBinder*/),
+    (FIRST_CALL_TRANSACTION + 47 /*TakesAnIBinder*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3309,7 +3396,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 47 /*TakesANullableIBinder*/),
+    (FIRST_CALL_TRANSACTION + 48 /*TakesANullableIBinder*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3347,7 +3434,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 48 /*TakesAnIBinderList*/),
+    (FIRST_CALL_TRANSACTION + 49 /*TakesAnIBinderList*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3385,7 +3472,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 49 /*TakesANullableIBinderList*/),
+    (FIRST_CALL_TRANSACTION + 50 /*TakesANullableIBinderList*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3423,7 +3510,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 50 /*RepeatUtf8CppString*/),
+    (FIRST_CALL_TRANSACTION + 51 /*RepeatUtf8CppString*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3464,7 +3551,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 51 /*RepeatNullableUtf8CppString*/),
+    (FIRST_CALL_TRANSACTION + 52 /*RepeatNullableUtf8CppString*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3508,7 +3595,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 52 /*ReverseUtf8CppString*/),
+    (FIRST_CALL_TRANSACTION + 53 /*ReverseUtf8CppString*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3555,7 +3642,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 53 /*ReverseNullableUtf8CppString*/),
+    (FIRST_CALL_TRANSACTION + 54 /*ReverseNullableUtf8CppString*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3599,7 +3686,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 54 /*ReverseUtf8CppStringList*/),
+    (FIRST_CALL_TRANSACTION + 55 /*ReverseUtf8CppStringList*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3643,7 +3730,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 55 /*GetCallback*/),
+    (FIRST_CALL_TRANSACTION + 56 /*GetCallback*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3684,7 +3771,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 56 /*FillOutStructuredParcelable*/),
+    (FIRST_CALL_TRANSACTION + 57 /*FillOutStructuredParcelable*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3725,7 +3812,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 57 /*RepeatExtendableParcelable*/),
+    (FIRST_CALL_TRANSACTION + 58 /*RepeatExtendableParcelable*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3766,7 +3853,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 58 /*ReverseList*/),
+    (FIRST_CALL_TRANSACTION + 59 /*ReverseList*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3810,7 +3897,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 59 /*ReverseIBinderArray*/),
+    (FIRST_CALL_TRANSACTION + 60 /*ReverseIBinderArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3857,7 +3944,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 60 /*ReverseNullableIBinderArray*/),
+    (FIRST_CALL_TRANSACTION + 61 /*ReverseNullableIBinderArray*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3898,7 +3985,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 61 /*GetOldNameInterface*/),
+    (FIRST_CALL_TRANSACTION + 62 /*GetOldNameInterface*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3936,7 +4023,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 62 /*GetNewNameInterface*/),
+    (FIRST_CALL_TRANSACTION + 63 /*GetNewNameInterface*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -3977,7 +4064,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 63 /*GetUnionTags*/),
+    (FIRST_CALL_TRANSACTION + 64 /*GetUnionTags*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -4015,7 +4102,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 64 /*GetCppJavaTests*/),
+    (FIRST_CALL_TRANSACTION + 65 /*GetCppJavaTests*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -4053,7 +4140,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 65 /*getBackendType*/),
+    (FIRST_CALL_TRANSACTION + 66 /*getBackendType*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -4079,6 +4166,47 @@
   _aidl_status_return:
   return _aidl_status;
 }
+::ndk::ScopedAStatus BpTestService::GetCircular(::aidl::android::aidl::tests::CircularParcelable* out_cp, std::shared_ptr<::aidl::android::aidl::tests::ICircular>* _aidl_return) {
+  binder_status_t _aidl_ret_status = STATUS_OK;
+  ::ndk::ScopedAStatus _aidl_status;
+  ::ndk::ScopedAParcel _aidl_in;
+  ::ndk::ScopedAParcel _aidl_out;
+
+  _aidl_ret_status = AIBinder_prepareTransaction(asBinder().get(), _aidl_in.getR());
+  AParcel_markSensitive(_aidl_in.get());
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_ret_status = AIBinder_transact(
+    asBinder().get(),
+    (FIRST_CALL_TRANSACTION + 67 /*GetCircular*/),
+    _aidl_in.getR(),
+    _aidl_out.getR(),
+    FLAG_CLEAR_BUF
+    #ifdef BINDER_STABILITY_SUPPORT
+    | FLAG_PRIVATE_LOCAL
+    #endif  // BINDER_STABILITY_SUPPORT
+    );
+  if (_aidl_ret_status == STATUS_UNKNOWN_TRANSACTION && ITestService::getDefaultImpl()) {
+    _aidl_status = ITestService::getDefaultImpl()->GetCircular(out_cp, _aidl_return);
+    goto _aidl_status_return;
+  }
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_ret_status = AParcel_readStatusHeader(_aidl_out.get(), _aidl_status.getR());
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  if (!AStatus_isOk(_aidl_status.get())) goto _aidl_status_return;
+  _aidl_ret_status = ::ndk::AParcel_readData(_aidl_out.get(), _aidl_return);
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_ret_status = ::ndk::AParcel_readData(_aidl_out.get(), out_cp);
+  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
+
+  _aidl_error:
+  _aidl_status.set(AStatus_fromStatus(_aidl_ret_status));
+  _aidl_status_return:
+  return _aidl_status;
+}
 // Source for BnTestService
 BnTestService::BnTestService() {}
 BnTestService::~BnTestService() {}
@@ -4262,6 +4390,11 @@
   _aidl_status.set(AStatus_fromStatus(STATUS_UNKNOWN_TRANSACTION));
   return _aidl_status;
 }
+::ndk::ScopedAStatus ITestServiceDefault::SetOtherTestService(const std::string& /*in_name*/, const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& /*in_service*/, bool* /*_aidl_return*/) {
+  ::ndk::ScopedAStatus _aidl_status;
+  _aidl_status.set(AStatus_fromStatus(STATUS_UNKNOWN_TRANSACTION));
+  return _aidl_status;
+}
 ::ndk::ScopedAStatus ITestServiceDefault::VerifyName(const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& /*in_service*/, const std::string& /*in_name*/, bool* /*_aidl_return*/) {
   ::ndk::ScopedAStatus _aidl_status;
   _aidl_status.set(AStatus_fromStatus(STATUS_UNKNOWN_TRANSACTION));
@@ -4462,6 +4595,11 @@
   _aidl_status.set(AStatus_fromStatus(STATUS_UNKNOWN_TRANSACTION));
   return _aidl_status;
 }
+::ndk::ScopedAStatus ITestServiceDefault::GetCircular(::aidl::android::aidl::tests::CircularParcelable* /*out_cp*/, std::shared_ptr<::aidl::android::aidl::tests::ICircular>* /*_aidl_return*/) {
+  ::ndk::ScopedAStatus _aidl_status;
+  _aidl_status.set(AStatus_fromStatus(STATUS_UNKNOWN_TRANSACTION));
+  return _aidl_status;
+}
 ::ndk::SpAIBinder ITestServiceDefault::asBinder() {
   return ::ndk::SpAIBinder();
 }
@@ -4722,3 +4860,177 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
+namespace aidl {
+namespace android {
+namespace aidl {
+namespace tests {
+static binder_status_t _aidl_android_aidl_tests_ITestService_CompilerChecks_Foo_onTransact(AIBinder* _aidl_binder, transaction_code_t _aidl_code, const AParcel* _aidl_in, AParcel* _aidl_out) {
+  (void)_aidl_in;
+  (void)_aidl_out;
+  binder_status_t _aidl_ret_status = STATUS_UNKNOWN_TRANSACTION;
+  (void)_aidl_binder;
+  (void)_aidl_code;
+  return _aidl_ret_status;
+}
+
+static AIBinder_Class* _g_aidl_android_aidl_tests_ITestService_CompilerChecks_Foo_clazz = ::ndk::ICInterface::defineClass(ITestService::CompilerChecks::IFoo::descriptor, _aidl_android_aidl_tests_ITestService_CompilerChecks_Foo_onTransact);
+
+ITestService::CompilerChecks::BpFoo::BpFoo(const ::ndk::SpAIBinder& binder) : BpCInterface(binder) {}
+ITestService::CompilerChecks::BpFoo::~BpFoo() {}
+
+// Source for BnFoo
+ITestService::CompilerChecks::BnFoo::BnFoo() {}
+ITestService::CompilerChecks::BnFoo::~BnFoo() {}
+::ndk::SpAIBinder ITestService::CompilerChecks::BnFoo::createBinder() {
+  AIBinder* binder = AIBinder_new(_g_aidl_android_aidl_tests_ITestService_CompilerChecks_Foo_clazz, static_cast<void*>(this));
+  #ifdef BINDER_STABILITY_SUPPORT
+  AIBinder_markCompilationUnitStability(binder);
+  #endif  // BINDER_STABILITY_SUPPORT
+  return ::ndk::SpAIBinder(binder);
+}
+// Source for IFoo
+const char* ITestService::CompilerChecks::IFoo::descriptor = "android.aidl.tests.ITestService.CompilerChecks.Foo";
+ITestService::CompilerChecks::IFoo::IFoo() {}
+ITestService::CompilerChecks::IFoo::~IFoo() {}
+
+
+std::shared_ptr<ITestService::CompilerChecks::IFoo> ITestService::CompilerChecks::IFoo::fromBinder(const ::ndk::SpAIBinder& binder) {
+  if (!AIBinder_associateClass(binder.get(), _g_aidl_android_aidl_tests_ITestService_CompilerChecks_Foo_clazz)) { return nullptr; }
+  std::shared_ptr<::ndk::ICInterface> interface = ::ndk::ICInterface::asInterface(binder.get());
+  if (interface) {
+    return std::static_pointer_cast<IFoo>(interface);
+  }
+  return ::ndk::SharedRefBase::make<ITestService::CompilerChecks::BpFoo>(binder);
+}
+
+binder_status_t ITestService::CompilerChecks::IFoo::writeToParcel(AParcel* parcel, const std::shared_ptr<IFoo>& instance) {
+  return AParcel_writeStrongBinder(parcel, instance ? instance->asBinder().get() : nullptr);
+}
+binder_status_t ITestService::CompilerChecks::IFoo::readFromParcel(const AParcel* parcel, std::shared_ptr<IFoo>* instance) {
+  ::ndk::SpAIBinder binder;
+  binder_status_t status = AParcel_readStrongBinder(parcel, binder.getR());
+  if (status != STATUS_OK) return status;
+  *instance = IFoo::fromBinder(binder);
+  return STATUS_OK;
+}
+bool ITestService::CompilerChecks::IFoo::setDefaultImpl(const std::shared_ptr<IFoo>& impl) {
+  // Only one user of this interface can use this function
+  // at a time. This is a heuristic to detect if two different
+  // users in the same process use this function.
+  assert(!IFoo::default_impl);
+  if (impl) {
+    IFoo::default_impl = impl;
+    return true;
+  }
+  return false;
+}
+const std::shared_ptr<ITestService::CompilerChecks::IFoo>& ITestService::CompilerChecks::IFoo::getDefaultImpl() {
+  return IFoo::default_impl;
+}
+std::shared_ptr<ITestService::CompilerChecks::IFoo> ITestService::CompilerChecks::IFoo::default_impl = nullptr;
+::ndk::SpAIBinder ITestService::CompilerChecks::IFooDefault::asBinder() {
+  return ::ndk::SpAIBinder();
+}
+bool ITestService::CompilerChecks::IFooDefault::isRemote() {
+  return false;
+}
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+}  // namespace aidl
+namespace aidl {
+namespace android {
+namespace aidl {
+namespace tests {
+const char* ITestService::CompilerChecks::HasDeprecated::descriptor = "android.aidl.tests.ITestService.CompilerChecks.HasDeprecated";
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+binder_status_t ITestService::CompilerChecks::HasDeprecated::readFromParcel(const AParcel* _aidl_parcel) {
+  binder_status_t _aidl_ret_status = STATUS_OK;
+  int32_t _aidl_start_pos = AParcel_getDataPosition(_aidl_parcel);
+  int32_t _aidl_parcelable_size = 0;
+  _aidl_ret_status = AParcel_readInt32(_aidl_parcel, &_aidl_parcelable_size);
+  if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status;
+
+  if (_aidl_parcelable_size < 4) return STATUS_BAD_VALUE;
+  if (_aidl_start_pos > INT32_MAX - _aidl_parcelable_size) return STATUS_BAD_VALUE;
+  if (AParcel_getDataPosition(_aidl_parcel) - _aidl_start_pos >= _aidl_parcelable_size) {
+    AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size);
+    return _aidl_ret_status;
+  }
+  _aidl_ret_status = ::ndk::AParcel_readData(_aidl_parcel, &deprecated);
+  if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status;
+
+  AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size);
+  return _aidl_ret_status;
+}
+binder_status_t ITestService::CompilerChecks::HasDeprecated::writeToParcel(AParcel* _aidl_parcel) const {
+  binder_status_t _aidl_ret_status;
+  size_t _aidl_start_pos = AParcel_getDataPosition(_aidl_parcel);
+  _aidl_ret_status = AParcel_writeInt32(_aidl_parcel, 0);
+  if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status;
+
+  _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_parcel, deprecated);
+  if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status;
+
+  size_t _aidl_end_pos = AParcel_getDataPosition(_aidl_parcel);
+  AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos);
+  AParcel_writeInt32(_aidl_parcel, _aidl_end_pos - _aidl_start_pos);
+  AParcel_setDataPosition(_aidl_parcel, _aidl_end_pos);
+  return _aidl_ret_status;
+}
+#pragma clang diagnostic pop
+
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+}  // namespace aidl
+namespace aidl {
+namespace android {
+namespace aidl {
+namespace tests {
+const char* ITestService::CompilerChecks::UsingHasDeprecated::descriptor = "android.aidl.tests.ITestService.CompilerChecks.UsingHasDeprecated";
+
+binder_status_t ITestService::CompilerChecks::UsingHasDeprecated::readFromParcel(const AParcel* _parcel) {
+  binder_status_t _aidl_ret_status;
+  int32_t _aidl_tag;
+  if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_tag)) != STATUS_OK) return _aidl_ret_status;
+  switch (static_cast<Tag>(_aidl_tag)) {
+  case n: {
+    int32_t _aidl_value;
+    if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_value)) != STATUS_OK) return _aidl_ret_status;
+    if constexpr (std::is_trivially_copyable_v<int32_t>) {
+      set<n>(_aidl_value);
+    } else {
+      // NOLINTNEXTLINE(performance-move-const-arg)
+      set<n>(std::move(_aidl_value));
+    }
+    return STATUS_OK; }
+  case m: {
+    ::aidl::android::aidl::tests::ITestService::CompilerChecks::HasDeprecated _aidl_value;
+    if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_value)) != STATUS_OK) return _aidl_ret_status;
+    if constexpr (std::is_trivially_copyable_v<::aidl::android::aidl::tests::ITestService::CompilerChecks::HasDeprecated>) {
+      set<m>(_aidl_value);
+    } else {
+      // NOLINTNEXTLINE(performance-move-const-arg)
+      set<m>(std::move(_aidl_value));
+    }
+    return STATUS_OK; }
+  }
+  return STATUS_BAD_VALUE;
+}
+binder_status_t ITestService::CompilerChecks::UsingHasDeprecated::writeToParcel(AParcel* _parcel) const {
+  binder_status_t _aidl_ret_status = ::ndk::AParcel_writeData(_parcel, static_cast<int32_t>(getTag()));
+  if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status;
+  switch (getTag()) {
+  case n: return ::ndk::AParcel_writeData(_parcel, get<n>());
+  case m: return ::ndk::AParcel_writeData(_parcel, get<m>());
+  }
+  __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "can't reach here");
+}
+
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+}  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp.d b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp.d
index 19acd9f..6cdbb1b 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp.d
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp.d
@@ -2,6 +2,8 @@
   system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
   system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
   system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
   system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
   system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
   system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/unions/EnumUnion.cpp b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/unions/EnumUnion.cpp
index c3f473f..0620896 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/unions/EnumUnion.cpp
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/unions/EnumUnion.cpp
@@ -9,6 +9,8 @@
 namespace unions {
 const char* EnumUnion::descriptor = "android.aidl.tests.unions.EnumUnion";
 
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
 binder_status_t EnumUnion::readFromParcel(const AParcel* _parcel) {
   binder_status_t _aidl_ret_status;
   int32_t _aidl_tag;
@@ -34,8 +36,6 @@
       set<longEnum>(std::move(_aidl_value));
     }
     return STATUS_OK; }
-  #pragma clang diagnostic push
-  #pragma clang diagnostic ignored "-Wdeprecated-declarations"
   case deprecatedField: {
     int32_t _aidl_value;
     if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_value)) != STATUS_OK) return _aidl_ret_status;
@@ -46,7 +46,6 @@
       set<deprecatedField>(std::move(_aidl_value));
     }
     return STATUS_OK; }
-  #pragma clang diagnostic pop
   }
   return STATUS_BAD_VALUE;
 }
@@ -63,6 +62,7 @@
   }
   __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "can't reach here");
 }
+#pragma clang diagnostic pop
 
 }  // namespace unions
 }  // namespace tests
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BnCircular.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BnCircular.h
new file mode 100644
index 0000000..7595f61
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BnCircular.h
@@ -0,0 +1,42 @@
+#pragma once
+
+#include "aidl/android/aidl/tests/ICircular.h"
+
+#include <android/binder_ibinder.h>
+#include <cassert>
+
+#ifndef __BIONIC__
+#ifndef __assert2
+#define __assert2(a,b,c,d) ((void)0)
+#endif
+#endif
+
+namespace aidl {
+namespace android {
+namespace aidl {
+namespace tests {
+class BnCircular : public ::ndk::BnCInterface<ICircular> {
+public:
+  BnCircular();
+  virtual ~BnCircular();
+protected:
+  ::ndk::SpAIBinder createBinder() override;
+private:
+};
+class ICircularDelegator : public BnCircular {
+public:
+  explicit ICircularDelegator(const std::shared_ptr<ICircular> &impl) : _impl(impl) {
+  }
+
+  ::ndk::ScopedAStatus GetTestService(std::shared_ptr<::aidl::android::aidl::tests::ITestService>* _aidl_return) override {
+    return _impl->GetTestService(_aidl_return);
+  }
+protected:
+private:
+  std::shared_ptr<ICircular> _impl;
+};
+
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+}  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BnCircularParcelable.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BnCircularParcelable.h
new file mode 100644
index 0000000..4291108
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BnCircularParcelable.h
@@ -0,0 +1 @@
+#error TODO(b/111362593) defined_types do not have bn classes
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BnTestService.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BnTestService.h
index 3b5a37d..2789871 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BnTestService.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BnTestService.h
@@ -106,6 +106,9 @@
   ::ndk::ScopedAStatus GetOtherTestService(const std::string& in_name, std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>* _aidl_return) override {
     return _impl->GetOtherTestService(in_name, _aidl_return);
   }
+  ::ndk::ScopedAStatus SetOtherTestService(const std::string& in_name, const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& in_service, bool* _aidl_return) override {
+    return _impl->SetOtherTestService(in_name, in_service, _aidl_return);
+  }
   ::ndk::ScopedAStatus VerifyName(const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& in_service, const std::string& in_name, bool* _aidl_return) override {
     return _impl->VerifyName(in_service, in_name, _aidl_return);
   }
@@ -226,6 +229,9 @@
   ::ndk::ScopedAStatus getBackendType(::aidl::android::aidl::tests::BackendType* _aidl_return) override {
     return _impl->getBackendType(_aidl_return);
   }
+  ::ndk::ScopedAStatus GetCircular(::aidl::android::aidl::tests::CircularParcelable* out_cp, std::shared_ptr<::aidl::android::aidl::tests::ICircular>* _aidl_return) override {
+    return _impl->GetCircular(out_cp, _aidl_return);
+  }
 protected:
 private:
   std::shared_ptr<ITestService> _impl;
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpCircular.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpCircular.h
new file mode 100644
index 0000000..6dc7ec8
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpCircular.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "aidl/android/aidl/tests/ICircular.h"
+
+#include <android/binder_ibinder.h>
+
+namespace aidl {
+namespace android {
+namespace aidl {
+namespace tests {
+class BpCircular : public ::ndk::BpCInterface<ICircular> {
+public:
+  explicit BpCircular(const ::ndk::SpAIBinder& binder);
+  virtual ~BpCircular();
+
+  ::ndk::ScopedAStatus GetTestService(std::shared_ptr<::aidl::android::aidl::tests::ITestService>* _aidl_return) override;
+};
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+}  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpCircularParcelable.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpCircularParcelable.h
new file mode 100644
index 0000000..e8a0db3
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpCircularParcelable.h
@@ -0,0 +1 @@
+#error TODO(b/111362593) defined_types do not have bp classes
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpTestService.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpTestService.h
index 2cd9768..60dc4c6 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpTestService.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpTestService.h
@@ -39,6 +39,7 @@
   ::ndk::ScopedAStatus ReverseIntEnum(const std::vector<::aidl::android::aidl::tests::IntEnum>& in_input, std::vector<::aidl::android::aidl::tests::IntEnum>* out_repeated, std::vector<::aidl::android::aidl::tests::IntEnum>* _aidl_return) override;
   ::ndk::ScopedAStatus ReverseLongEnum(const std::vector<::aidl::android::aidl::tests::LongEnum>& in_input, std::vector<::aidl::android::aidl::tests::LongEnum>* out_repeated, std::vector<::aidl::android::aidl::tests::LongEnum>* _aidl_return) override;
   ::ndk::ScopedAStatus GetOtherTestService(const std::string& in_name, std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>* _aidl_return) override;
+  ::ndk::ScopedAStatus SetOtherTestService(const std::string& in_name, const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& in_service, bool* _aidl_return) override;
   ::ndk::ScopedAStatus VerifyName(const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& in_service, const std::string& in_name, bool* _aidl_return) override;
   ::ndk::ScopedAStatus GetInterfaceArray(const std::vector<std::string>& in_names, std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>>* _aidl_return) override;
   ::ndk::ScopedAStatus VerifyNamesWithInterfaceArray(const std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>>& in_services, const std::vector<std::string>& in_names, bool* _aidl_return) override;
@@ -79,6 +80,7 @@
   ::ndk::ScopedAStatus GetUnionTags(const std::vector<::aidl::android::aidl::tests::Union>& in_input, std::vector<::aidl::android::aidl::tests::Union::Tag>* _aidl_return) override;
   ::ndk::ScopedAStatus GetCppJavaTests(::ndk::SpAIBinder* _aidl_return) override;
   ::ndk::ScopedAStatus getBackendType(::aidl::android::aidl::tests::BackendType* _aidl_return) override;
+  ::ndk::ScopedAStatus GetCircular(::aidl::android::aidl::tests::CircularParcelable* out_cp, std::shared_ptr<::aidl::android::aidl::tests::ICircular>* _aidl_return) override;
 };
 }  // namespace tests
 }  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/CircularParcelable.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/CircularParcelable.h
new file mode 100644
index 0000000..80e5ffa
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/CircularParcelable.h
@@ -0,0 +1,64 @@
+#pragma once
+
+#include <cstdint>
+#include <memory>
+#include <optional>
+#include <string>
+#include <vector>
+#include <android/binder_interface_utils.h>
+#include <android/binder_parcelable_utils.h>
+#include <android/binder_to_string.h>
+#include <aidl/android/aidl/tests/ITestService.h>
+#ifdef BINDER_STABILITY_SUPPORT
+#include <android/binder_stability.h>
+#endif  // BINDER_STABILITY_SUPPORT
+
+namespace aidl::android::aidl::tests {
+class ITestService;
+}  // namespace aidl::android::aidl::tests
+namespace aidl {
+namespace android {
+namespace aidl {
+namespace tests {
+class CircularParcelable {
+public:
+  typedef std::false_type fixed_size;
+  static const char* descriptor;
+
+  std::shared_ptr<::aidl::android::aidl::tests::ITestService> testService;
+
+  binder_status_t readFromParcel(const AParcel* parcel);
+  binder_status_t writeToParcel(AParcel* parcel) const;
+
+  inline bool operator!=(const CircularParcelable& rhs) const {
+    return std::tie(testService) != std::tie(rhs.testService);
+  }
+  inline bool operator<(const CircularParcelable& rhs) const {
+    return std::tie(testService) < std::tie(rhs.testService);
+  }
+  inline bool operator<=(const CircularParcelable& rhs) const {
+    return std::tie(testService) <= std::tie(rhs.testService);
+  }
+  inline bool operator==(const CircularParcelable& rhs) const {
+    return std::tie(testService) == std::tie(rhs.testService);
+  }
+  inline bool operator>(const CircularParcelable& rhs) const {
+    return std::tie(testService) > std::tie(rhs.testService);
+  }
+  inline bool operator>=(const CircularParcelable& rhs) const {
+    return std::tie(testService) >= std::tie(rhs.testService);
+  }
+
+  static const ::ndk::parcelable_stability_t _aidl_stability = ::ndk::STABILITY_LOCAL;
+  inline std::string toString() const {
+    std::ostringstream os;
+    os << "CircularParcelable{";
+    os << "testService: " << ::android::internal::ToString(testService);
+    os << "}";
+    return os.str();
+  }
+};
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+}  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ICircular.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ICircular.h
new file mode 100644
index 0000000..5c45e97
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ICircular.h
@@ -0,0 +1,50 @@
+#pragma once
+
+#include <cstdint>
+#include <memory>
+#include <optional>
+#include <string>
+#include <vector>
+#include <android/binder_interface_utils.h>
+#include <aidl/android/aidl/tests/ITestService.h>
+#ifdef BINDER_STABILITY_SUPPORT
+#include <android/binder_stability.h>
+#endif  // BINDER_STABILITY_SUPPORT
+
+namespace aidl::android::aidl::tests {
+class ITestService;
+}  // namespace aidl::android::aidl::tests
+namespace aidl {
+namespace android {
+namespace aidl {
+namespace tests {
+class ICircularDelegator;
+
+class ICircular : public ::ndk::ICInterface {
+public:
+  typedef ICircularDelegator DefaultDelegator;
+  static const char* descriptor;
+  ICircular();
+  virtual ~ICircular();
+
+  static constexpr uint32_t TRANSACTION_GetTestService = FIRST_CALL_TRANSACTION + 0;
+
+  static std::shared_ptr<ICircular> fromBinder(const ::ndk::SpAIBinder& binder);
+  static binder_status_t writeToParcel(AParcel* parcel, const std::shared_ptr<ICircular>& instance);
+  static binder_status_t readFromParcel(const AParcel* parcel, std::shared_ptr<ICircular>* instance);
+  static bool setDefaultImpl(const std::shared_ptr<ICircular>& impl);
+  static const std::shared_ptr<ICircular>& getDefaultImpl();
+  virtual ::ndk::ScopedAStatus GetTestService(std::shared_ptr<::aidl::android::aidl::tests::ITestService>* _aidl_return) = 0;
+private:
+  static std::shared_ptr<ICircular> default_impl;
+};
+class ICircularDefault : public ICircular {
+public:
+  ::ndk::ScopedAStatus GetTestService(std::shared_ptr<::aidl::android::aidl::tests::ITestService>* _aidl_return) override;
+  ::ndk::SpAIBinder asBinder() override;
+  bool isRemote() override;
+};
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+}  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ITestService.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ITestService.h
index 823bc14..09e36a7 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ITestService.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ITestService.h
@@ -1,10 +1,17 @@
 #pragma once
 
+#include <array>
+#include <cassert>
 #include <cstdint>
 #include <memory>
 #include <optional>
 #include <string>
+#include <type_traits>
+#include <utility>
+#include <variant>
 #include <vector>
+#include <android/binder_enums.h>
+#include <android/binder_ibinder.h>
 #include <android/binder_ibinder_platform.h>
 #include <android/binder_interface_utils.h>
 #include <android/binder_parcel_platform.h>
@@ -12,6 +19,8 @@
 #include <android/binder_to_string.h>
 #include <aidl/android/aidl/tests/BackendType.h>
 #include <aidl/android/aidl/tests/ByteEnum.h>
+#include <aidl/android/aidl/tests/CircularParcelable.h>
+#include <aidl/android/aidl/tests/ICircular.h>
 #include <aidl/android/aidl/tests/INamedCallback.h>
 #include <aidl/android/aidl/tests/INewName.h>
 #include <aidl/android/aidl/tests/IOldName.h>
@@ -26,6 +35,22 @@
 #include <android/binder_stability.h>
 #endif  // BINDER_STABILITY_SUPPORT
 
+#ifndef __BIONIC__
+#define __assert2(a,b,c,d) ((void)0)
+#endif
+
+namespace aidl::android::aidl::tests {
+class CircularParcelable;
+class ICircular;
+class INamedCallback;
+class INewName;
+class IOldName;
+class RecursiveList;
+class StructuredParcelable;
+}  // namespace aidl::android::aidl::tests
+namespace aidl::android::aidl::tests::extension {
+class ExtendableParcelable;
+}  // namespace aidl::android::aidl::tests::extension
 namespace aidl {
 namespace android {
 namespace aidl {
@@ -80,6 +105,179 @@
     typedef std::false_type fixed_size;
     static const char* descriptor;
 
+    class IFooDelegator;
+
+    class IFoo : public ::ndk::ICInterface {
+    public:
+      typedef IFooDelegator DefaultDelegator;
+      static const char* descriptor;
+      IFoo();
+      virtual ~IFoo();
+
+
+      static std::shared_ptr<IFoo> fromBinder(const ::ndk::SpAIBinder& binder);
+      static binder_status_t writeToParcel(AParcel* parcel, const std::shared_ptr<IFoo>& instance);
+      static binder_status_t readFromParcel(const AParcel* parcel, std::shared_ptr<IFoo>* instance);
+      static bool setDefaultImpl(const std::shared_ptr<IFoo>& impl);
+      static const std::shared_ptr<IFoo>& getDefaultImpl();
+    private:
+      static std::shared_ptr<IFoo> default_impl;
+    };
+    class IFooDefault : public IFoo {
+    public:
+      ::ndk::SpAIBinder asBinder() override;
+      bool isRemote() override;
+    };
+    class BpFoo : public ::ndk::BpCInterface<IFoo> {
+    public:
+      explicit BpFoo(const ::ndk::SpAIBinder& binder);
+      virtual ~BpFoo();
+
+    };
+    class BnFoo : public ::ndk::BnCInterface<IFoo> {
+    public:
+      BnFoo();
+      virtual ~BnFoo();
+    protected:
+      ::ndk::SpAIBinder createBinder() override;
+    private:
+    };
+    #pragma clang diagnostic push
+    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    class HasDeprecated {
+    public:
+      typedef std::false_type fixed_size;
+      static const char* descriptor;
+
+      int32_t __attribute__((deprecated("field"))) deprecated = 0;
+
+      binder_status_t readFromParcel(const AParcel* parcel);
+      binder_status_t writeToParcel(AParcel* parcel) const;
+
+      inline bool operator!=(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) != std::tie(rhs.deprecated);
+      }
+      inline bool operator<(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) < std::tie(rhs.deprecated);
+      }
+      inline bool operator<=(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) <= std::tie(rhs.deprecated);
+      }
+      inline bool operator==(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) == std::tie(rhs.deprecated);
+      }
+      inline bool operator>(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) > std::tie(rhs.deprecated);
+      }
+      inline bool operator>=(const HasDeprecated& rhs) const {
+        return std::tie(deprecated) >= std::tie(rhs.deprecated);
+      }
+
+      static const ::ndk::parcelable_stability_t _aidl_stability = ::ndk::STABILITY_LOCAL;
+      inline std::string toString() const {
+        std::ostringstream os;
+        os << "HasDeprecated{";
+        os << "deprecated: " << ::android::internal::ToString(deprecated);
+        os << "}";
+        return os.str();
+      }
+    };
+    #pragma clang diagnostic pop
+    class UsingHasDeprecated {
+    public:
+      typedef std::false_type fixed_size;
+      static const char* descriptor;
+
+      enum class Tag : int32_t {
+        n = 0,
+        m = 1,
+      };
+
+      // Expose tag symbols for legacy code
+      static const inline Tag n = Tag::n;
+      static const inline Tag m = Tag::m;
+
+      template<typename _Tp>
+      static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, UsingHasDeprecated>;
+
+      UsingHasDeprecated() : _value(std::in_place_index<static_cast<size_t>(n)>, int32_t(0)) { }
+
+      template <typename _Tp, typename = std::enable_if_t<_not_self<_Tp>>>
+      // NOLINTNEXTLINE(google-explicit-constructor)
+      constexpr UsingHasDeprecated(_Tp&& _arg)
+          : _value(std::forward<_Tp>(_arg)) {}
+
+      template <size_t _Np, typename... _Tp>
+      constexpr explicit UsingHasDeprecated(std::in_place_index_t<_Np>, _Tp&&... _args)
+          : _value(std::in_place_index<_Np>, std::forward<_Tp>(_args)...) {}
+
+      template <Tag _tag, typename... _Tp>
+      static UsingHasDeprecated make(_Tp&&... _args) {
+        return UsingHasDeprecated(std::in_place_index<static_cast<size_t>(_tag)>, std::forward<_Tp>(_args)...);
+      }
+
+      template <Tag _tag, typename _Tp, typename... _Up>
+      static UsingHasDeprecated make(std::initializer_list<_Tp> _il, _Up&&... _args) {
+        return UsingHasDeprecated(std::in_place_index<static_cast<size_t>(_tag)>, std::move(_il), std::forward<_Up>(_args)...);
+      }
+
+      Tag getTag() const {
+        return static_cast<Tag>(_value.index());
+      }
+
+      template <Tag _tag>
+      const auto& get() const {
+        if (getTag() != _tag) { __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "bad access: a wrong tag"); }
+        return std::get<static_cast<size_t>(_tag)>(_value);
+      }
+
+      template <Tag _tag>
+      auto& get() {
+        if (getTag() != _tag) { __assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "bad access: a wrong tag"); }
+        return std::get<static_cast<size_t>(_tag)>(_value);
+      }
+
+      template <Tag _tag, typename... _Tp>
+      void set(_Tp&&... _args) {
+        _value.emplace<static_cast<size_t>(_tag)>(std::forward<_Tp>(_args)...);
+      }
+
+      binder_status_t readFromParcel(const AParcel* _parcel);
+      binder_status_t writeToParcel(AParcel* _parcel) const;
+
+      inline bool operator!=(const UsingHasDeprecated& rhs) const {
+        return _value != rhs._value;
+      }
+      inline bool operator<(const UsingHasDeprecated& rhs) const {
+        return _value < rhs._value;
+      }
+      inline bool operator<=(const UsingHasDeprecated& rhs) const {
+        return _value <= rhs._value;
+      }
+      inline bool operator==(const UsingHasDeprecated& rhs) const {
+        return _value == rhs._value;
+      }
+      inline bool operator>(const UsingHasDeprecated& rhs) const {
+        return _value > rhs._value;
+      }
+      inline bool operator>=(const UsingHasDeprecated& rhs) const {
+        return _value >= rhs._value;
+      }
+
+      static const ::ndk::parcelable_stability_t _aidl_stability = ::ndk::STABILITY_LOCAL;
+      inline std::string toString() const {
+        std::ostringstream os;
+        os << "UsingHasDeprecated{";
+        switch (getTag()) {
+        case n: os << "n: " << ::android::internal::ToString(get<n>()); break;
+        case m: os << "m: " << ::android::internal::ToString(get<m>()); break;
+        }
+        os << "}";
+        return os.str();
+      }
+    private:
+      std::variant<int32_t, ::aidl::android::aidl::tests::ITestService::CompilerChecks::HasDeprecated> _value;
+    };
     ::ndk::SpAIBinder binder;
     ::ndk::SpAIBinder nullable_binder;
     std::vector<::ndk::SpAIBinder> binder_array;
@@ -247,46 +445,48 @@
   static constexpr uint32_t TRANSACTION_ReverseIntEnum = FIRST_CALL_TRANSACTION + 23;
   static constexpr uint32_t TRANSACTION_ReverseLongEnum = FIRST_CALL_TRANSACTION + 24;
   static constexpr uint32_t TRANSACTION_GetOtherTestService = FIRST_CALL_TRANSACTION + 25;
-  static constexpr uint32_t TRANSACTION_VerifyName = FIRST_CALL_TRANSACTION + 26;
-  static constexpr uint32_t TRANSACTION_GetInterfaceArray = FIRST_CALL_TRANSACTION + 27;
-  static constexpr uint32_t TRANSACTION_VerifyNamesWithInterfaceArray = FIRST_CALL_TRANSACTION + 28;
-  static constexpr uint32_t TRANSACTION_GetNullableInterfaceArray = FIRST_CALL_TRANSACTION + 29;
-  static constexpr uint32_t TRANSACTION_VerifyNamesWithNullableInterfaceArray = FIRST_CALL_TRANSACTION + 30;
-  static constexpr uint32_t TRANSACTION_GetInterfaceList = FIRST_CALL_TRANSACTION + 31;
-  static constexpr uint32_t TRANSACTION_VerifyNamesWithInterfaceList = FIRST_CALL_TRANSACTION + 32;
-  static constexpr uint32_t TRANSACTION_ReverseStringList = FIRST_CALL_TRANSACTION + 33;
-  static constexpr uint32_t TRANSACTION_RepeatParcelFileDescriptor = FIRST_CALL_TRANSACTION + 34;
-  static constexpr uint32_t TRANSACTION_ReverseParcelFileDescriptorArray = FIRST_CALL_TRANSACTION + 35;
-  static constexpr uint32_t TRANSACTION_ThrowServiceException = FIRST_CALL_TRANSACTION + 36;
-  static constexpr uint32_t TRANSACTION_RepeatNullableIntArray = FIRST_CALL_TRANSACTION + 37;
-  static constexpr uint32_t TRANSACTION_RepeatNullableByteEnumArray = FIRST_CALL_TRANSACTION + 38;
-  static constexpr uint32_t TRANSACTION_RepeatNullableIntEnumArray = FIRST_CALL_TRANSACTION + 39;
-  static constexpr uint32_t TRANSACTION_RepeatNullableLongEnumArray = FIRST_CALL_TRANSACTION + 40;
-  static constexpr uint32_t TRANSACTION_RepeatNullableString = FIRST_CALL_TRANSACTION + 41;
-  static constexpr uint32_t TRANSACTION_RepeatNullableStringList = FIRST_CALL_TRANSACTION + 42;
-  static constexpr uint32_t TRANSACTION_RepeatNullableParcelable = FIRST_CALL_TRANSACTION + 43;
-  static constexpr uint32_t TRANSACTION_RepeatNullableParcelableArray = FIRST_CALL_TRANSACTION + 44;
-  static constexpr uint32_t TRANSACTION_RepeatNullableParcelableList = FIRST_CALL_TRANSACTION + 45;
-  static constexpr uint32_t TRANSACTION_TakesAnIBinder = FIRST_CALL_TRANSACTION + 46;
-  static constexpr uint32_t TRANSACTION_TakesANullableIBinder = FIRST_CALL_TRANSACTION + 47;
-  static constexpr uint32_t TRANSACTION_TakesAnIBinderList = FIRST_CALL_TRANSACTION + 48;
-  static constexpr uint32_t TRANSACTION_TakesANullableIBinderList = FIRST_CALL_TRANSACTION + 49;
-  static constexpr uint32_t TRANSACTION_RepeatUtf8CppString = FIRST_CALL_TRANSACTION + 50;
-  static constexpr uint32_t TRANSACTION_RepeatNullableUtf8CppString = FIRST_CALL_TRANSACTION + 51;
-  static constexpr uint32_t TRANSACTION_ReverseUtf8CppString = FIRST_CALL_TRANSACTION + 52;
-  static constexpr uint32_t TRANSACTION_ReverseNullableUtf8CppString = FIRST_CALL_TRANSACTION + 53;
-  static constexpr uint32_t TRANSACTION_ReverseUtf8CppStringList = FIRST_CALL_TRANSACTION + 54;
-  static constexpr uint32_t TRANSACTION_GetCallback = FIRST_CALL_TRANSACTION + 55;
-  static constexpr uint32_t TRANSACTION_FillOutStructuredParcelable = FIRST_CALL_TRANSACTION + 56;
-  static constexpr uint32_t TRANSACTION_RepeatExtendableParcelable = FIRST_CALL_TRANSACTION + 57;
-  static constexpr uint32_t TRANSACTION_ReverseList = FIRST_CALL_TRANSACTION + 58;
-  static constexpr uint32_t TRANSACTION_ReverseIBinderArray = FIRST_CALL_TRANSACTION + 59;
-  static constexpr uint32_t TRANSACTION_ReverseNullableIBinderArray = FIRST_CALL_TRANSACTION + 60;
-  static constexpr uint32_t TRANSACTION_GetOldNameInterface = FIRST_CALL_TRANSACTION + 61;
-  static constexpr uint32_t TRANSACTION_GetNewNameInterface = FIRST_CALL_TRANSACTION + 62;
-  static constexpr uint32_t TRANSACTION_GetUnionTags = FIRST_CALL_TRANSACTION + 63;
-  static constexpr uint32_t TRANSACTION_GetCppJavaTests = FIRST_CALL_TRANSACTION + 64;
-  static constexpr uint32_t TRANSACTION_getBackendType = FIRST_CALL_TRANSACTION + 65;
+  static constexpr uint32_t TRANSACTION_SetOtherTestService = FIRST_CALL_TRANSACTION + 26;
+  static constexpr uint32_t TRANSACTION_VerifyName = FIRST_CALL_TRANSACTION + 27;
+  static constexpr uint32_t TRANSACTION_GetInterfaceArray = FIRST_CALL_TRANSACTION + 28;
+  static constexpr uint32_t TRANSACTION_VerifyNamesWithInterfaceArray = FIRST_CALL_TRANSACTION + 29;
+  static constexpr uint32_t TRANSACTION_GetNullableInterfaceArray = FIRST_CALL_TRANSACTION + 30;
+  static constexpr uint32_t TRANSACTION_VerifyNamesWithNullableInterfaceArray = FIRST_CALL_TRANSACTION + 31;
+  static constexpr uint32_t TRANSACTION_GetInterfaceList = FIRST_CALL_TRANSACTION + 32;
+  static constexpr uint32_t TRANSACTION_VerifyNamesWithInterfaceList = FIRST_CALL_TRANSACTION + 33;
+  static constexpr uint32_t TRANSACTION_ReverseStringList = FIRST_CALL_TRANSACTION + 34;
+  static constexpr uint32_t TRANSACTION_RepeatParcelFileDescriptor = FIRST_CALL_TRANSACTION + 35;
+  static constexpr uint32_t TRANSACTION_ReverseParcelFileDescriptorArray = FIRST_CALL_TRANSACTION + 36;
+  static constexpr uint32_t TRANSACTION_ThrowServiceException = FIRST_CALL_TRANSACTION + 37;
+  static constexpr uint32_t TRANSACTION_RepeatNullableIntArray = FIRST_CALL_TRANSACTION + 38;
+  static constexpr uint32_t TRANSACTION_RepeatNullableByteEnumArray = FIRST_CALL_TRANSACTION + 39;
+  static constexpr uint32_t TRANSACTION_RepeatNullableIntEnumArray = FIRST_CALL_TRANSACTION + 40;
+  static constexpr uint32_t TRANSACTION_RepeatNullableLongEnumArray = FIRST_CALL_TRANSACTION + 41;
+  static constexpr uint32_t TRANSACTION_RepeatNullableString = FIRST_CALL_TRANSACTION + 42;
+  static constexpr uint32_t TRANSACTION_RepeatNullableStringList = FIRST_CALL_TRANSACTION + 43;
+  static constexpr uint32_t TRANSACTION_RepeatNullableParcelable = FIRST_CALL_TRANSACTION + 44;
+  static constexpr uint32_t TRANSACTION_RepeatNullableParcelableArray = FIRST_CALL_TRANSACTION + 45;
+  static constexpr uint32_t TRANSACTION_RepeatNullableParcelableList = FIRST_CALL_TRANSACTION + 46;
+  static constexpr uint32_t TRANSACTION_TakesAnIBinder = FIRST_CALL_TRANSACTION + 47;
+  static constexpr uint32_t TRANSACTION_TakesANullableIBinder = FIRST_CALL_TRANSACTION + 48;
+  static constexpr uint32_t TRANSACTION_TakesAnIBinderList = FIRST_CALL_TRANSACTION + 49;
+  static constexpr uint32_t TRANSACTION_TakesANullableIBinderList = FIRST_CALL_TRANSACTION + 50;
+  static constexpr uint32_t TRANSACTION_RepeatUtf8CppString = FIRST_CALL_TRANSACTION + 51;
+  static constexpr uint32_t TRANSACTION_RepeatNullableUtf8CppString = FIRST_CALL_TRANSACTION + 52;
+  static constexpr uint32_t TRANSACTION_ReverseUtf8CppString = FIRST_CALL_TRANSACTION + 53;
+  static constexpr uint32_t TRANSACTION_ReverseNullableUtf8CppString = FIRST_CALL_TRANSACTION + 54;
+  static constexpr uint32_t TRANSACTION_ReverseUtf8CppStringList = FIRST_CALL_TRANSACTION + 55;
+  static constexpr uint32_t TRANSACTION_GetCallback = FIRST_CALL_TRANSACTION + 56;
+  static constexpr uint32_t TRANSACTION_FillOutStructuredParcelable = FIRST_CALL_TRANSACTION + 57;
+  static constexpr uint32_t TRANSACTION_RepeatExtendableParcelable = FIRST_CALL_TRANSACTION + 58;
+  static constexpr uint32_t TRANSACTION_ReverseList = FIRST_CALL_TRANSACTION + 59;
+  static constexpr uint32_t TRANSACTION_ReverseIBinderArray = FIRST_CALL_TRANSACTION + 60;
+  static constexpr uint32_t TRANSACTION_ReverseNullableIBinderArray = FIRST_CALL_TRANSACTION + 61;
+  static constexpr uint32_t TRANSACTION_GetOldNameInterface = FIRST_CALL_TRANSACTION + 62;
+  static constexpr uint32_t TRANSACTION_GetNewNameInterface = FIRST_CALL_TRANSACTION + 63;
+  static constexpr uint32_t TRANSACTION_GetUnionTags = FIRST_CALL_TRANSACTION + 64;
+  static constexpr uint32_t TRANSACTION_GetCppJavaTests = FIRST_CALL_TRANSACTION + 65;
+  static constexpr uint32_t TRANSACTION_getBackendType = FIRST_CALL_TRANSACTION + 66;
+  static constexpr uint32_t TRANSACTION_GetCircular = FIRST_CALL_TRANSACTION + 67;
 
   static std::shared_ptr<ITestService> fromBinder(const ::ndk::SpAIBinder& binder);
   static binder_status_t writeToParcel(AParcel* parcel, const std::shared_ptr<ITestService>& instance);
@@ -319,6 +519,7 @@
   virtual ::ndk::ScopedAStatus ReverseIntEnum(const std::vector<::aidl::android::aidl::tests::IntEnum>& in_input, std::vector<::aidl::android::aidl::tests::IntEnum>* out_repeated, std::vector<::aidl::android::aidl::tests::IntEnum>* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus ReverseLongEnum(const std::vector<::aidl::android::aidl::tests::LongEnum>& in_input, std::vector<::aidl::android::aidl::tests::LongEnum>* out_repeated, std::vector<::aidl::android::aidl::tests::LongEnum>* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus GetOtherTestService(const std::string& in_name, std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>* _aidl_return) = 0;
+  virtual ::ndk::ScopedAStatus SetOtherTestService(const std::string& in_name, const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& in_service, bool* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus VerifyName(const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& in_service, const std::string& in_name, bool* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus GetInterfaceArray(const std::vector<std::string>& in_names, std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>>* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus VerifyNamesWithInterfaceArray(const std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>>& in_services, const std::vector<std::string>& in_names, bool* _aidl_return) = 0;
@@ -359,6 +560,7 @@
   virtual ::ndk::ScopedAStatus GetUnionTags(const std::vector<::aidl::android::aidl::tests::Union>& in_input, std::vector<::aidl::android::aidl::tests::Union::Tag>* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus GetCppJavaTests(::ndk::SpAIBinder* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus getBackendType(::aidl::android::aidl::tests::BackendType* _aidl_return) = 0;
+  virtual ::ndk::ScopedAStatus GetCircular(::aidl::android::aidl::tests::CircularParcelable* out_cp, std::shared_ptr<::aidl::android::aidl::tests::ICircular>* _aidl_return) = 0;
 private:
   static std::shared_ptr<ITestService> default_impl;
 };
@@ -390,6 +592,7 @@
   ::ndk::ScopedAStatus ReverseIntEnum(const std::vector<::aidl::android::aidl::tests::IntEnum>& in_input, std::vector<::aidl::android::aidl::tests::IntEnum>* out_repeated, std::vector<::aidl::android::aidl::tests::IntEnum>* _aidl_return) override;
   ::ndk::ScopedAStatus ReverseLongEnum(const std::vector<::aidl::android::aidl::tests::LongEnum>& in_input, std::vector<::aidl::android::aidl::tests::LongEnum>* out_repeated, std::vector<::aidl::android::aidl::tests::LongEnum>* _aidl_return) override;
   ::ndk::ScopedAStatus GetOtherTestService(const std::string& in_name, std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>* _aidl_return) override;
+  ::ndk::ScopedAStatus SetOtherTestService(const std::string& in_name, const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& in_service, bool* _aidl_return) override;
   ::ndk::ScopedAStatus VerifyName(const std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>& in_service, const std::string& in_name, bool* _aidl_return) override;
   ::ndk::ScopedAStatus GetInterfaceArray(const std::vector<std::string>& in_names, std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>>* _aidl_return) override;
   ::ndk::ScopedAStatus VerifyNamesWithInterfaceArray(const std::vector<std::shared_ptr<::aidl::android::aidl::tests::INamedCallback>>& in_services, const std::vector<std::string>& in_names, bool* _aidl_return) override;
@@ -430,6 +633,7 @@
   ::ndk::ScopedAStatus GetUnionTags(const std::vector<::aidl::android::aidl::tests::Union>& in_input, std::vector<::aidl::android::aidl::tests::Union::Tag>* _aidl_return) override;
   ::ndk::ScopedAStatus GetCppJavaTests(::ndk::SpAIBinder* _aidl_return) override;
   ::ndk::ScopedAStatus getBackendType(::aidl::android::aidl::tests::BackendType* _aidl_return) override;
+  ::ndk::ScopedAStatus GetCircular(::aidl::android::aidl::tests::CircularParcelable* out_cp, std::shared_ptr<::aidl::android::aidl::tests::ICircular>* _aidl_return) override;
   ::ndk::SpAIBinder asBinder() override;
   bool isRemote() override;
 };
@@ -437,3 +641,33 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
+namespace aidl {
+namespace android {
+namespace aidl {
+namespace tests {
+[[nodiscard]] static inline std::string toString(ITestService::CompilerChecks::UsingHasDeprecated::Tag val) {
+  switch(val) {
+  case ITestService::CompilerChecks::UsingHasDeprecated::Tag::n:
+    return "n";
+  case ITestService::CompilerChecks::UsingHasDeprecated::Tag::m:
+    return "m";
+  default:
+    return std::to_string(static_cast<int32_t>(val));
+  }
+}
+}  // namespace tests
+}  // namespace aidl
+}  // namespace android
+}  // namespace aidl
+namespace ndk {
+namespace internal {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wc++17-extensions"
+template <>
+constexpr inline std::array<aidl::android::aidl::tests::ITestService::CompilerChecks::UsingHasDeprecated::Tag, 2> enum_values<aidl::android::aidl::tests::ITestService::CompilerChecks::UsingHasDeprecated::Tag> = {
+  aidl::android::aidl::tests::ITestService::CompilerChecks::UsingHasDeprecated::Tag::n,
+  aidl::android::aidl::tests::ITestService::CompilerChecks::UsingHasDeprecated::Tag::m,
+};
+#pragma clang diagnostic pop
+}  // namespace internal
+}  // namespace ndk
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ParcelableForToString.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ParcelableForToString.h
index 29de79d..c21dd66 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ParcelableForToString.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ParcelableForToString.h
@@ -17,6 +17,12 @@
 #include <android/binder_stability.h>
 #endif  // BINDER_STABILITY_SUPPORT
 
+namespace aidl::android::aidl::tests {
+template <typename T, typename U, typename B>
+class GenericStructuredParcelable;
+class OtherParcelableForToString;
+class StructuredParcelable;
+}  // namespace aidl::android::aidl::tests
 namespace aidl {
 namespace android {
 namespace aidl {
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/RecursiveList.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/RecursiveList.h
index 1abd135..a21676c 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/RecursiveList.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/RecursiveList.h
@@ -13,6 +13,9 @@
 #include <android/binder_stability.h>
 #endif  // BINDER_STABILITY_SUPPORT
 
+namespace aidl::android::aidl::tests {
+class RecursiveList;
+}  // namespace aidl::android::aidl::tests
 namespace aidl {
 namespace android {
 namespace aidl {
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/extension/MyExt2.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/extension/MyExt2.h
index ea21b55..7aef599 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/extension/MyExt2.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/extension/MyExt2.h
@@ -13,6 +13,9 @@
 #include <android/binder_stability.h>
 #endif  // BINDER_STABILITY_SUPPORT
 
+namespace aidl::android::aidl::tests::extension {
+class MyExt;
+}  // namespace aidl::android::aidl::tests::extension
 namespace aidl {
 namespace android {
 namespace aidl {
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/nested/INestedService.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/nested/INestedService.h
index ea49409..e17a214 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/nested/INestedService.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/nested/INestedService.h
@@ -15,6 +15,9 @@
 #include <android/binder_stability.h>
 #endif  // BINDER_STABILITY_SUPPORT
 
+namespace aidl::android::aidl::tests::nested {
+class ParcelableWithNested;
+}  // namespace aidl::android::aidl::tests::nested
 namespace aidl {
 namespace android {
 namespace aidl {
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h
index 2190f50..d54db94 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h
@@ -29,6 +29,8 @@
 namespace aidl {
 namespace tests {
 namespace unions {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
 class EnumUnion {
 public:
   typedef std::false_type fixed_size;
@@ -119,10 +121,7 @@
     switch (getTag()) {
     case intEnum: os << "intEnum: " << ::android::internal::ToString(get<intEnum>()); break;
     case longEnum: os << "longEnum: " << ::android::internal::ToString(get<longEnum>()); break;
-    #pragma clang diagnostic push
-    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
     case deprecatedField: os << "deprecatedField: " << ::android::internal::ToString(get<deprecatedField>()); break;
-    #pragma clang diagnostic pop
     }
     os << "}";
     return os.str();
@@ -130,6 +129,7 @@
 private:
   std::variant<::aidl::android::aidl::tests::IntEnum, ::aidl::android::aidl::tests::LongEnum, int32_t> _value;
 };
+#pragma clang diagnostic pop
 }  // namespace unions
 }  // namespace tests
 }  // namespace aidl
diff --git a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtected.java b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtected.java
index c20acb4..6c35028 100644
--- a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtected.java
+++ b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtected.java
@@ -19,6 +19,10 @@
     @Override public void NonManifestPermission() throws android.os.RemoteException
     {
     }
+    // Used by the integration tests to dynamically set permissions that are considered granted.
+    @Override public void SetGranted(java.util.List<java.lang.String> permissions) throws android.os.RemoteException
+    {
+    }
     @Override
     public android.os.IBinder asBinder() {
       return null;
@@ -27,10 +31,21 @@
   /** Local-side IPC implementation stub class. */
   public static abstract class Stub extends android.os.Binder implements android.aidl.tests.permission.IProtected
   {
-    /** Construct the stub at attach it to the interface. */
-    public Stub()
+    private final android.os.PermissionEnforcer mEnforcer;
+    /** Construct the stub using the Enforcer provided. */
+    public Stub(android.os.PermissionEnforcer enforcer)
     {
       this.attachInterface(this, DESCRIPTOR);
+      if (enforcer == null) {
+        throw new IllegalArgumentException("enforcer cannot be null");
+      }
+      mEnforcer = enforcer;
+    }
+    @Deprecated
+    /** Default constructor. */
+    public Stub() {
+      this(android.os.PermissionEnforcer.fromContext(
+         android.app.ActivityThread.currentActivityThread().getSystemContext()));
     }
     /**
      * Cast an IBinder object into an android.aidl.tests.permission.IProtected interface,
@@ -51,6 +66,42 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_PermissionProtected:
+        {
+          return "PermissionProtected";
+        }
+        case TRANSACTION_MultiplePermissionsAll:
+        {
+          return "MultiplePermissionsAll";
+        }
+        case TRANSACTION_MultiplePermissionsAny:
+        {
+          return "MultiplePermissionsAny";
+        }
+        case TRANSACTION_NonManifestPermission:
+        {
+          return "NonManifestPermission";
+        }
+        case TRANSACTION_SetGranted:
+        {
+          return "SetGranted";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -69,40 +120,37 @@
       {
         case TRANSACTION_PermissionProtected:
         {
-          if ((this.permissionCheckerWrapper(android.Manifest.permission.READ_PHONE_STATE, this.getCallingPid(), new android.content.AttributionSource(getCallingUid(), null, null))!=true)) {
-            throw new SecurityException("Access denied, requires: android.Manifest.permission.READ_PHONE_STATE");
-          }
           this.PermissionProtected();
           reply.writeNoException();
           break;
         }
         case TRANSACTION_MultiplePermissionsAll:
         {
-          if (((this.permissionCheckerWrapper(android.Manifest.permission.INTERNET, this.getCallingPid(), new android.content.AttributionSource(getCallingUid(), null, null))&&this.permissionCheckerWrapper(android.Manifest.permission.VIBRATE, this.getCallingPid(), new android.content.AttributionSource(getCallingUid(), null, null)))!=true)) {
-            throw new SecurityException("Access denied, requires: allOf = {android.Manifest.permission.INTERNET, android.Manifest.permission.VIBRATE}");
-          }
           this.MultiplePermissionsAll();
           reply.writeNoException();
           break;
         }
         case TRANSACTION_MultiplePermissionsAny:
         {
-          if (((this.permissionCheckerWrapper(android.Manifest.permission.INTERNET, this.getCallingPid(), new android.content.AttributionSource(getCallingUid(), null, null))||this.permissionCheckerWrapper(android.Manifest.permission.VIBRATE, this.getCallingPid(), new android.content.AttributionSource(getCallingUid(), null, null)))!=true)) {
-            throw new SecurityException("Access denied, requires: anyOf = {android.Manifest.permission.INTERNET, android.Manifest.permission.VIBRATE}");
-          }
           this.MultiplePermissionsAny();
           reply.writeNoException();
           break;
         }
         case TRANSACTION_NonManifestPermission:
         {
-          if ((this.permissionCheckerWrapper(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, this.getCallingPid(), new android.content.AttributionSource(getCallingUid(), null, null))!=true)) {
-            throw new SecurityException("Access denied, requires: android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK");
-          }
           this.NonManifestPermission();
           reply.writeNoException();
           break;
         }
+        case TRANSACTION_SetGranted:
+        {
+          java.util.List<java.lang.String> _arg0;
+          _arg0 = data.createStringArrayList();
+          data.enforceNoDataAvail();
+          this.SetGranted(_arg0);
+          reply.writeNoException();
+          break;
+        }
         default:
         {
           return super.onTransact(code, data, reply, flags);
@@ -127,7 +175,7 @@
       }
       @Override public void PermissionProtected() throws android.os.RemoteException
       {
-        android.os.Parcel _data = android.os.Parcel.obtain();
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
         android.os.Parcel _reply = android.os.Parcel.obtain();
         try {
           _data.writeInterfaceToken(DESCRIPTOR);
@@ -141,7 +189,7 @@
       }
       @Override public void MultiplePermissionsAll() throws android.os.RemoteException
       {
-        android.os.Parcel _data = android.os.Parcel.obtain();
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
         android.os.Parcel _reply = android.os.Parcel.obtain();
         try {
           _data.writeInterfaceToken(DESCRIPTOR);
@@ -155,7 +203,7 @@
       }
       @Override public void MultiplePermissionsAny() throws android.os.RemoteException
       {
-        android.os.Parcel _data = android.os.Parcel.obtain();
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
         android.os.Parcel _reply = android.os.Parcel.obtain();
         try {
           _data.writeInterfaceToken(DESCRIPTOR);
@@ -169,7 +217,7 @@
       }
       @Override public void NonManifestPermission() throws android.os.RemoteException
       {
-        android.os.Parcel _data = android.os.Parcel.obtain();
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
         android.os.Parcel _reply = android.os.Parcel.obtain();
         try {
           _data.writeInterfaceToken(DESCRIPTOR);
@@ -181,19 +229,53 @@
           _data.recycle();
         }
       }
-    }
-    private boolean permissionCheckerWrapper(
-        String permission, int pid, android.content.AttributionSource attributionSource) {
-      android.content.Context ctx =
-          android.app.ActivityThread.currentActivityThread().getSystemContext();
-      return (android.content.PermissionChecker.checkPermissionForDataDelivery(
-              ctx, permission, pid, attributionSource, "" /*message*/) ==
-          android.content.PermissionChecker.PERMISSION_GRANTED);
+      // Used by the integration tests to dynamically set permissions that are considered granted.
+      @Override public void SetGranted(java.util.List<java.lang.String> permissions) throws android.os.RemoteException
+      {
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
+        android.os.Parcel _reply = android.os.Parcel.obtain();
+        try {
+          _data.writeInterfaceToken(DESCRIPTOR);
+          _data.writeStringList(permissions);
+          boolean _status = mRemote.transact(Stub.TRANSACTION_SetGranted, _data, _reply, 0);
+          _reply.readException();
+        }
+        finally {
+          _reply.recycle();
+          _data.recycle();
+        }
+      }
     }
     static final int TRANSACTION_PermissionProtected = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+    /** Helper method to enforce permissions for PermissionProtected */
+    protected void PermissionProtected_enforcePermission() throws SecurityException {
+      android.content.AttributionSource source = new android.content.AttributionSource(getCallingUid(), null, null);
+      mEnforcer.enforcePermission(android.Manifest.permission.READ_PHONE_STATE, source);
+    }
     static final int TRANSACTION_MultiplePermissionsAll = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
+    /** Helper method to enforce permissions for MultiplePermissionsAll */
+    protected void MultiplePermissionsAll_enforcePermission() throws SecurityException {
+      android.content.AttributionSource source = new android.content.AttributionSource(getCallingUid(), null, null);
+      mEnforcer.enforcePermissionAllOf(new String[]{android.Manifest.permission.INTERNET, android.Manifest.permission.VIBRATE}, source);
+    }
     static final int TRANSACTION_MultiplePermissionsAny = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);
+    /** Helper method to enforce permissions for MultiplePermissionsAny */
+    protected void MultiplePermissionsAny_enforcePermission() throws SecurityException {
+      android.content.AttributionSource source = new android.content.AttributionSource(getCallingUid(), null, null);
+      mEnforcer.enforcePermissionAnyOf(new String[]{android.Manifest.permission.INTERNET, android.Manifest.permission.VIBRATE}, source);
+    }
     static final int TRANSACTION_NonManifestPermission = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3);
+    /** Helper method to enforce permissions for NonManifestPermission */
+    protected void NonManifestPermission_enforcePermission() throws SecurityException {
+      android.content.AttributionSource source = new android.content.AttributionSource(getCallingUid(), null, null);
+      mEnforcer.enforcePermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, source);
+    }
+    static final int TRANSACTION_SetGranted = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4);
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 4;
+    }
   }
   public static final java.lang.String DESCRIPTOR = "android$aidl$tests$permission$IProtected".replace('$', '.');
   @android.annotation.EnforcePermission(android.Manifest.permission.READ_PHONE_STATE)
@@ -204,4 +286,7 @@
   public void MultiplePermissionsAny() throws android.os.RemoteException;
   @android.annotation.EnforcePermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK)
   public void NonManifestPermission() throws android.os.RemoteException;
+  // Used by the integration tests to dynamically set permissions that are considered granted.
+  @android.annotation.RequiresNoPermission
+  public void SetGranted(java.util.List<java.lang.String> permissions) throws android.os.RemoteException;
 }
diff --git a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtectedInterface.java b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtectedInterface.java
index 1119f06..24f1f2d 100644
--- a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtectedInterface.java
+++ b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/IProtectedInterface.java
@@ -21,10 +21,21 @@
   /** Local-side IPC implementation stub class. */
   public static abstract class Stub extends android.os.Binder implements android.aidl.tests.permission.IProtectedInterface
   {
-    /** Construct the stub at attach it to the interface. */
-    public Stub()
+    private final android.os.PermissionEnforcer mEnforcer;
+    /** Construct the stub using the Enforcer provided. */
+    public Stub(android.os.PermissionEnforcer enforcer)
     {
       this.attachInterface(this, DESCRIPTOR);
+      if (enforcer == null) {
+        throw new IllegalArgumentException("enforcer cannot be null");
+      }
+      mEnforcer = enforcer;
+    }
+    @Deprecated
+    /** Default constructor. */
+    public Stub() {
+      this(android.os.PermissionEnforcer.fromContext(
+         android.app.ActivityThread.currentActivityThread().getSystemContext()));
     }
     /**
      * Cast an IBinder object into an android.aidl.tests.permission.IProtectedInterface interface,
@@ -45,6 +56,30 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_Method1:
+        {
+          return "Method1";
+        }
+        case TRANSACTION_Method2:
+        {
+          return "Method2";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -63,18 +98,12 @@
       {
         case TRANSACTION_Method1:
         {
-          if ((this.permissionCheckerWrapper(android.Manifest.permission.ACCESS_FINE_LOCATION, this.getCallingPid(), new android.content.AttributionSource(getCallingUid(), null, null))!=true)) {
-            throw new SecurityException("Access denied, requires: android.Manifest.permission.ACCESS_FINE_LOCATION");
-          }
           this.Method1();
           reply.writeNoException();
           break;
         }
         case TRANSACTION_Method2:
         {
-          if ((this.permissionCheckerWrapper(android.Manifest.permission.ACCESS_FINE_LOCATION, this.getCallingPid(), new android.content.AttributionSource(getCallingUid(), null, null))!=true)) {
-            throw new SecurityException("Access denied, requires: android.Manifest.permission.ACCESS_FINE_LOCATION");
-          }
           this.Method2();
           reply.writeNoException();
           break;
@@ -103,7 +132,7 @@
       }
       @Override public void Method1() throws android.os.RemoteException
       {
-        android.os.Parcel _data = android.os.Parcel.obtain();
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
         android.os.Parcel _reply = android.os.Parcel.obtain();
         try {
           _data.writeInterfaceToken(DESCRIPTOR);
@@ -117,7 +146,7 @@
       }
       @Override public void Method2() throws android.os.RemoteException
       {
-        android.os.Parcel _data = android.os.Parcel.obtain();
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
         android.os.Parcel _reply = android.os.Parcel.obtain();
         try {
           _data.writeInterfaceToken(DESCRIPTOR);
@@ -130,16 +159,23 @@
         }
       }
     }
-    private boolean permissionCheckerWrapper(
-        String permission, int pid, android.content.AttributionSource attributionSource) {
-      android.content.Context ctx =
-          android.app.ActivityThread.currentActivityThread().getSystemContext();
-      return (android.content.PermissionChecker.checkPermissionForDataDelivery(
-              ctx, permission, pid, attributionSource, "" /*message*/) ==
-          android.content.PermissionChecker.PERMISSION_GRANTED);
-    }
     static final int TRANSACTION_Method1 = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+    /** Helper method to enforce permissions for Method1 */
+    protected void Method1_enforcePermission() throws SecurityException {
+      android.content.AttributionSource source = new android.content.AttributionSource(getCallingUid(), null, null);
+      mEnforcer.enforcePermission(android.Manifest.permission.ACCESS_FINE_LOCATION, source);
+    }
     static final int TRANSACTION_Method2 = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
+    /** Helper method to enforce permissions for Method2 */
+    protected void Method2_enforcePermission() throws SecurityException {
+      android.content.AttributionSource source = new android.content.AttributionSource(getCallingUid(), null, null);
+      mEnforcer.enforcePermission(android.Manifest.permission.ACCESS_FINE_LOCATION, source);
+    }
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 1;
+    }
   }
   public static final java.lang.String DESCRIPTOR = "android$aidl$tests$permission$IProtectedInterface".replace('$', '.');
   @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_FINE_LOCATION)
diff --git a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/platform/IProtected.java b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/platform/IProtected.java
index 7b6d96f..d6fde91 100644
--- a/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/platform/IProtected.java
+++ b/tests/golden_output/aidl-test-interface-permission-java-source/gen/android/aidl/tests/permission/platform/IProtected.java
@@ -18,10 +18,21 @@
   /** Local-side IPC implementation stub class. */
   public static abstract class Stub extends android.os.Binder implements android.aidl.tests.permission.platform.IProtected
   {
-    /** Construct the stub at attach it to the interface. */
-    public Stub()
+    private final android.os.PermissionEnforcer mEnforcer;
+    /** Construct the stub using the Enforcer provided. */
+    public Stub(android.os.PermissionEnforcer enforcer)
     {
       this.attachInterface(this, DESCRIPTOR);
+      if (enforcer == null) {
+        throw new IllegalArgumentException("enforcer cannot be null");
+      }
+      mEnforcer = enforcer;
+    }
+    @Deprecated
+    /** Default constructor. */
+    public Stub() {
+      this(android.os.PermissionEnforcer.fromContext(
+         android.app.ActivityThread.currentActivityThread().getSystemContext()));
     }
     /**
      * Cast an IBinder object into an android.aidl.tests.permission.platform.IProtected interface,
@@ -42,6 +53,26 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_ProtectedWithSourceAttribution:
+        {
+          return "ProtectedWithSourceAttribution";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -63,9 +94,6 @@
           android.content.AttributionSource _arg0;
           _arg0 = data.readTypedObject(android.content.AttributionSource.CREATOR);
           data.enforceNoDataAvail();
-          if (((this.permissionCheckerWrapper(android.Manifest.permission.INTERNET, this.getCallingPid(), _arg0)&&this.permissionCheckerWrapper(android.Manifest.permission.VIBRATE, this.getCallingPid(), _arg0))!=true)) {
-            throw new SecurityException("Access denied, requires: allOf = {android.Manifest.permission.INTERNET, android.Manifest.permission.VIBRATE}");
-          }
           this.ProtectedWithSourceAttribution(_arg0);
           reply.writeNoException();
           break;
@@ -94,7 +122,7 @@
       }
       @Override public void ProtectedWithSourceAttribution(android.content.AttributionSource source) throws android.os.RemoteException
       {
-        android.os.Parcel _data = android.os.Parcel.obtain();
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
         android.os.Parcel _reply = android.os.Parcel.obtain();
         try {
           _data.writeInterfaceToken(DESCRIPTOR);
@@ -108,15 +136,16 @@
         }
       }
     }
-    private boolean permissionCheckerWrapper(
-        String permission, int pid, android.content.AttributionSource attributionSource) {
-      android.content.Context ctx =
-          android.app.ActivityThread.currentActivityThread().getSystemContext();
-      return (android.content.PermissionChecker.checkPermissionForDataDelivery(
-              ctx, permission, pid, attributionSource, "" /*message*/) ==
-          android.content.PermissionChecker.PERMISSION_GRANTED);
-    }
     static final int TRANSACTION_ProtectedWithSourceAttribution = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+    /** Helper method to enforce permissions for ProtectedWithSourceAttribution */
+    protected void ProtectedWithSourceAttribution_enforcePermission(android.content.AttributionSource source) throws SecurityException {
+      mEnforcer.enforcePermissionAllOf(new String[]{android.Manifest.permission.INTERNET, android.Manifest.permission.VIBRATE}, source);
+    }
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 0;
+    }
   }
   public static final java.lang.String DESCRIPTOR = "android$aidl$tests$permission$platform$IProtected".replace('$', '.');
   @android.annotation.EnforcePermission(allOf = {android.Manifest.permission.INTERNET, android.Manifest.permission.VIBRATE})
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ArrayOfInterfaces.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ArrayOfInterfaces.rs
index 42b05dc..93ad590 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ArrayOfInterfaces.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ArrayOfInterfaces.rs
@@ -1,15 +1,15 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct ArrayOfInterfaces {
+pub struct r#ArrayOfInterfaces {
 }
-impl Default for ArrayOfInterfaces {
+impl Default for r#ArrayOfInterfaces {
   fn default() -> Self {
     Self {
     }
   }
 }
-impl binder::Parcelable for ArrayOfInterfaces {
+impl binder::Parcelable for r#ArrayOfInterfaces {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
       Ok(())
@@ -21,12 +21,12 @@
     })
   }
 }
-binder::impl_serialize_for_parcelable!(ArrayOfInterfaces);
-binder::impl_deserialize_for_parcelable!(ArrayOfInterfaces);
-impl binder::binder_impl::ParcelableMetadata for ArrayOfInterfaces {
+binder::impl_serialize_for_parcelable!(r#ArrayOfInterfaces);
+binder::impl_deserialize_for_parcelable!(r#ArrayOfInterfaces);
+impl binder::binder_impl::ParcelableMetadata for r#ArrayOfInterfaces {
   fn get_descriptor() -> &'static str { "android.aidl.tests.ArrayOfInterfaces" }
 }
-pub mod IEmptyInterface {
+pub mod r#IEmptyInterface {
   #![allow(non_upper_case_globals)]
   #![allow(non_snake_case)]
   #[allow(unused_imports)] use binder::binder_impl::IBinderInternal;
@@ -103,7 +103,7 @@
     }
   }
 }
-pub mod IMyInterface {
+pub mod r#IMyInterface {
   #![allow(non_upper_case_globals)]
   #![allow(non_snake_case)]
   #[allow(unused_imports)] use binder::binder_impl::IBinderInternal;
@@ -118,7 +118,7 @@
   }
   pub trait IMyInterface: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ArrayOfInterfaces.IMyInterface" }
-    fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>>;
+    fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>>;
     fn getDefaultImpl() -> IMyInterfaceDefaultRef where Self: Sized {
       DEFAULT_IMPL.lock().unwrap().clone()
     }
@@ -128,12 +128,12 @@
   }
   pub trait IMyInterfaceAsync<P>: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ArrayOfInterfaces.IMyInterface" }
-    fn methodWithInterfaces<'a>(&'a self, _arg_iface: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &'a mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &'a mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>>>;
+    fn r#methodWithInterfaces<'a>(&'a self, _arg_iface: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &'a mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &'a mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>>>;
   }
   #[::async_trait::async_trait]
   pub trait IMyInterfaceAsyncServer: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ArrayOfInterfaces.IMyInterface" }
-    async fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>>;
+    async fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>>;
   }
   impl BnMyInterface {
     /// Create a new async binder service.
@@ -155,8 +155,8 @@
         T: IMyInterfaceAsyncServer + Send + Sync + 'static,
         R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
       {
-        fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>> {
-          self._rt.block_on(self._inner.methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_array_in, _arg_iface_array_out, _arg_iface_array_inout, _arg_nullable_iface_array_in, _arg_nullable_iface_array_out, _arg_nullable_iface_array_inout))
+        fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>> {
+          self._rt.block_on(self._inner.r#methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_array_in, _arg_iface_array_out, _arg_iface_array_inout, _arg_nullable_iface_array_in, _arg_nullable_iface_array_out, _arg_nullable_iface_array_inout))
         }
       }
       let wrapped = Wrapper { _inner: inner, _rt: rt };
@@ -164,12 +164,12 @@
     }
   }
   pub trait IMyInterfaceDefault: Send + Sync {
-    fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>> {
+    fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
   }
   pub mod transactions {
-    pub const methodWithInterfaces: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+    pub const r#methodWithInterfaces: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
   }
   pub type IMyInterfaceDefaultRef = Option<std::sync::Arc<dyn IMyInterfaceDefault>>;
   use lazy_static::lazy_static;
@@ -192,7 +192,7 @@
     fn read_response_methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as IMyInterface>::getDefaultImpl() {
-          return _aidl_default_impl.methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_array_in, _arg_iface_array_out, _arg_iface_array_inout, _arg_nullable_iface_array_in, _arg_nullable_iface_array_out, _arg_nullable_iface_array_inout);
+          return _aidl_default_impl.r#methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_array_in, _arg_iface_array_out, _arg_iface_array_inout, _arg_nullable_iface_array_in, _arg_nullable_iface_array_out, _arg_nullable_iface_array_inout);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -207,21 +207,21 @@
     }
   }
   impl IMyInterface for BpMyInterface {
-    fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>> {
+    fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>> {
       let _aidl_data = self.build_parcel_methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_array_in, _arg_iface_array_out, _arg_iface_array_inout, _arg_nullable_iface_array_in, _arg_nullable_iface_array_out, _arg_nullable_iface_array_inout)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::methodWithInterfaces, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#methodWithInterfaces, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_array_in, _arg_iface_array_out, _arg_iface_array_inout, _arg_nullable_iface_array_in, _arg_nullable_iface_array_out, _arg_nullable_iface_array_inout, _aidl_reply)
     }
   }
   impl<P: binder::BinderAsyncPool> IMyInterfaceAsync<P> for BpMyInterface {
-    fn methodWithInterfaces<'a>(&'a self, _arg_iface: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &'a mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &'a mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>>> {
+    fn r#methodWithInterfaces<'a>(&'a self, _arg_iface: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &'a mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &'a mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>>> {
       let _aidl_data = match self.build_parcel_methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_array_in, _arg_iface_array_out, _arg_iface_array_inout, _arg_nullable_iface_array_in, _arg_nullable_iface_array_out, _arg_nullable_iface_array_inout) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::methodWithInterfaces, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#methodWithInterfaces, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_array_in, _arg_iface_array_out, _arg_iface_array_inout, _arg_nullable_iface_array_in, _arg_nullable_iface_array_out, _arg_nullable_iface_array_inout, _aidl_reply)
         }
@@ -229,11 +229,11 @@
     }
   }
   impl IMyInterface for binder::binder_impl::Binder<BnMyInterface> {
-    fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>> { self.0.methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_array_in, _arg_iface_array_out, _arg_iface_array_inout, _arg_nullable_iface_array_in, _arg_nullable_iface_array_out, _arg_nullable_iface_array_inout) }
+    fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_iface_array_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>], _arg_iface_array_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>, _arg_iface_array_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_array_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_array_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_array_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>> { self.0.r#methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_array_in, _arg_iface_array_out, _arg_iface_array_inout, _arg_nullable_iface_array_in, _arg_nullable_iface_array_out, _arg_nullable_iface_array_inout) }
   }
   fn on_transact(_aidl_service: &dyn IMyInterface, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
     match _aidl_code {
-      transactions::methodWithInterfaces => {
+      transactions::r#methodWithInterfaces => {
         let _arg_iface: binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface> = _aidl_data.read()?;
         let _arg_nullable_iface: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>> = _aidl_data.read()?;
         let _arg_iface_array_in: Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>> = _aidl_data.read()?;
@@ -244,7 +244,7 @@
         let mut _arg_nullable_iface_array_out: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>> = Default::default();
         _aidl_data.resize_nullable_out_vec(&mut _arg_nullable_iface_array_out)?;
         let mut _arg_nullable_iface_array_inout: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>> = _aidl_data.read()?;
-        let _aidl_return = _aidl_service.methodWithInterfaces(&_arg_iface, _arg_nullable_iface.as_ref(), &_arg_iface_array_in, &mut _arg_iface_array_out, &mut _arg_iface_array_inout, _arg_nullable_iface_array_in.as_deref(), &mut _arg_nullable_iface_array_out, &mut _arg_nullable_iface_array_inout);
+        let _aidl_return = _aidl_service.r#methodWithInterfaces(&_arg_iface, _arg_nullable_iface.as_ref(), &_arg_iface_array_in, &mut _arg_iface_array_out, &mut _arg_iface_array_inout, _arg_nullable_iface_array_in.as_deref(), &mut _arg_nullable_iface_array_out, &mut _arg_nullable_iface_array_inout);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -262,73 +262,73 @@
     }
   }
 }
-pub mod MyParcelable {
+pub mod r#MyParcelable {
   #[derive(Debug)]
-  pub struct MyParcelable {
-    pub iface: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>,
-    pub nullable_iface: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>,
-    pub iface_array: Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>,
-    pub nullable_iface_array: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>,
+  pub struct r#MyParcelable {
+    pub r#iface: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>,
+    pub r#nullable_iface: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>,
+    pub r#iface_array: Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>,
+    pub r#nullable_iface_array: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>,
   }
-  impl Default for MyParcelable {
+  impl Default for r#MyParcelable {
     fn default() -> Self {
       Self {
-        iface: Default::default(),
-        nullable_iface: Default::default(),
-        iface_array: Default::default(),
-        nullable_iface_array: Default::default(),
+        r#iface: Default::default(),
+        r#nullable_iface: Default::default(),
+        r#iface_array: Default::default(),
+        r#nullable_iface_array: Default::default(),
       }
     }
   }
-  impl binder::Parcelable for MyParcelable {
+  impl binder::Parcelable for r#MyParcelable {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_write(|subparcel| {
-        let __field_ref = self.iface.as_ref().ok_or(binder::StatusCode::UNEXPECTED_NULL)?;
+        let __field_ref = self.r#iface.as_ref().ok_or(binder::StatusCode::UNEXPECTED_NULL)?;
         subparcel.write(__field_ref)?;
-        subparcel.write(&self.nullable_iface)?;
-        subparcel.write(&self.iface_array)?;
-        subparcel.write(&self.nullable_iface_array)?;
+        subparcel.write(&self.r#nullable_iface)?;
+        subparcel.write(&self.r#iface_array)?;
+        subparcel.write(&self.r#nullable_iface_array)?;
         Ok(())
       })
     }
     fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_read(|subparcel| {
         if subparcel.has_more_data() {
-          self.iface = Some(subparcel.read()?);
+          self.r#iface = Some(subparcel.read()?);
         }
         if subparcel.has_more_data() {
-          self.nullable_iface = subparcel.read()?;
+          self.r#nullable_iface = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.iface_array = subparcel.read()?;
+          self.r#iface_array = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.nullable_iface_array = subparcel.read()?;
+          self.r#nullable_iface_array = subparcel.read()?;
         }
         Ok(())
       })
     }
   }
-  binder::impl_serialize_for_parcelable!(MyParcelable);
-  binder::impl_deserialize_for_parcelable!(MyParcelable);
-  impl binder::binder_impl::ParcelableMetadata for MyParcelable {
+  binder::impl_serialize_for_parcelable!(r#MyParcelable);
+  binder::impl_deserialize_for_parcelable!(r#MyParcelable);
+  impl binder::binder_impl::ParcelableMetadata for r#MyParcelable {
     fn get_descriptor() -> &'static str { "android.aidl.tests.ArrayOfInterfaces.MyParcelable" }
   }
 }
-pub mod MyUnion {
+pub mod r#MyUnion {
   #[derive(Debug)]
-  pub enum MyUnion {
+  pub enum r#MyUnion {
     Iface(Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>),
     Nullable_iface(Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>),
     Iface_array(Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>),
     Nullable_iface_array(Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface>>>>),
   }
-  impl Default for MyUnion {
+  impl Default for r#MyUnion {
     fn default() -> Self {
       Self::Iface(Default::default())
     }
   }
-  impl binder::Parcelable for MyUnion {
+  impl binder::Parcelable for r#MyUnion {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       match self {
         Self::Iface(v) => {
@@ -379,29 +379,29 @@
       }
     }
   }
-  binder::impl_serialize_for_parcelable!(MyUnion);
-  binder::impl_deserialize_for_parcelable!(MyUnion);
-  impl binder::binder_impl::ParcelableMetadata for MyUnion {
+  binder::impl_serialize_for_parcelable!(r#MyUnion);
+  binder::impl_deserialize_for_parcelable!(r#MyUnion);
+  impl binder::binder_impl::ParcelableMetadata for r#MyUnion {
     fn get_descriptor() -> &'static str { "android.aidl.tests.ArrayOfInterfaces.MyUnion" }
   }
-  pub mod Tag {
+  pub mod r#Tag {
     #![allow(non_upper_case_globals)]
     use binder::declare_binder_enum;
     declare_binder_enum! {
-      Tag : [i32; 4] {
-        iface = 0,
-        nullable_iface = 1,
-        iface_array = 2,
-        nullable_iface_array = 3,
+      r#Tag : [i32; 4] {
+        r#iface = 0,
+        r#nullable_iface = 1,
+        r#iface_array = 2,
+        r#nullable_iface_array = 3,
       }
     }
   }
 }
 pub(crate) mod mangled {
- pub use super::ArrayOfInterfaces as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces;
- pub use super::IEmptyInterface::IEmptyInterface as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface;
- pub use super::IMyInterface::IMyInterface as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_12_IMyInterface;
- pub use super::MyParcelable::MyParcelable as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_12_MyParcelable;
- pub use super::MyUnion::MyUnion as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_7_MyUnion;
- pub use super::MyUnion::Tag::Tag as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_7_MyUnion_3_Tag;
+ pub use super::r#ArrayOfInterfaces as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces;
+ pub use super::r#IEmptyInterface::r#IEmptyInterface as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_15_IEmptyInterface;
+ pub use super::r#IMyInterface::r#IMyInterface as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_12_IMyInterface;
+ pub use super::r#MyParcelable::r#MyParcelable as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_12_MyParcelable;
+ pub use super::r#MyUnion::r#MyUnion as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_7_MyUnion;
+ pub use super::r#MyUnion::r#Tag::r#Tag as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_7_MyUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/BackendType.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/BackendType.rs
index 7f4be56..30160f7 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/BackendType.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/BackendType.rs
@@ -3,13 +3,13 @@
 #![allow(non_upper_case_globals)]
 use binder::declare_binder_enum;
 declare_binder_enum! {
-  BackendType : [i8; 4] {
-    CPP = 0,
-    JAVA = 1,
-    NDK = 2,
-    RUST = 3,
+  r#BackendType : [i8; 4] {
+    r#CPP = 0,
+    r#JAVA = 1,
+    r#NDK = 2,
+    r#RUST = 3,
   }
 }
 pub(crate) mod mangled {
- pub use super::BackendType as _7_android_4_aidl_5_tests_11_BackendType;
+ pub use super::r#BackendType as _7_android_4_aidl_5_tests_11_BackendType;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ByteEnum.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ByteEnum.rs
index 57c61ee..f7926cb 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ByteEnum.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ByteEnum.rs
@@ -3,12 +3,12 @@
 #![allow(non_upper_case_globals)]
 use binder::declare_binder_enum;
 declare_binder_enum! {
-  ByteEnum : [i8; 3] {
-    FOO = 1,
-    BAR = 2,
-    BAZ = 3,
+  r#ByteEnum : [i8; 3] {
+    r#FOO = 1,
+    r#BAR = 2,
+    r#BAZ = 3,
   }
 }
 pub(crate) mod mangled {
- pub use super::ByteEnum as _7_android_4_aidl_5_tests_8_ByteEnum;
+ pub use super::r#ByteEnum as _7_android_4_aidl_5_tests_8_ByteEnum;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/CircularParcelable.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/CircularParcelable.rs
new file mode 100644
index 0000000..89bcb37
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/CircularParcelable.rs
@@ -0,0 +1,37 @@
+#![forbid(unsafe_code)]
+#![rustfmt::skip]
+#[derive(Debug)]
+pub struct r#CircularParcelable {
+  pub r#testService: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>>,
+}
+impl Default for r#CircularParcelable {
+  fn default() -> Self {
+    Self {
+      r#testService: Default::default(),
+    }
+  }
+}
+impl binder::Parcelable for r#CircularParcelable {
+  fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
+    parcel.sized_write(|subparcel| {
+      subparcel.write(&self.r#testService)?;
+      Ok(())
+    })
+  }
+  fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
+    parcel.sized_read(|subparcel| {
+      if subparcel.has_more_data() {
+        self.r#testService = subparcel.read()?;
+      }
+      Ok(())
+    })
+  }
+}
+binder::impl_serialize_for_parcelable!(r#CircularParcelable);
+binder::impl_deserialize_for_parcelable!(r#CircularParcelable);
+impl binder::binder_impl::ParcelableMetadata for r#CircularParcelable {
+  fn get_descriptor() -> &'static str { "android.aidl.tests.CircularParcelable" }
+}
+pub(crate) mod mangled {
+ pub use super::r#CircularParcelable as _7_android_4_aidl_5_tests_18_CircularParcelable;
+}
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/CircularParcelable.rs.d b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/CircularParcelable.rs.d
new file mode 100644
index 0000000..f031808
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/CircularParcelable.rs.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-rust-source/gen/android/aidl/tests/CircularParcelable.rs : \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ConstantExpressionEnum.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ConstantExpressionEnum.rs
index 32a1942..eac40f1 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ConstantExpressionEnum.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ConstantExpressionEnum.rs
@@ -3,19 +3,19 @@
 #![allow(non_upper_case_globals)]
 use binder::declare_binder_enum;
 declare_binder_enum! {
-  ConstantExpressionEnum : [i32; 10] {
-    decInt32_1 = 1,
-    decInt32_2 = 1,
-    decInt64_1 = 1,
-    decInt64_2 = 1,
-    decInt64_3 = 1,
-    decInt64_4 = 1,
-    hexInt32_1 = 1,
-    hexInt32_2 = 1,
-    hexInt32_3 = 1,
-    hexInt64_1 = 1,
+  r#ConstantExpressionEnum : [i32; 10] {
+    r#decInt32_1 = 1,
+    r#decInt32_2 = 1,
+    r#decInt64_1 = 1,
+    r#decInt64_2 = 1,
+    r#decInt64_3 = 1,
+    r#decInt64_4 = 1,
+    r#hexInt32_1 = 1,
+    r#hexInt32_2 = 1,
+    r#hexInt32_3 = 1,
+    r#hexInt64_1 = 1,
   }
 }
 pub(crate) mod mangled {
- pub use super::ConstantExpressionEnum as _7_android_4_aidl_5_tests_22_ConstantExpressionEnum;
+ pub use super::r#ConstantExpressionEnum as _7_android_4_aidl_5_tests_22_ConstantExpressionEnum;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/DeprecatedEnum.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/DeprecatedEnum.rs
index 5d3b054..e3e4c23 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/DeprecatedEnum.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/DeprecatedEnum.rs
@@ -4,12 +4,12 @@
 use binder::declare_binder_enum;
 declare_binder_enum! {
   #[deprecated = "test"]
-  DeprecatedEnum : [i32; 3] {
-    A = 0,
-    B = 1,
-    C = 2,
+  r#DeprecatedEnum : [i32; 3] {
+    r#A = 0,
+    r#B = 1,
+    r#C = 2,
   }
 }
 pub(crate) mod mangled {
- pub use super::DeprecatedEnum as _7_android_4_aidl_5_tests_14_DeprecatedEnum;
+ pub use super::r#DeprecatedEnum as _7_android_4_aidl_5_tests_14_DeprecatedEnum;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/DeprecatedParcelable.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/DeprecatedParcelable.rs
index a13deb6..621f5f6 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/DeprecatedParcelable.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/DeprecatedParcelable.rs
@@ -2,15 +2,15 @@
 #![rustfmt::skip]
 #[derive(Debug)]
 #[deprecated = "test"]
-pub struct DeprecatedParcelable {
+pub struct r#DeprecatedParcelable {
 }
-impl Default for DeprecatedParcelable {
+impl Default for r#DeprecatedParcelable {
   fn default() -> Self {
     Self {
     }
   }
 }
-impl binder::Parcelable for DeprecatedParcelable {
+impl binder::Parcelable for r#DeprecatedParcelable {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
       Ok(())
@@ -22,11 +22,11 @@
     })
   }
 }
-binder::impl_serialize_for_parcelable!(DeprecatedParcelable);
-binder::impl_deserialize_for_parcelable!(DeprecatedParcelable);
-impl binder::binder_impl::ParcelableMetadata for DeprecatedParcelable {
+binder::impl_serialize_for_parcelable!(r#DeprecatedParcelable);
+binder::impl_deserialize_for_parcelable!(r#DeprecatedParcelable);
+impl binder::binder_impl::ParcelableMetadata for r#DeprecatedParcelable {
   fn get_descriptor() -> &'static str { "android.aidl.tests.DeprecatedParcelable" }
 }
 pub(crate) mod mangled {
- pub use super::DeprecatedParcelable as _7_android_4_aidl_5_tests_20_DeprecatedParcelable;
+ pub use super::r#DeprecatedParcelable as _7_android_4_aidl_5_tests_20_DeprecatedParcelable;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs
index 2ea4430..cd73b70 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs
@@ -1,15 +1,15 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct FixedSize {
+pub struct r#FixedSize {
 }
-impl Default for FixedSize {
+impl Default for r#FixedSize {
   fn default() -> Self {
     Self {
     }
   }
 }
-impl binder::Parcelable for FixedSize {
+impl binder::Parcelable for r#FixedSize {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
       Ok(())
@@ -21,96 +21,96 @@
     })
   }
 }
-binder::impl_serialize_for_parcelable!(FixedSize);
-binder::impl_deserialize_for_parcelable!(FixedSize);
-impl binder::binder_impl::ParcelableMetadata for FixedSize {
+binder::impl_serialize_for_parcelable!(r#FixedSize);
+binder::impl_deserialize_for_parcelable!(r#FixedSize);
+impl binder::binder_impl::ParcelableMetadata for r#FixedSize {
   fn get_descriptor() -> &'static str { "android.aidl.tests.FixedSize" }
 }
-pub mod FixedParcelable {
+pub mod r#FixedParcelable {
   #[derive(Debug)]
-  pub struct FixedParcelable {
-    pub booleanValue: bool,
-    pub byteValue: i8,
-    pub charValue: u16,
-    pub intValue: i32,
-    pub longValue: i64,
-    pub floatValue: f32,
-    pub doubleValue: f64,
-    pub enumValue: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum,
-    pub parcelableValue: crate::mangled::_7_android_4_aidl_5_tests_9_FixedSize_10_FixedUnion,
+  pub struct r#FixedParcelable {
+    pub r#booleanValue: bool,
+    pub r#byteValue: i8,
+    pub r#charValue: u16,
+    pub r#intValue: i32,
+    pub r#longValue: i64,
+    pub r#floatValue: f32,
+    pub r#doubleValue: f64,
+    pub r#enumValue: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum,
+    pub r#parcelableValue: crate::mangled::_7_android_4_aidl_5_tests_9_FixedSize_10_FixedUnion,
   }
-  impl Default for FixedParcelable {
+  impl Default for r#FixedParcelable {
     fn default() -> Self {
       Self {
-        booleanValue: false,
-        byteValue: 0,
-        charValue: '\0' as u16,
-        intValue: 0,
-        longValue: 0,
-        floatValue: 0.000000f32,
-        doubleValue: 0.000000f64,
-        enumValue: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum::FOO,
-        parcelableValue: Default::default(),
+        r#booleanValue: false,
+        r#byteValue: 0,
+        r#charValue: '\0' as u16,
+        r#intValue: 0,
+        r#longValue: 0,
+        r#floatValue: 0.000000f32,
+        r#doubleValue: 0.000000f64,
+        r#enumValue: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum::FOO,
+        r#parcelableValue: Default::default(),
       }
     }
   }
-  impl binder::Parcelable for FixedParcelable {
+  impl binder::Parcelable for r#FixedParcelable {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_write(|subparcel| {
-        subparcel.write(&self.booleanValue)?;
-        subparcel.write(&self.byteValue)?;
-        subparcel.write(&self.charValue)?;
-        subparcel.write(&self.intValue)?;
-        subparcel.write(&self.longValue)?;
-        subparcel.write(&self.floatValue)?;
-        subparcel.write(&self.doubleValue)?;
-        subparcel.write(&self.enumValue)?;
-        subparcel.write(&self.parcelableValue)?;
+        subparcel.write(&self.r#booleanValue)?;
+        subparcel.write(&self.r#byteValue)?;
+        subparcel.write(&self.r#charValue)?;
+        subparcel.write(&self.r#intValue)?;
+        subparcel.write(&self.r#longValue)?;
+        subparcel.write(&self.r#floatValue)?;
+        subparcel.write(&self.r#doubleValue)?;
+        subparcel.write(&self.r#enumValue)?;
+        subparcel.write(&self.r#parcelableValue)?;
         Ok(())
       })
     }
     fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_read(|subparcel| {
         if subparcel.has_more_data() {
-          self.booleanValue = subparcel.read()?;
+          self.r#booleanValue = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.byteValue = subparcel.read()?;
+          self.r#byteValue = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.charValue = subparcel.read()?;
+          self.r#charValue = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.intValue = subparcel.read()?;
+          self.r#intValue = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.longValue = subparcel.read()?;
+          self.r#longValue = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.floatValue = subparcel.read()?;
+          self.r#floatValue = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.doubleValue = subparcel.read()?;
+          self.r#doubleValue = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.enumValue = subparcel.read()?;
+          self.r#enumValue = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.parcelableValue = subparcel.read()?;
+          self.r#parcelableValue = subparcel.read()?;
         }
         Ok(())
       })
     }
   }
-  binder::impl_serialize_for_parcelable!(FixedParcelable);
-  binder::impl_deserialize_for_parcelable!(FixedParcelable);
-  impl binder::binder_impl::ParcelableMetadata for FixedParcelable {
+  binder::impl_serialize_for_parcelable!(r#FixedParcelable);
+  binder::impl_deserialize_for_parcelable!(r#FixedParcelable);
+  impl binder::binder_impl::ParcelableMetadata for r#FixedParcelable {
     fn get_descriptor() -> &'static str { "android.aidl.tests.FixedSize.FixedParcelable" }
   }
 }
-pub mod FixedUnion {
+pub mod r#FixedUnion {
   #[derive(Debug)]
-  pub enum FixedUnion {
+  pub enum r#FixedUnion {
     BooleanValue(bool),
     ByteValue(i8),
     CharValue(u16),
@@ -120,12 +120,12 @@
     DoubleValue(f64),
     EnumValue(crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum),
   }
-  impl Default for FixedUnion {
+  impl Default for r#FixedUnion {
     fn default() -> Self {
       Self::BooleanValue(false)
     }
   }
-  impl binder::Parcelable for FixedUnion {
+  impl binder::Parcelable for r#FixedUnion {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       match self {
         Self::BooleanValue(v) => {
@@ -211,31 +211,31 @@
       }
     }
   }
-  binder::impl_serialize_for_parcelable!(FixedUnion);
-  binder::impl_deserialize_for_parcelable!(FixedUnion);
-  impl binder::binder_impl::ParcelableMetadata for FixedUnion {
+  binder::impl_serialize_for_parcelable!(r#FixedUnion);
+  binder::impl_deserialize_for_parcelable!(r#FixedUnion);
+  impl binder::binder_impl::ParcelableMetadata for r#FixedUnion {
     fn get_descriptor() -> &'static str { "android.aidl.tests.FixedSize.FixedUnion" }
   }
-  pub mod Tag {
+  pub mod r#Tag {
     #![allow(non_upper_case_globals)]
     use binder::declare_binder_enum;
     declare_binder_enum! {
-      Tag : [i8; 8] {
-        booleanValue = 0,
-        byteValue = 1,
-        charValue = 2,
-        intValue = 3,
-        longValue = 4,
-        floatValue = 5,
-        doubleValue = 6,
-        enumValue = 7,
+      r#Tag : [i8; 8] {
+        r#booleanValue = 0,
+        r#byteValue = 1,
+        r#charValue = 2,
+        r#intValue = 3,
+        r#longValue = 4,
+        r#floatValue = 5,
+        r#doubleValue = 6,
+        r#enumValue = 7,
       }
     }
   }
 }
 pub(crate) mod mangled {
- pub use super::FixedSize as _7_android_4_aidl_5_tests_9_FixedSize;
- pub use super::FixedParcelable::FixedParcelable as _7_android_4_aidl_5_tests_9_FixedSize_15_FixedParcelable;
- pub use super::FixedUnion::FixedUnion as _7_android_4_aidl_5_tests_9_FixedSize_10_FixedUnion;
- pub use super::FixedUnion::Tag::Tag as _7_android_4_aidl_5_tests_9_FixedSize_10_FixedUnion_3_Tag;
+ pub use super::r#FixedSize as _7_android_4_aidl_5_tests_9_FixedSize;
+ pub use super::r#FixedParcelable::r#FixedParcelable as _7_android_4_aidl_5_tests_9_FixedSize_15_FixedParcelable;
+ pub use super::r#FixedUnion::r#FixedUnion as _7_android_4_aidl_5_tests_9_FixedSize_10_FixedUnion;
+ pub use super::r#FixedUnion::r#Tag::r#Tag as _7_android_4_aidl_5_tests_9_FixedSize_10_FixedUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/GenericStructuredParcelable.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/GenericStructuredParcelable.rs
index 2729f51..290e34f 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/GenericStructuredParcelable.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/GenericStructuredParcelable.rs
@@ -1,43 +1,43 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct GenericStructuredParcelable {
-  pub a: i32,
-  pub b: i32,
+pub struct r#GenericStructuredParcelable {
+  pub r#a: i32,
+  pub r#b: i32,
 }
-impl Default for GenericStructuredParcelable {
+impl Default for r#GenericStructuredParcelable {
   fn default() -> Self {
     Self {
-      a: 0,
-      b: 0,
+      r#a: 0,
+      r#b: 0,
     }
   }
 }
-impl binder::Parcelable for GenericStructuredParcelable {
+impl binder::Parcelable for r#GenericStructuredParcelable {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.a)?;
-      subparcel.write(&self.b)?;
+      subparcel.write(&self.r#a)?;
+      subparcel.write(&self.r#b)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.a = subparcel.read()?;
+        self.r#a = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.b = subparcel.read()?;
+        self.r#b = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(GenericStructuredParcelable);
-binder::impl_deserialize_for_parcelable!(GenericStructuredParcelable);
-impl binder::binder_impl::ParcelableMetadata for GenericStructuredParcelable {
+binder::impl_serialize_for_parcelable!(r#GenericStructuredParcelable);
+binder::impl_deserialize_for_parcelable!(r#GenericStructuredParcelable);
+impl binder::binder_impl::ParcelableMetadata for r#GenericStructuredParcelable {
   fn get_descriptor() -> &'static str { "android.aidl.tests.GenericStructuredParcelable" }
 }
 pub(crate) mod mangled {
- pub use super::GenericStructuredParcelable as _7_android_4_aidl_5_tests_27_GenericStructuredParcelable;
+ pub use super::r#GenericStructuredParcelable as _7_android_4_aidl_5_tests_27_GenericStructuredParcelable;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ICircular.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ICircular.rs
new file mode 100644
index 0000000..b6b55bd
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ICircular.rs
@@ -0,0 +1,136 @@
+#![forbid(unsafe_code)]
+#![rustfmt::skip]
+#![allow(non_upper_case_globals)]
+#![allow(non_snake_case)]
+#[allow(unused_imports)] use binder::binder_impl::IBinderInternal;
+use binder::declare_binder_interface;
+declare_binder_interface! {
+  ICircular["android.aidl.tests.ICircular"] {
+    native: BnCircular(on_transact),
+    proxy: BpCircular {
+    },
+    async: ICircularAsync,
+  }
+}
+pub trait ICircular: binder::Interface + Send {
+  fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ICircular" }
+  fn r#GetTestService(&self) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>>>;
+  fn getDefaultImpl() -> ICircularDefaultRef where Self: Sized {
+    DEFAULT_IMPL.lock().unwrap().clone()
+  }
+  fn setDefaultImpl(d: ICircularDefaultRef) -> ICircularDefaultRef where Self: Sized {
+    std::mem::replace(&mut *DEFAULT_IMPL.lock().unwrap(), d)
+  }
+}
+pub trait ICircularAsync<P>: binder::Interface + Send {
+  fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ICircular" }
+  fn r#GetTestService<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>>>>;
+}
+#[::async_trait::async_trait]
+pub trait ICircularAsyncServer: binder::Interface + Send {
+  fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ICircular" }
+  async fn r#GetTestService(&self) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>>>;
+}
+impl BnCircular {
+  /// Create a new async binder service.
+  pub fn new_async_binder<T, R>(inner: T, rt: R, features: binder::BinderFeatures) -> binder::Strong<dyn ICircular>
+  where
+    T: ICircularAsyncServer + binder::Interface + Send + Sync + 'static,
+    R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
+  {
+    struct Wrapper<T, R> {
+      _inner: T,
+      _rt: R,
+    }
+    impl<T, R> binder::Interface for Wrapper<T, R> where T: binder::Interface, R: Send + Sync {
+      fn as_binder(&self) -> binder::SpIBinder { self._inner.as_binder() }
+      fn dump(&self, _file: &std::fs::File, _args: &[&std::ffi::CStr]) -> std::result::Result<(), binder::StatusCode> { self._inner.dump(_file, _args) }
+    }
+    impl<T, R> ICircular for Wrapper<T, R>
+    where
+      T: ICircularAsyncServer + Send + Sync + 'static,
+      R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
+    {
+      fn r#GetTestService(&self) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>>> {
+        self._rt.block_on(self._inner.r#GetTestService())
+      }
+    }
+    let wrapped = Wrapper { _inner: inner, _rt: rt };
+    Self::new_binder(wrapped, features)
+  }
+}
+pub trait ICircularDefault: Send + Sync {
+  fn r#GetTestService(&self) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>>> {
+    Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
+  }
+}
+pub mod transactions {
+  pub const r#GetTestService: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+}
+pub type ICircularDefaultRef = Option<std::sync::Arc<dyn ICircularDefault>>;
+use lazy_static::lazy_static;
+lazy_static! {
+  static ref DEFAULT_IMPL: std::sync::Mutex<ICircularDefaultRef> = std::sync::Mutex::new(None);
+}
+impl BpCircular {
+  fn build_parcel_GetTestService(&self) -> binder::Result<binder::binder_impl::Parcel> {
+    let mut aidl_data = self.binder.prepare_transact()?;
+    Ok(aidl_data)
+  }
+  fn read_response_GetTestService(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>>> {
+    if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
+      if let Some(_aidl_default_impl) = <Self as ICircular>::getDefaultImpl() {
+        return _aidl_default_impl.r#GetTestService();
+      }
+    }
+    let _aidl_reply = _aidl_reply?;
+    let _aidl_status: binder::Status = _aidl_reply.read()?;
+    if !_aidl_status.is_ok() { return Err(_aidl_status); }
+    let _aidl_return: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>> = _aidl_reply.read()?;
+    Ok(_aidl_return)
+  }
+}
+impl ICircular for BpCircular {
+  fn r#GetTestService(&self) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>>> {
+    let _aidl_data = self.build_parcel_GetTestService()?;
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetTestService, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    self.read_response_GetTestService(_aidl_reply)
+  }
+}
+impl<P: binder::BinderAsyncPool> ICircularAsync<P> for BpCircular {
+  fn r#GetTestService<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>>>> {
+    let _aidl_data = match self.build_parcel_GetTestService() {
+      Ok(_aidl_data) => _aidl_data,
+      Err(err) => return Box::pin(std::future::ready(Err(err))),
+    };
+    let binder = self.binder.clone();
+    P::spawn(
+      move || binder.submit_transact(transactions::r#GetTestService, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move |_aidl_reply| async move {
+        self.read_response_GetTestService(_aidl_reply)
+      }
+    )
+  }
+}
+impl ICircular for binder::binder_impl::Binder<BnCircular> {
+  fn r#GetTestService(&self) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_12_ITestService>>> { self.0.r#GetTestService() }
+}
+fn on_transact(_aidl_service: &dyn ICircular, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
+  match _aidl_code {
+    transactions::r#GetTestService => {
+      let _aidl_return = _aidl_service.r#GetTestService();
+      match &_aidl_return {
+        Ok(_aidl_return) => {
+          _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
+          _aidl_reply.write(_aidl_return)?;
+        }
+        Err(_aidl_status) => _aidl_reply.write(_aidl_status)?
+      }
+      Ok(())
+    }
+    _ => Err(binder::StatusCode::UNKNOWN_TRANSACTION)
+  }
+}
+pub(crate) mod mangled {
+ pub use super::r#ICircular as _7_android_4_aidl_5_tests_9_ICircular;
+}
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ICircular.rs.d b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ICircular.rs.d
new file mode 100644
index 0000000..2237337
--- /dev/null
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ICircular.rs.d
@@ -0,0 +1,16 @@
+out/soong/.intermediates/system/tools/aidl/aidl-test-interface-rust-source/gen/android/aidl/tests/ICircular.rs : \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IntEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
+  system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
+  system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
+  system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IDeprecated.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IDeprecated.rs
index 599a651..5e67e1b 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IDeprecated.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IDeprecated.rs
@@ -79,5 +79,5 @@
   }
 }
 pub(crate) mod mangled {
- pub use super::IDeprecated as _7_android_4_aidl_5_tests_11_IDeprecated;
+ pub use super::r#IDeprecated as _7_android_4_aidl_5_tests_11_IDeprecated;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/INamedCallback.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/INamedCallback.rs
index 49ae584..9ba10f0 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/INamedCallback.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/INamedCallback.rs
@@ -14,7 +14,7 @@
 }
 pub trait INamedCallback: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.INamedCallback" }
-  fn GetName(&self) -> binder::Result<String>;
+  fn r#GetName(&self) -> binder::Result<String>;
   fn getDefaultImpl() -> INamedCallbackDefaultRef where Self: Sized {
     DEFAULT_IMPL.lock().unwrap().clone()
   }
@@ -24,12 +24,12 @@
 }
 pub trait INamedCallbackAsync<P>: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.INamedCallback" }
-  fn GetName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>>;
+  fn r#GetName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>>;
 }
 #[::async_trait::async_trait]
 pub trait INamedCallbackAsyncServer: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.INamedCallback" }
-  async fn GetName(&self) -> binder::Result<String>;
+  async fn r#GetName(&self) -> binder::Result<String>;
 }
 impl BnNamedCallback {
   /// Create a new async binder service.
@@ -51,8 +51,8 @@
       T: INamedCallbackAsyncServer + Send + Sync + 'static,
       R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
     {
-      fn GetName(&self) -> binder::Result<String> {
-        self._rt.block_on(self._inner.GetName())
+      fn r#GetName(&self) -> binder::Result<String> {
+        self._rt.block_on(self._inner.r#GetName())
       }
     }
     let wrapped = Wrapper { _inner: inner, _rt: rt };
@@ -60,12 +60,12 @@
   }
 }
 pub trait INamedCallbackDefault: Send + Sync {
-  fn GetName(&self) -> binder::Result<String> {
+  fn r#GetName(&self) -> binder::Result<String> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
 }
 pub mod transactions {
-  pub const GetName: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+  pub const r#GetName: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
 }
 pub type INamedCallbackDefaultRef = Option<std::sync::Arc<dyn INamedCallbackDefault>>;
 use lazy_static::lazy_static;
@@ -80,7 +80,7 @@
   fn read_response_GetName(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<String> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as INamedCallback>::getDefaultImpl() {
-        return _aidl_default_impl.GetName();
+        return _aidl_default_impl.r#GetName();
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -91,21 +91,21 @@
   }
 }
 impl INamedCallback for BpNamedCallback {
-  fn GetName(&self) -> binder::Result<String> {
+  fn r#GetName(&self) -> binder::Result<String> {
     let _aidl_data = self.build_parcel_GetName()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetName(_aidl_reply)
   }
 }
 impl<P: binder::BinderAsyncPool> INamedCallbackAsync<P> for BpNamedCallback {
-  fn GetName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>> {
+  fn r#GetName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>> {
     let _aidl_data = match self.build_parcel_GetName() {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::GetName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#GetName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_GetName(_aidl_reply)
       }
@@ -113,12 +113,12 @@
   }
 }
 impl INamedCallback for binder::binder_impl::Binder<BnNamedCallback> {
-  fn GetName(&self) -> binder::Result<String> { self.0.GetName() }
+  fn r#GetName(&self) -> binder::Result<String> { self.0.r#GetName() }
 }
 fn on_transact(_aidl_service: &dyn INamedCallback, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
   match _aidl_code {
-    transactions::GetName => {
-      let _aidl_return = _aidl_service.GetName();
+    transactions::r#GetName => {
+      let _aidl_return = _aidl_service.r#GetName();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -132,5 +132,5 @@
   }
 }
 pub(crate) mod mangled {
- pub use super::INamedCallback as _7_android_4_aidl_5_tests_14_INamedCallback;
+ pub use super::r#INamedCallback as _7_android_4_aidl_5_tests_14_INamedCallback;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/INewName.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/INewName.rs
index f8003b5..b0fdf91 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/INewName.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/INewName.rs
@@ -14,7 +14,7 @@
 }
 pub trait INewName: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.IOldName" }
-  fn RealName(&self) -> binder::Result<String>;
+  fn r#RealName(&self) -> binder::Result<String>;
   fn getDefaultImpl() -> INewNameDefaultRef where Self: Sized {
     DEFAULT_IMPL.lock().unwrap().clone()
   }
@@ -24,12 +24,12 @@
 }
 pub trait INewNameAsync<P>: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.IOldName" }
-  fn RealName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>>;
+  fn r#RealName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>>;
 }
 #[::async_trait::async_trait]
 pub trait INewNameAsyncServer: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.IOldName" }
-  async fn RealName(&self) -> binder::Result<String>;
+  async fn r#RealName(&self) -> binder::Result<String>;
 }
 impl BnNewName {
   /// Create a new async binder service.
@@ -51,8 +51,8 @@
       T: INewNameAsyncServer + Send + Sync + 'static,
       R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
     {
-      fn RealName(&self) -> binder::Result<String> {
-        self._rt.block_on(self._inner.RealName())
+      fn r#RealName(&self) -> binder::Result<String> {
+        self._rt.block_on(self._inner.r#RealName())
       }
     }
     let wrapped = Wrapper { _inner: inner, _rt: rt };
@@ -60,12 +60,12 @@
   }
 }
 pub trait INewNameDefault: Send + Sync {
-  fn RealName(&self) -> binder::Result<String> {
+  fn r#RealName(&self) -> binder::Result<String> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
 }
 pub mod transactions {
-  pub const RealName: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+  pub const r#RealName: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
 }
 pub type INewNameDefaultRef = Option<std::sync::Arc<dyn INewNameDefault>>;
 use lazy_static::lazy_static;
@@ -80,7 +80,7 @@
   fn read_response_RealName(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<String> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as INewName>::getDefaultImpl() {
-        return _aidl_default_impl.RealName();
+        return _aidl_default_impl.r#RealName();
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -91,21 +91,21 @@
   }
 }
 impl INewName for BpNewName {
-  fn RealName(&self) -> binder::Result<String> {
+  fn r#RealName(&self) -> binder::Result<String> {
     let _aidl_data = self.build_parcel_RealName()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RealName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RealName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RealName(_aidl_reply)
   }
 }
 impl<P: binder::BinderAsyncPool> INewNameAsync<P> for BpNewName {
-  fn RealName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>> {
+  fn r#RealName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>> {
     let _aidl_data = match self.build_parcel_RealName() {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RealName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RealName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RealName(_aidl_reply)
       }
@@ -113,12 +113,12 @@
   }
 }
 impl INewName for binder::binder_impl::Binder<BnNewName> {
-  fn RealName(&self) -> binder::Result<String> { self.0.RealName() }
+  fn r#RealName(&self) -> binder::Result<String> { self.0.r#RealName() }
 }
 fn on_transact(_aidl_service: &dyn INewName, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
   match _aidl_code {
-    transactions::RealName => {
-      let _aidl_return = _aidl_service.RealName();
+    transactions::r#RealName => {
+      let _aidl_return = _aidl_service.r#RealName();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -132,5 +132,5 @@
   }
 }
 pub(crate) mod mangled {
- pub use super::INewName as _7_android_4_aidl_5_tests_8_INewName;
+ pub use super::r#INewName as _7_android_4_aidl_5_tests_8_INewName;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IOldName.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IOldName.rs
index e10bf92..97d330b 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IOldName.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IOldName.rs
@@ -14,7 +14,7 @@
 }
 pub trait IOldName: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.IOldName" }
-  fn RealName(&self) -> binder::Result<String>;
+  fn r#RealName(&self) -> binder::Result<String>;
   fn getDefaultImpl() -> IOldNameDefaultRef where Self: Sized {
     DEFAULT_IMPL.lock().unwrap().clone()
   }
@@ -24,12 +24,12 @@
 }
 pub trait IOldNameAsync<P>: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.IOldName" }
-  fn RealName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>>;
+  fn r#RealName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>>;
 }
 #[::async_trait::async_trait]
 pub trait IOldNameAsyncServer: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.IOldName" }
-  async fn RealName(&self) -> binder::Result<String>;
+  async fn r#RealName(&self) -> binder::Result<String>;
 }
 impl BnOldName {
   /// Create a new async binder service.
@@ -51,8 +51,8 @@
       T: IOldNameAsyncServer + Send + Sync + 'static,
       R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
     {
-      fn RealName(&self) -> binder::Result<String> {
-        self._rt.block_on(self._inner.RealName())
+      fn r#RealName(&self) -> binder::Result<String> {
+        self._rt.block_on(self._inner.r#RealName())
       }
     }
     let wrapped = Wrapper { _inner: inner, _rt: rt };
@@ -60,12 +60,12 @@
   }
 }
 pub trait IOldNameDefault: Send + Sync {
-  fn RealName(&self) -> binder::Result<String> {
+  fn r#RealName(&self) -> binder::Result<String> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
 }
 pub mod transactions {
-  pub const RealName: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+  pub const r#RealName: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
 }
 pub type IOldNameDefaultRef = Option<std::sync::Arc<dyn IOldNameDefault>>;
 use lazy_static::lazy_static;
@@ -80,7 +80,7 @@
   fn read_response_RealName(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<String> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as IOldName>::getDefaultImpl() {
-        return _aidl_default_impl.RealName();
+        return _aidl_default_impl.r#RealName();
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -91,21 +91,21 @@
   }
 }
 impl IOldName for BpOldName {
-  fn RealName(&self) -> binder::Result<String> {
+  fn r#RealName(&self) -> binder::Result<String> {
     let _aidl_data = self.build_parcel_RealName()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RealName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RealName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RealName(_aidl_reply)
   }
 }
 impl<P: binder::BinderAsyncPool> IOldNameAsync<P> for BpOldName {
-  fn RealName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>> {
+  fn r#RealName<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>> {
     let _aidl_data = match self.build_parcel_RealName() {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RealName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RealName, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RealName(_aidl_reply)
       }
@@ -113,12 +113,12 @@
   }
 }
 impl IOldName for binder::binder_impl::Binder<BnOldName> {
-  fn RealName(&self) -> binder::Result<String> { self.0.RealName() }
+  fn r#RealName(&self) -> binder::Result<String> { self.0.r#RealName() }
 }
 fn on_transact(_aidl_service: &dyn IOldName, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
   match _aidl_code {
-    transactions::RealName => {
-      let _aidl_return = _aidl_service.RealName();
+    transactions::r#RealName => {
+      let _aidl_return = _aidl_service.r#RealName();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -132,5 +132,5 @@
   }
 }
 pub(crate) mod mangled {
- pub use super::IOldName as _7_android_4_aidl_5_tests_8_IOldName;
+ pub use super::r#IOldName as _7_android_4_aidl_5_tests_8_IOldName;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs
index 36c03d4..b924f9b 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs
@@ -14,73 +14,75 @@
 }
 pub trait ITestService: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ITestService" }
-  fn UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32>;
+  fn r#UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32>;
   #[deprecated = "to make sure we have something in system/tools/aidl which does a compile check of deprecated and make sure this is reflected in goldens"]
-  fn Deprecated(&self) -> binder::Result<()>;
-  fn TestOneway(&self) -> binder::Result<()>;
-  fn RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool>;
-  fn RepeatByte(&self, _arg_token: i8) -> binder::Result<i8>;
-  fn RepeatChar(&self, _arg_token: u16) -> binder::Result<u16>;
-  fn RepeatInt(&self, _arg_token: i32) -> binder::Result<i32>;
-  fn RepeatLong(&self, _arg_token: i64) -> binder::Result<i64>;
-  fn RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32>;
-  fn RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64>;
-  fn RepeatString(&self, _arg_token: &str) -> binder::Result<String>;
-  fn RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>;
-  fn RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>;
-  fn RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>;
-  fn ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>>;
-  fn ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>>;
-  fn ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>>;
-  fn ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>>;
-  fn ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>>;
-  fn ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>>;
-  fn ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>>;
-  fn ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
-  fn ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>;
-  fn ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>;
-  fn ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>;
-  fn GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>;
-  fn VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool>;
-  fn GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>;
-  fn VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool>;
-  fn GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>;
-  fn VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool>;
-  fn GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>;
-  fn VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool>;
-  fn ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
-  fn RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor>;
-  fn ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>>;
-  fn ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()>;
-  fn RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>>;
-  fn RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>>;
-  fn RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>>;
-  fn RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>>;
-  fn RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>>;
-  fn RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>>;
-  fn RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>;
-  fn RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>;
-  fn RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>;
-  fn TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()>;
-  fn TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()>;
-  fn TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()>;
-  fn TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()>;
-  fn RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String>;
-  fn RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>>;
-  fn ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
-  fn ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>>;
-  fn ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>>;
-  fn GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>;
-  fn FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()>;
-  fn RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()>;
-  fn ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList>;
-  fn ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>>;
-  fn ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>>;
-  fn GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>;
-  fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>;
-  fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>;
-  fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>>;
-  fn getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>;
+  fn r#Deprecated(&self) -> binder::Result<()>;
+  fn r#TestOneway(&self) -> binder::Result<()>;
+  fn r#RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool>;
+  fn r#RepeatByte(&self, _arg_token: i8) -> binder::Result<i8>;
+  fn r#RepeatChar(&self, _arg_token: u16) -> binder::Result<u16>;
+  fn r#RepeatInt(&self, _arg_token: i32) -> binder::Result<i32>;
+  fn r#RepeatLong(&self, _arg_token: i64) -> binder::Result<i64>;
+  fn r#RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32>;
+  fn r#RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64>;
+  fn r#RepeatString(&self, _arg_token: &str) -> binder::Result<String>;
+  fn r#RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>;
+  fn r#RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>;
+  fn r#RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>;
+  fn r#ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>>;
+  fn r#ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>>;
+  fn r#ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>>;
+  fn r#ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>>;
+  fn r#ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>>;
+  fn r#ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>>;
+  fn r#ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>>;
+  fn r#ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
+  fn r#ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>;
+  fn r#ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>;
+  fn r#ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>;
+  fn r#GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>;
+  fn r#SetOtherTestService(&self, _arg_name: &str, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>) -> binder::Result<bool>;
+  fn r#VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool>;
+  fn r#GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>;
+  fn r#VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool>;
+  fn r#GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>;
+  fn r#VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool>;
+  fn r#GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>;
+  fn r#VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool>;
+  fn r#ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
+  fn r#RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor>;
+  fn r#ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>>;
+  fn r#ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()>;
+  fn r#RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>>;
+  fn r#RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>>;
+  fn r#RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>>;
+  fn r#RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>>;
+  fn r#RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>>;
+  fn r#RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>>;
+  fn r#RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>;
+  fn r#RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>;
+  fn r#RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>;
+  fn r#TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()>;
+  fn r#TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()>;
+  fn r#TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()>;
+  fn r#TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()>;
+  fn r#RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String>;
+  fn r#RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>>;
+  fn r#ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
+  fn r#ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>>;
+  fn r#ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>>;
+  fn r#GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>;
+  fn r#FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()>;
+  fn r#RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()>;
+  fn r#ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList>;
+  fn r#ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>>;
+  fn r#ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>>;
+  fn r#GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>;
+  fn r#GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>;
+  fn r#GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>;
+  fn r#GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>>;
+  fn r#getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>;
+  fn r#GetCircular(&self, _arg_cp: &mut crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_9_ICircular>>;
   fn getDefaultImpl() -> ITestServiceDefaultRef where Self: Sized {
     DEFAULT_IMPL.lock().unwrap().clone()
   }
@@ -90,144 +92,148 @@
 }
 pub trait ITestServiceAsync<P>: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ITestService" }
-  fn UnimplementedMethod<'a>(&'a self, _arg_arg: i32) -> binder::BoxFuture<'a, binder::Result<i32>>;
+  fn r#UnimplementedMethod<'a>(&'a self, _arg_arg: i32) -> binder::BoxFuture<'a, binder::Result<i32>>;
   #[deprecated = "to make sure we have something in system/tools/aidl which does a compile check of deprecated and make sure this is reflected in goldens"]
-  fn Deprecated<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<()>>;
-  fn TestOneway(&self) -> std::future::Ready<binder::Result<()>>;
-  fn RepeatBoolean<'a>(&'a self, _arg_token: bool) -> binder::BoxFuture<'a, binder::Result<bool>>;
-  fn RepeatByte<'a>(&'a self, _arg_token: i8) -> binder::BoxFuture<'a, binder::Result<i8>>;
-  fn RepeatChar<'a>(&'a self, _arg_token: u16) -> binder::BoxFuture<'a, binder::Result<u16>>;
-  fn RepeatInt<'a>(&'a self, _arg_token: i32) -> binder::BoxFuture<'a, binder::Result<i32>>;
-  fn RepeatLong<'a>(&'a self, _arg_token: i64) -> binder::BoxFuture<'a, binder::Result<i64>>;
-  fn RepeatFloat<'a>(&'a self, _arg_token: f32) -> binder::BoxFuture<'a, binder::Result<f32>>;
-  fn RepeatDouble<'a>(&'a self, _arg_token: f64) -> binder::BoxFuture<'a, binder::Result<f64>>;
-  fn RepeatString<'a>(&'a self, _arg_token: &'a str) -> binder::BoxFuture<'a, binder::Result<String>>;
-  fn RepeatByteEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>;
-  fn RepeatIntEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>;
-  fn RepeatLongEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>;
-  fn ReverseBoolean<'a>(&'a self, _arg_input: &'a [bool], _arg_repeated: &'a mut Vec<bool>) -> binder::BoxFuture<'a, binder::Result<Vec<bool>>>;
-  fn ReverseByte<'a>(&'a self, _arg_input: &'a [u8], _arg_repeated: &'a mut Vec<u8>) -> binder::BoxFuture<'a, binder::Result<Vec<u8>>>;
-  fn ReverseChar<'a>(&'a self, _arg_input: &'a [u16], _arg_repeated: &'a mut Vec<u16>) -> binder::BoxFuture<'a, binder::Result<Vec<u16>>>;
-  fn ReverseInt<'a>(&'a self, _arg_input: &'a [i32], _arg_repeated: &'a mut Vec<i32>) -> binder::BoxFuture<'a, binder::Result<Vec<i32>>>;
-  fn ReverseLong<'a>(&'a self, _arg_input: &'a [i64], _arg_repeated: &'a mut Vec<i64>) -> binder::BoxFuture<'a, binder::Result<Vec<i64>>>;
-  fn ReverseFloat<'a>(&'a self, _arg_input: &'a [f32], _arg_repeated: &'a mut Vec<f32>) -> binder::BoxFuture<'a, binder::Result<Vec<f32>>>;
-  fn ReverseDouble<'a>(&'a self, _arg_input: &'a [f64], _arg_repeated: &'a mut Vec<f64>) -> binder::BoxFuture<'a, binder::Result<Vec<f64>>>;
-  fn ReverseString<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>>;
-  fn ReverseByteEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>>;
-  fn ReverseIntEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>>;
-  fn ReverseLongEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>>;
-  fn GetOtherTestService<'a>(&'a self, _arg_name: &'a str) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>;
-  fn VerifyName<'a>(&'a self, _arg_service: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &'a str) -> binder::BoxFuture<'a, binder::Result<bool>>;
-  fn GetInterfaceArray<'a>(&'a self, _arg_names: &'a [String]) -> binder::BoxFuture<'a, binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>;
-  fn VerifyNamesWithInterfaceArray<'a>(&'a self, _arg_services: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &'a [String]) -> binder::BoxFuture<'a, binder::Result<bool>>;
-  fn GetNullableInterfaceArray<'a>(&'a self, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>>;
-  fn VerifyNamesWithNullableInterfaceArray<'a>(&'a self, _arg_services: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<bool>>;
-  fn GetInterfaceList<'a>(&'a self, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>>;
-  fn VerifyNamesWithInterfaceList<'a>(&'a self, _arg_services: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<bool>>;
-  fn ReverseStringList<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>>;
-  fn RepeatParcelFileDescriptor<'a>(&'a self, _arg_read: &'a binder::ParcelFileDescriptor) -> binder::BoxFuture<'a, binder::Result<binder::ParcelFileDescriptor>>;
-  fn ReverseParcelFileDescriptorArray<'a>(&'a self, _arg_input: &'a [binder::ParcelFileDescriptor], _arg_repeated: &'a mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::BoxFuture<'a, binder::Result<Vec<binder::ParcelFileDescriptor>>>;
-  fn ThrowServiceException<'a>(&'a self, _arg_code: i32) -> binder::BoxFuture<'a, binder::Result<()>>;
-  fn RepeatNullableIntArray<'a>(&'a self, _arg_input: Option<&'a [i32]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<i32>>>>;
-  fn RepeatNullableByteEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>>>;
-  fn RepeatNullableIntEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>>>;
-  fn RepeatNullableLongEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>>>;
-  fn RepeatNullableString<'a>(&'a self, _arg_input: Option<&'a str>) -> binder::BoxFuture<'a, binder::Result<Option<String>>>;
-  fn RepeatNullableStringList<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>>;
-  fn RepeatNullableParcelable<'a>(&'a self, _arg_input: Option<&'a crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::BoxFuture<'a, binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>;
-  fn RepeatNullableParcelableArray<'a>(&'a self, _arg_input: Option<&'a [Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>>;
-  fn RepeatNullableParcelableList<'a>(&'a self, _arg_input: Option<&'a [Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>>;
-  fn TakesAnIBinder<'a>(&'a self, _arg_input: &'a binder::SpIBinder) -> binder::BoxFuture<'a, binder::Result<()>>;
-  fn TakesANullableIBinder<'a>(&'a self, _arg_input: Option<&'a binder::SpIBinder>) -> binder::BoxFuture<'a, binder::Result<()>>;
-  fn TakesAnIBinderList<'a>(&'a self, _arg_input: &'a [binder::SpIBinder]) -> binder::BoxFuture<'a, binder::Result<()>>;
-  fn TakesANullableIBinderList<'a>(&'a self, _arg_input: Option<&'a [Option<binder::SpIBinder>]>) -> binder::BoxFuture<'a, binder::Result<()>>;
-  fn RepeatUtf8CppString<'a>(&'a self, _arg_token: &'a str) -> binder::BoxFuture<'a, binder::Result<String>>;
-  fn RepeatNullableUtf8CppString<'a>(&'a self, _arg_token: Option<&'a str>) -> binder::BoxFuture<'a, binder::Result<Option<String>>>;
-  fn ReverseUtf8CppString<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>>;
-  fn ReverseNullableUtf8CppString<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>, _arg_repeated: &'a mut Option<Vec<Option<String>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>>;
-  fn ReverseUtf8CppStringList<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>, _arg_repeated: &'a mut Option<Vec<Option<String>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>>;
-  fn GetCallback<'a>(&'a self, _arg_return_null: bool) -> binder::BoxFuture<'a, binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>;
-  fn FillOutStructuredParcelable<'a>(&'a self, _arg_parcel: &'a mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::BoxFuture<'a, binder::Result<()>>;
-  fn RepeatExtendableParcelable<'a>(&'a self, _arg_ep: &'a crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &'a mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::BoxFuture<'a, binder::Result<()>>;
-  fn ReverseList<'a>(&'a self, _arg_list: &'a crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList>>;
-  fn ReverseIBinderArray<'a>(&'a self, _arg_input: &'a [binder::SpIBinder], _arg_repeated: &'a mut Vec<Option<binder::SpIBinder>>) -> binder::BoxFuture<'a, binder::Result<Vec<binder::SpIBinder>>>;
-  fn ReverseNullableIBinderArray<'a>(&'a self, _arg_input: Option<&'a [Option<binder::SpIBinder>]>, _arg_repeated: &'a mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::SpIBinder>>>>>;
-  fn GetOldNameInterface<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>>;
-  fn GetNewNameInterface<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>>;
-  fn GetUnionTags<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>>;
-  fn GetCppJavaTests<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<Option<binder::SpIBinder>>>;
-  fn getBackendType<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>>;
+  fn r#Deprecated<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<()>>;
+  fn r#TestOneway(&self) -> std::future::Ready<binder::Result<()>>;
+  fn r#RepeatBoolean<'a>(&'a self, _arg_token: bool) -> binder::BoxFuture<'a, binder::Result<bool>>;
+  fn r#RepeatByte<'a>(&'a self, _arg_token: i8) -> binder::BoxFuture<'a, binder::Result<i8>>;
+  fn r#RepeatChar<'a>(&'a self, _arg_token: u16) -> binder::BoxFuture<'a, binder::Result<u16>>;
+  fn r#RepeatInt<'a>(&'a self, _arg_token: i32) -> binder::BoxFuture<'a, binder::Result<i32>>;
+  fn r#RepeatLong<'a>(&'a self, _arg_token: i64) -> binder::BoxFuture<'a, binder::Result<i64>>;
+  fn r#RepeatFloat<'a>(&'a self, _arg_token: f32) -> binder::BoxFuture<'a, binder::Result<f32>>;
+  fn r#RepeatDouble<'a>(&'a self, _arg_token: f64) -> binder::BoxFuture<'a, binder::Result<f64>>;
+  fn r#RepeatString<'a>(&'a self, _arg_token: &'a str) -> binder::BoxFuture<'a, binder::Result<String>>;
+  fn r#RepeatByteEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>;
+  fn r#RepeatIntEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>;
+  fn r#RepeatLongEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>;
+  fn r#ReverseBoolean<'a>(&'a self, _arg_input: &'a [bool], _arg_repeated: &'a mut Vec<bool>) -> binder::BoxFuture<'a, binder::Result<Vec<bool>>>;
+  fn r#ReverseByte<'a>(&'a self, _arg_input: &'a [u8], _arg_repeated: &'a mut Vec<u8>) -> binder::BoxFuture<'a, binder::Result<Vec<u8>>>;
+  fn r#ReverseChar<'a>(&'a self, _arg_input: &'a [u16], _arg_repeated: &'a mut Vec<u16>) -> binder::BoxFuture<'a, binder::Result<Vec<u16>>>;
+  fn r#ReverseInt<'a>(&'a self, _arg_input: &'a [i32], _arg_repeated: &'a mut Vec<i32>) -> binder::BoxFuture<'a, binder::Result<Vec<i32>>>;
+  fn r#ReverseLong<'a>(&'a self, _arg_input: &'a [i64], _arg_repeated: &'a mut Vec<i64>) -> binder::BoxFuture<'a, binder::Result<Vec<i64>>>;
+  fn r#ReverseFloat<'a>(&'a self, _arg_input: &'a [f32], _arg_repeated: &'a mut Vec<f32>) -> binder::BoxFuture<'a, binder::Result<Vec<f32>>>;
+  fn r#ReverseDouble<'a>(&'a self, _arg_input: &'a [f64], _arg_repeated: &'a mut Vec<f64>) -> binder::BoxFuture<'a, binder::Result<Vec<f64>>>;
+  fn r#ReverseString<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>>;
+  fn r#ReverseByteEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>>;
+  fn r#ReverseIntEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>>;
+  fn r#ReverseLongEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>>;
+  fn r#GetOtherTestService<'a>(&'a self, _arg_name: &'a str) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>;
+  fn r#SetOtherTestService<'a>(&'a self, _arg_name: &'a str, _arg_service: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>) -> binder::BoxFuture<'a, binder::Result<bool>>;
+  fn r#VerifyName<'a>(&'a self, _arg_service: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &'a str) -> binder::BoxFuture<'a, binder::Result<bool>>;
+  fn r#GetInterfaceArray<'a>(&'a self, _arg_names: &'a [String]) -> binder::BoxFuture<'a, binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>;
+  fn r#VerifyNamesWithInterfaceArray<'a>(&'a self, _arg_services: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &'a [String]) -> binder::BoxFuture<'a, binder::Result<bool>>;
+  fn r#GetNullableInterfaceArray<'a>(&'a self, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>>;
+  fn r#VerifyNamesWithNullableInterfaceArray<'a>(&'a self, _arg_services: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<bool>>;
+  fn r#GetInterfaceList<'a>(&'a self, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>>;
+  fn r#VerifyNamesWithInterfaceList<'a>(&'a self, _arg_services: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<bool>>;
+  fn r#ReverseStringList<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>>;
+  fn r#RepeatParcelFileDescriptor<'a>(&'a self, _arg_read: &'a binder::ParcelFileDescriptor) -> binder::BoxFuture<'a, binder::Result<binder::ParcelFileDescriptor>>;
+  fn r#ReverseParcelFileDescriptorArray<'a>(&'a self, _arg_input: &'a [binder::ParcelFileDescriptor], _arg_repeated: &'a mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::BoxFuture<'a, binder::Result<Vec<binder::ParcelFileDescriptor>>>;
+  fn r#ThrowServiceException<'a>(&'a self, _arg_code: i32) -> binder::BoxFuture<'a, binder::Result<()>>;
+  fn r#RepeatNullableIntArray<'a>(&'a self, _arg_input: Option<&'a [i32]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<i32>>>>;
+  fn r#RepeatNullableByteEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>>>;
+  fn r#RepeatNullableIntEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>>>;
+  fn r#RepeatNullableLongEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>>>;
+  fn r#RepeatNullableString<'a>(&'a self, _arg_input: Option<&'a str>) -> binder::BoxFuture<'a, binder::Result<Option<String>>>;
+  fn r#RepeatNullableStringList<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>>;
+  fn r#RepeatNullableParcelable<'a>(&'a self, _arg_input: Option<&'a crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::BoxFuture<'a, binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>;
+  fn r#RepeatNullableParcelableArray<'a>(&'a self, _arg_input: Option<&'a [Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>>;
+  fn r#RepeatNullableParcelableList<'a>(&'a self, _arg_input: Option<&'a [Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>>;
+  fn r#TakesAnIBinder<'a>(&'a self, _arg_input: &'a binder::SpIBinder) -> binder::BoxFuture<'a, binder::Result<()>>;
+  fn r#TakesANullableIBinder<'a>(&'a self, _arg_input: Option<&'a binder::SpIBinder>) -> binder::BoxFuture<'a, binder::Result<()>>;
+  fn r#TakesAnIBinderList<'a>(&'a self, _arg_input: &'a [binder::SpIBinder]) -> binder::BoxFuture<'a, binder::Result<()>>;
+  fn r#TakesANullableIBinderList<'a>(&'a self, _arg_input: Option<&'a [Option<binder::SpIBinder>]>) -> binder::BoxFuture<'a, binder::Result<()>>;
+  fn r#RepeatUtf8CppString<'a>(&'a self, _arg_token: &'a str) -> binder::BoxFuture<'a, binder::Result<String>>;
+  fn r#RepeatNullableUtf8CppString<'a>(&'a self, _arg_token: Option<&'a str>) -> binder::BoxFuture<'a, binder::Result<Option<String>>>;
+  fn r#ReverseUtf8CppString<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>>;
+  fn r#ReverseNullableUtf8CppString<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>, _arg_repeated: &'a mut Option<Vec<Option<String>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>>;
+  fn r#ReverseUtf8CppStringList<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>, _arg_repeated: &'a mut Option<Vec<Option<String>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>>;
+  fn r#GetCallback<'a>(&'a self, _arg_return_null: bool) -> binder::BoxFuture<'a, binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>;
+  fn r#FillOutStructuredParcelable<'a>(&'a self, _arg_parcel: &'a mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::BoxFuture<'a, binder::Result<()>>;
+  fn r#RepeatExtendableParcelable<'a>(&'a self, _arg_ep: &'a crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &'a mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::BoxFuture<'a, binder::Result<()>>;
+  fn r#ReverseList<'a>(&'a self, _arg_list: &'a crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList>>;
+  fn r#ReverseIBinderArray<'a>(&'a self, _arg_input: &'a [binder::SpIBinder], _arg_repeated: &'a mut Vec<Option<binder::SpIBinder>>) -> binder::BoxFuture<'a, binder::Result<Vec<binder::SpIBinder>>>;
+  fn r#ReverseNullableIBinderArray<'a>(&'a self, _arg_input: Option<&'a [Option<binder::SpIBinder>]>, _arg_repeated: &'a mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::SpIBinder>>>>>;
+  fn r#GetOldNameInterface<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>>;
+  fn r#GetNewNameInterface<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>>;
+  fn r#GetUnionTags<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>>;
+  fn r#GetCppJavaTests<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<Option<binder::SpIBinder>>>;
+  fn r#getBackendType<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>>;
+  fn r#GetCircular<'a>(&'a self, _arg_cp: &'a mut crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_9_ICircular>>>;
 }
 #[::async_trait::async_trait]
 pub trait ITestServiceAsyncServer: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ITestService" }
-  async fn UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32>;
+  async fn r#UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32>;
   #[deprecated = "to make sure we have something in system/tools/aidl which does a compile check of deprecated and make sure this is reflected in goldens"]
-  async fn Deprecated(&self) -> binder::Result<()>;
-  async fn TestOneway(&self) -> binder::Result<()>;
-  async fn RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool>;
-  async fn RepeatByte(&self, _arg_token: i8) -> binder::Result<i8>;
-  async fn RepeatChar(&self, _arg_token: u16) -> binder::Result<u16>;
-  async fn RepeatInt(&self, _arg_token: i32) -> binder::Result<i32>;
-  async fn RepeatLong(&self, _arg_token: i64) -> binder::Result<i64>;
-  async fn RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32>;
-  async fn RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64>;
-  async fn RepeatString(&self, _arg_token: &str) -> binder::Result<String>;
-  async fn RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>;
-  async fn RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>;
-  async fn RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>;
-  async fn ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>>;
-  async fn ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>>;
-  async fn ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>>;
-  async fn ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>>;
-  async fn ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>>;
-  async fn ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>>;
-  async fn ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>>;
-  async fn ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
-  async fn ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>;
-  async fn ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>;
-  async fn ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>;
-  async fn GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>;
-  async fn VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool>;
-  async fn GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>;
-  async fn VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool>;
-  async fn GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>;
-  async fn VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool>;
-  async fn GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>;
-  async fn VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool>;
-  async fn ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
-  async fn RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor>;
-  async fn ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>>;
-  async fn ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()>;
-  async fn RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>>;
-  async fn RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>>;
-  async fn RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>>;
-  async fn RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>>;
-  async fn RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>>;
-  async fn RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>>;
-  async fn RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>;
-  async fn RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>;
-  async fn RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>;
-  async fn TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()>;
-  async fn TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()>;
-  async fn TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()>;
-  async fn TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()>;
-  async fn RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String>;
-  async fn RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>>;
-  async fn ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
-  async fn ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>>;
-  async fn ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>>;
-  async fn GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>;
-  async fn FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()>;
-  async fn RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()>;
-  async fn ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList>;
-  async fn ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>>;
-  async fn ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>>;
-  async fn GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>;
-  async fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>;
-  async fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>;
-  async fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>>;
-  async fn getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>;
+  async fn r#Deprecated(&self) -> binder::Result<()>;
+  async fn r#TestOneway(&self) -> binder::Result<()>;
+  async fn r#RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool>;
+  async fn r#RepeatByte(&self, _arg_token: i8) -> binder::Result<i8>;
+  async fn r#RepeatChar(&self, _arg_token: u16) -> binder::Result<u16>;
+  async fn r#RepeatInt(&self, _arg_token: i32) -> binder::Result<i32>;
+  async fn r#RepeatLong(&self, _arg_token: i64) -> binder::Result<i64>;
+  async fn r#RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32>;
+  async fn r#RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64>;
+  async fn r#RepeatString(&self, _arg_token: &str) -> binder::Result<String>;
+  async fn r#RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>;
+  async fn r#RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>;
+  async fn r#RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>;
+  async fn r#ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>>;
+  async fn r#ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>>;
+  async fn r#ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>>;
+  async fn r#ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>>;
+  async fn r#ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>>;
+  async fn r#ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>>;
+  async fn r#ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>>;
+  async fn r#ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
+  async fn r#ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>;
+  async fn r#ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>;
+  async fn r#ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>;
+  async fn r#GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>;
+  async fn r#SetOtherTestService(&self, _arg_name: &str, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>) -> binder::Result<bool>;
+  async fn r#VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool>;
+  async fn r#GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>;
+  async fn r#VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool>;
+  async fn r#GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>;
+  async fn r#VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool>;
+  async fn r#GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>;
+  async fn r#VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool>;
+  async fn r#ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
+  async fn r#RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor>;
+  async fn r#ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>>;
+  async fn r#ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()>;
+  async fn r#RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>>;
+  async fn r#RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>>;
+  async fn r#RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>>;
+  async fn r#RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>>;
+  async fn r#RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>>;
+  async fn r#RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>>;
+  async fn r#RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>;
+  async fn r#RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>;
+  async fn r#RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>;
+  async fn r#TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()>;
+  async fn r#TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()>;
+  async fn r#TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()>;
+  async fn r#TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()>;
+  async fn r#RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String>;
+  async fn r#RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>>;
+  async fn r#ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>>;
+  async fn r#ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>>;
+  async fn r#ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>>;
+  async fn r#GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>;
+  async fn r#FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()>;
+  async fn r#RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()>;
+  async fn r#ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList>;
+  async fn r#ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>>;
+  async fn r#ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>>;
+  async fn r#GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>;
+  async fn r#GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>;
+  async fn r#GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>;
+  async fn r#GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>>;
+  async fn r#getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>;
+  async fn r#GetCircular(&self, _arg_cp: &mut crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_9_ICircular>>;
 }
 impl BnTestService {
   /// Create a new async binder service.
@@ -249,203 +255,209 @@
       T: ITestServiceAsyncServer + Send + Sync + 'static,
       R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
     {
-      fn UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32> {
-        self._rt.block_on(self._inner.UnimplementedMethod(_arg_arg))
+      fn r#UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32> {
+        self._rt.block_on(self._inner.r#UnimplementedMethod(_arg_arg))
       }
-      fn Deprecated(&self) -> binder::Result<()> {
-        self._rt.block_on(self._inner.Deprecated())
+      fn r#Deprecated(&self) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#Deprecated())
       }
-      fn TestOneway(&self) -> binder::Result<()> {
-        self._rt.block_on(self._inner.TestOneway())
+      fn r#TestOneway(&self) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#TestOneway())
       }
-      fn RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool> {
-        self._rt.block_on(self._inner.RepeatBoolean(_arg_token))
+      fn r#RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool> {
+        self._rt.block_on(self._inner.r#RepeatBoolean(_arg_token))
       }
-      fn RepeatByte(&self, _arg_token: i8) -> binder::Result<i8> {
-        self._rt.block_on(self._inner.RepeatByte(_arg_token))
+      fn r#RepeatByte(&self, _arg_token: i8) -> binder::Result<i8> {
+        self._rt.block_on(self._inner.r#RepeatByte(_arg_token))
       }
-      fn RepeatChar(&self, _arg_token: u16) -> binder::Result<u16> {
-        self._rt.block_on(self._inner.RepeatChar(_arg_token))
+      fn r#RepeatChar(&self, _arg_token: u16) -> binder::Result<u16> {
+        self._rt.block_on(self._inner.r#RepeatChar(_arg_token))
       }
-      fn RepeatInt(&self, _arg_token: i32) -> binder::Result<i32> {
-        self._rt.block_on(self._inner.RepeatInt(_arg_token))
+      fn r#RepeatInt(&self, _arg_token: i32) -> binder::Result<i32> {
+        self._rt.block_on(self._inner.r#RepeatInt(_arg_token))
       }
-      fn RepeatLong(&self, _arg_token: i64) -> binder::Result<i64> {
-        self._rt.block_on(self._inner.RepeatLong(_arg_token))
+      fn r#RepeatLong(&self, _arg_token: i64) -> binder::Result<i64> {
+        self._rt.block_on(self._inner.r#RepeatLong(_arg_token))
       }
-      fn RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32> {
-        self._rt.block_on(self._inner.RepeatFloat(_arg_token))
+      fn r#RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32> {
+        self._rt.block_on(self._inner.r#RepeatFloat(_arg_token))
       }
-      fn RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64> {
-        self._rt.block_on(self._inner.RepeatDouble(_arg_token))
+      fn r#RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64> {
+        self._rt.block_on(self._inner.r#RepeatDouble(_arg_token))
       }
-      fn RepeatString(&self, _arg_token: &str) -> binder::Result<String> {
-        self._rt.block_on(self._inner.RepeatString(_arg_token))
+      fn r#RepeatString(&self, _arg_token: &str) -> binder::Result<String> {
+        self._rt.block_on(self._inner.r#RepeatString(_arg_token))
       }
-      fn RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> {
-        self._rt.block_on(self._inner.RepeatByteEnum(_arg_token))
+      fn r#RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> {
+        self._rt.block_on(self._inner.r#RepeatByteEnum(_arg_token))
       }
-      fn RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> {
-        self._rt.block_on(self._inner.RepeatIntEnum(_arg_token))
+      fn r#RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> {
+        self._rt.block_on(self._inner.r#RepeatIntEnum(_arg_token))
       }
-      fn RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> {
-        self._rt.block_on(self._inner.RepeatLongEnum(_arg_token))
+      fn r#RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> {
+        self._rt.block_on(self._inner.r#RepeatLongEnum(_arg_token))
       }
-      fn ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>> {
-        self._rt.block_on(self._inner.ReverseBoolean(_arg_input, _arg_repeated))
+      fn r#ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>> {
+        self._rt.block_on(self._inner.r#ReverseBoolean(_arg_input, _arg_repeated))
       }
-      fn ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>> {
-        self._rt.block_on(self._inner.ReverseByte(_arg_input, _arg_repeated))
+      fn r#ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>> {
+        self._rt.block_on(self._inner.r#ReverseByte(_arg_input, _arg_repeated))
       }
-      fn ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>> {
-        self._rt.block_on(self._inner.ReverseChar(_arg_input, _arg_repeated))
+      fn r#ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>> {
+        self._rt.block_on(self._inner.r#ReverseChar(_arg_input, _arg_repeated))
       }
-      fn ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>> {
-        self._rt.block_on(self._inner.ReverseInt(_arg_input, _arg_repeated))
+      fn r#ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>> {
+        self._rt.block_on(self._inner.r#ReverseInt(_arg_input, _arg_repeated))
       }
-      fn ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>> {
-        self._rt.block_on(self._inner.ReverseLong(_arg_input, _arg_repeated))
+      fn r#ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>> {
+        self._rt.block_on(self._inner.r#ReverseLong(_arg_input, _arg_repeated))
       }
-      fn ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>> {
-        self._rt.block_on(self._inner.ReverseFloat(_arg_input, _arg_repeated))
+      fn r#ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>> {
+        self._rt.block_on(self._inner.r#ReverseFloat(_arg_input, _arg_repeated))
       }
-      fn ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>> {
-        self._rt.block_on(self._inner.ReverseDouble(_arg_input, _arg_repeated))
+      fn r#ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>> {
+        self._rt.block_on(self._inner.r#ReverseDouble(_arg_input, _arg_repeated))
       }
-      fn ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
-        self._rt.block_on(self._inner.ReverseString(_arg_input, _arg_repeated))
+      fn r#ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
+        self._rt.block_on(self._inner.r#ReverseString(_arg_input, _arg_repeated))
       }
-      fn ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> {
-        self._rt.block_on(self._inner.ReverseByteEnum(_arg_input, _arg_repeated))
+      fn r#ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> {
+        self._rt.block_on(self._inner.r#ReverseByteEnum(_arg_input, _arg_repeated))
       }
-      fn ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> {
-        self._rt.block_on(self._inner.ReverseIntEnum(_arg_input, _arg_repeated))
+      fn r#ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> {
+        self._rt.block_on(self._inner.r#ReverseIntEnum(_arg_input, _arg_repeated))
       }
-      fn ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> {
-        self._rt.block_on(self._inner.ReverseLongEnum(_arg_input, _arg_repeated))
+      fn r#ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> {
+        self._rt.block_on(self._inner.r#ReverseLongEnum(_arg_input, _arg_repeated))
       }
-      fn GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>> {
-        self._rt.block_on(self._inner.GetOtherTestService(_arg_name))
+      fn r#GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>> {
+        self._rt.block_on(self._inner.r#GetOtherTestService(_arg_name))
       }
-      fn VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool> {
-        self._rt.block_on(self._inner.VerifyName(_arg_service, _arg_name))
+      fn r#SetOtherTestService(&self, _arg_name: &str, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>) -> binder::Result<bool> {
+        self._rt.block_on(self._inner.r#SetOtherTestService(_arg_name, _arg_service))
       }
-      fn GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
-        self._rt.block_on(self._inner.GetInterfaceArray(_arg_names))
+      fn r#VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool> {
+        self._rt.block_on(self._inner.r#VerifyName(_arg_service, _arg_name))
       }
-      fn VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool> {
-        self._rt.block_on(self._inner.VerifyNamesWithInterfaceArray(_arg_services, _arg_names))
+      fn r#GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
+        self._rt.block_on(self._inner.r#GetInterfaceArray(_arg_names))
       }
-      fn GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
-        self._rt.block_on(self._inner.GetNullableInterfaceArray(_arg_names))
+      fn r#VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool> {
+        self._rt.block_on(self._inner.r#VerifyNamesWithInterfaceArray(_arg_services, _arg_names))
       }
-      fn VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
-        self._rt.block_on(self._inner.VerifyNamesWithNullableInterfaceArray(_arg_services, _arg_names))
+      fn r#GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
+        self._rt.block_on(self._inner.r#GetNullableInterfaceArray(_arg_names))
       }
-      fn GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
-        self._rt.block_on(self._inner.GetInterfaceList(_arg_names))
+      fn r#VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
+        self._rt.block_on(self._inner.r#VerifyNamesWithNullableInterfaceArray(_arg_services, _arg_names))
       }
-      fn VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
-        self._rt.block_on(self._inner.VerifyNamesWithInterfaceList(_arg_services, _arg_names))
+      fn r#GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
+        self._rt.block_on(self._inner.r#GetInterfaceList(_arg_names))
+      }
+      fn r#VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
+        self._rt.block_on(self._inner.r#VerifyNamesWithInterfaceList(_arg_services, _arg_names))
+      }
+      fn r#ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
+        self._rt.block_on(self._inner.r#ReverseStringList(_arg_input, _arg_repeated))
       }
-      fn ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
-        self._rt.block_on(self._inner.ReverseStringList(_arg_input, _arg_repeated))
+      fn r#RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor> {
+        self._rt.block_on(self._inner.r#RepeatParcelFileDescriptor(_arg_read))
       }
-      fn RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor> {
-        self._rt.block_on(self._inner.RepeatParcelFileDescriptor(_arg_read))
+      fn r#ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>> {
+        self._rt.block_on(self._inner.r#ReverseParcelFileDescriptorArray(_arg_input, _arg_repeated))
       }
-      fn ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>> {
-        self._rt.block_on(self._inner.ReverseParcelFileDescriptorArray(_arg_input, _arg_repeated))
+      fn r#ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#ThrowServiceException(_arg_code))
       }
-      fn ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()> {
-        self._rt.block_on(self._inner.ThrowServiceException(_arg_code))
+      fn r#RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>> {
+        self._rt.block_on(self._inner.r#RepeatNullableIntArray(_arg_input))
       }
-      fn RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>> {
-        self._rt.block_on(self._inner.RepeatNullableIntArray(_arg_input))
+      fn r#RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> {
+        self._rt.block_on(self._inner.r#RepeatNullableByteEnumArray(_arg_input))
       }
-      fn RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> {
-        self._rt.block_on(self._inner.RepeatNullableByteEnumArray(_arg_input))
+      fn r#RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> {
+        self._rt.block_on(self._inner.r#RepeatNullableIntEnumArray(_arg_input))
       }
-      fn RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> {
-        self._rt.block_on(self._inner.RepeatNullableIntEnumArray(_arg_input))
+      fn r#RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> {
+        self._rt.block_on(self._inner.r#RepeatNullableLongEnumArray(_arg_input))
       }
-      fn RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> {
-        self._rt.block_on(self._inner.RepeatNullableLongEnumArray(_arg_input))
+      fn r#RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>> {
+        self._rt.block_on(self._inner.r#RepeatNullableString(_arg_input))
       }
-      fn RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>> {
-        self._rt.block_on(self._inner.RepeatNullableString(_arg_input))
+      fn r#RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>> {
+        self._rt.block_on(self._inner.r#RepeatNullableStringList(_arg_input))
       }
-      fn RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>> {
-        self._rt.block_on(self._inner.RepeatNullableStringList(_arg_input))
+      fn r#RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>> {
+        self._rt.block_on(self._inner.r#RepeatNullableParcelable(_arg_input))
       }
-      fn RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>> {
-        self._rt.block_on(self._inner.RepeatNullableParcelable(_arg_input))
+      fn r#RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
+        self._rt.block_on(self._inner.r#RepeatNullableParcelableArray(_arg_input))
       }
-      fn RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
-        self._rt.block_on(self._inner.RepeatNullableParcelableArray(_arg_input))
+      fn r#RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
+        self._rt.block_on(self._inner.r#RepeatNullableParcelableList(_arg_input))
       }
-      fn RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
-        self._rt.block_on(self._inner.RepeatNullableParcelableList(_arg_input))
+      fn r#TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#TakesAnIBinder(_arg_input))
       }
-      fn TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()> {
-        self._rt.block_on(self._inner.TakesAnIBinder(_arg_input))
+      fn r#TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#TakesANullableIBinder(_arg_input))
       }
-      fn TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()> {
-        self._rt.block_on(self._inner.TakesANullableIBinder(_arg_input))
+      fn r#TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#TakesAnIBinderList(_arg_input))
       }
-      fn TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()> {
-        self._rt.block_on(self._inner.TakesAnIBinderList(_arg_input))
+      fn r#TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#TakesANullableIBinderList(_arg_input))
       }
-      fn TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()> {
-        self._rt.block_on(self._inner.TakesANullableIBinderList(_arg_input))
+      fn r#RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String> {
+        self._rt.block_on(self._inner.r#RepeatUtf8CppString(_arg_token))
       }
-      fn RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String> {
-        self._rt.block_on(self._inner.RepeatUtf8CppString(_arg_token))
+      fn r#RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>> {
+        self._rt.block_on(self._inner.r#RepeatNullableUtf8CppString(_arg_token))
       }
-      fn RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>> {
-        self._rt.block_on(self._inner.RepeatNullableUtf8CppString(_arg_token))
+      fn r#ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
+        self._rt.block_on(self._inner.r#ReverseUtf8CppString(_arg_input, _arg_repeated))
       }
-      fn ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
-        self._rt.block_on(self._inner.ReverseUtf8CppString(_arg_input, _arg_repeated))
+      fn r#ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
+        self._rt.block_on(self._inner.r#ReverseNullableUtf8CppString(_arg_input, _arg_repeated))
       }
-      fn ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
-        self._rt.block_on(self._inner.ReverseNullableUtf8CppString(_arg_input, _arg_repeated))
+      fn r#ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
+        self._rt.block_on(self._inner.r#ReverseUtf8CppStringList(_arg_input, _arg_repeated))
       }
-      fn ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
-        self._rt.block_on(self._inner.ReverseUtf8CppStringList(_arg_input, _arg_repeated))
+      fn r#GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
+        self._rt.block_on(self._inner.r#GetCallback(_arg_return_null))
       }
-      fn GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
-        self._rt.block_on(self._inner.GetCallback(_arg_return_null))
+      fn r#FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#FillOutStructuredParcelable(_arg_parcel))
       }
-      fn FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()> {
-        self._rt.block_on(self._inner.FillOutStructuredParcelable(_arg_parcel))
+      fn r#RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#RepeatExtendableParcelable(_arg_ep, _arg_ep2))
       }
-      fn RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()> {
-        self._rt.block_on(self._inner.RepeatExtendableParcelable(_arg_ep, _arg_ep2))
+      fn r#ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList> {
+        self._rt.block_on(self._inner.r#ReverseList(_arg_list))
       }
-      fn ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList> {
-        self._rt.block_on(self._inner.ReverseList(_arg_list))
+      fn r#ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>> {
+        self._rt.block_on(self._inner.r#ReverseIBinderArray(_arg_input, _arg_repeated))
       }
-      fn ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>> {
-        self._rt.block_on(self._inner.ReverseIBinderArray(_arg_input, _arg_repeated))
+      fn r#ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>> {
+        self._rt.block_on(self._inner.r#ReverseNullableIBinderArray(_arg_input, _arg_repeated))
       }
-      fn ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>> {
-        self._rt.block_on(self._inner.ReverseNullableIBinderArray(_arg_input, _arg_repeated))
+      fn r#GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>> {
+        self._rt.block_on(self._inner.r#GetOldNameInterface())
       }
-      fn GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>> {
-        self._rt.block_on(self._inner.GetOldNameInterface())
+      fn r#GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> {
+        self._rt.block_on(self._inner.r#GetNewNameInterface())
       }
-      fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> {
-        self._rt.block_on(self._inner.GetNewNameInterface())
+      fn r#GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
+        self._rt.block_on(self._inner.r#GetUnionTags(_arg_input))
       }
-      fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
-        self._rt.block_on(self._inner.GetUnionTags(_arg_input))
+      fn r#GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> {
+        self._rt.block_on(self._inner.r#GetCppJavaTests())
       }
-      fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> {
-        self._rt.block_on(self._inner.GetCppJavaTests())
+      fn r#getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType> {
+        self._rt.block_on(self._inner.r#getBackendType())
       }
-      fn getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType> {
-        self._rt.block_on(self._inner.getBackendType())
+      fn r#GetCircular(&self, _arg_cp: &mut crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_9_ICircular>> {
+        self._rt.block_on(self._inner.r#GetCircular(_arg_cp))
       }
     }
     let wrapped = Wrapper { _inner: inner, _rt: rt };
@@ -453,352 +465,360 @@
   }
 }
 pub trait ITestServiceDefault: Send + Sync {
-  fn UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32> {
+  fn r#UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn Deprecated(&self) -> binder::Result<()> {
+  fn r#Deprecated(&self) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn TestOneway(&self) -> binder::Result<()> {
+  fn r#TestOneway(&self) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool> {
+  fn r#RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatByte(&self, _arg_token: i8) -> binder::Result<i8> {
+  fn r#RepeatByte(&self, _arg_token: i8) -> binder::Result<i8> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatChar(&self, _arg_token: u16) -> binder::Result<u16> {
+  fn r#RepeatChar(&self, _arg_token: u16) -> binder::Result<u16> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatInt(&self, _arg_token: i32) -> binder::Result<i32> {
+  fn r#RepeatInt(&self, _arg_token: i32) -> binder::Result<i32> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatLong(&self, _arg_token: i64) -> binder::Result<i64> {
+  fn r#RepeatLong(&self, _arg_token: i64) -> binder::Result<i64> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32> {
+  fn r#RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64> {
+  fn r#RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatString(&self, _arg_token: &str) -> binder::Result<String> {
+  fn r#RepeatString(&self, _arg_token: &str) -> binder::Result<String> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> {
+  fn r#RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> {
+  fn r#RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> {
+  fn r#RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>> {
+  fn r#ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>> {
+  fn r#ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>> {
+  fn r#ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>> {
+  fn r#ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>> {
+  fn r#ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>> {
+  fn r#ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>> {
+  fn r#ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
+  fn r#ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> {
+  fn r#ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> {
+  fn r#ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> {
+  fn r#ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>> {
+  fn r#GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool> {
+  fn r#SetOtherTestService(&self, _arg_name: &str, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>) -> binder::Result<bool> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
+  fn r#VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool> {
+  fn r#GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
+  fn r#VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
+  fn r#GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
+  fn r#VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
+    Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
+  }
+  fn r#GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
+    Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
+  }
+  fn r#VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
+  fn r#ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
+  fn r#RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor> {
+  fn r#ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>> {
+  fn r#ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()> {
+  fn r#RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>> {
+  fn r#RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> {
+  fn r#RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> {
+  fn r#RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> {
+  fn r#RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>> {
+  fn r#RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>> {
+  fn r#RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>> {
+  fn r#RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
+  fn r#RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
+  fn r#TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()> {
+  fn r#TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()> {
+  fn r#TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()> {
+  fn r#TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()> {
+  fn r#RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String> {
+  fn r#RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>> {
+  fn r#ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
+  fn r#ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
+  fn r#ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
+  fn r#GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
+  fn r#FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()> {
+  fn r#RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()> {
+  fn r#ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList> {
+  fn r#ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>> {
+  fn r#ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>> {
+  fn r#GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>> {
+  fn r#GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> {
+  fn r#GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
+  fn r#GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> {
+  fn r#getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType> {
+  fn r#GetCircular(&self, _arg_cp: &mut crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_9_ICircular>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
 }
 pub mod transactions {
-  pub const UnimplementedMethod: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
-  pub const Deprecated: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 1;
-  pub const TestOneway: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 2;
-  pub const RepeatBoolean: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 3;
-  pub const RepeatByte: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 4;
-  pub const RepeatChar: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 5;
-  pub const RepeatInt: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 6;
-  pub const RepeatLong: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 7;
-  pub const RepeatFloat: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 8;
-  pub const RepeatDouble: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 9;
-  pub const RepeatString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 10;
-  pub const RepeatByteEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 11;
-  pub const RepeatIntEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 12;
-  pub const RepeatLongEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 13;
-  pub const ReverseBoolean: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 14;
-  pub const ReverseByte: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 15;
-  pub const ReverseChar: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 16;
-  pub const ReverseInt: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 17;
-  pub const ReverseLong: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 18;
-  pub const ReverseFloat: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 19;
-  pub const ReverseDouble: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 20;
-  pub const ReverseString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 21;
-  pub const ReverseByteEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 22;
-  pub const ReverseIntEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 23;
-  pub const ReverseLongEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 24;
-  pub const GetOtherTestService: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 25;
-  pub const VerifyName: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 26;
-  pub const GetInterfaceArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 27;
-  pub const VerifyNamesWithInterfaceArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 28;
-  pub const GetNullableInterfaceArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 29;
-  pub const VerifyNamesWithNullableInterfaceArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 30;
-  pub const GetInterfaceList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 31;
-  pub const VerifyNamesWithInterfaceList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 32;
-  pub const ReverseStringList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 33;
-  pub const RepeatParcelFileDescriptor: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 34;
-  pub const ReverseParcelFileDescriptorArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 35;
-  pub const ThrowServiceException: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 36;
-  pub const RepeatNullableIntArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 37;
-  pub const RepeatNullableByteEnumArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 38;
-  pub const RepeatNullableIntEnumArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 39;
-  pub const RepeatNullableLongEnumArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 40;
-  pub const RepeatNullableString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 41;
-  pub const RepeatNullableStringList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 42;
-  pub const RepeatNullableParcelable: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 43;
-  pub const RepeatNullableParcelableArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 44;
-  pub const RepeatNullableParcelableList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 45;
-  pub const TakesAnIBinder: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 46;
-  pub const TakesANullableIBinder: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 47;
-  pub const TakesAnIBinderList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 48;
-  pub const TakesANullableIBinderList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 49;
-  pub const RepeatUtf8CppString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 50;
-  pub const RepeatNullableUtf8CppString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 51;
-  pub const ReverseUtf8CppString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 52;
-  pub const ReverseNullableUtf8CppString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 53;
-  pub const ReverseUtf8CppStringList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 54;
-  pub const GetCallback: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 55;
-  pub const FillOutStructuredParcelable: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 56;
-  pub const RepeatExtendableParcelable: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 57;
-  pub const ReverseList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 58;
-  pub const ReverseIBinderArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 59;
-  pub const ReverseNullableIBinderArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 60;
-  pub const GetOldNameInterface: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 61;
-  pub const GetNewNameInterface: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 62;
-  pub const GetUnionTags: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 63;
-  pub const GetCppJavaTests: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 64;
-  pub const getBackendType: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 65;
+  pub const r#UnimplementedMethod: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+  pub const r#Deprecated: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 1;
+  pub const r#TestOneway: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 2;
+  pub const r#RepeatBoolean: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 3;
+  pub const r#RepeatByte: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 4;
+  pub const r#RepeatChar: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 5;
+  pub const r#RepeatInt: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 6;
+  pub const r#RepeatLong: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 7;
+  pub const r#RepeatFloat: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 8;
+  pub const r#RepeatDouble: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 9;
+  pub const r#RepeatString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 10;
+  pub const r#RepeatByteEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 11;
+  pub const r#RepeatIntEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 12;
+  pub const r#RepeatLongEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 13;
+  pub const r#ReverseBoolean: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 14;
+  pub const r#ReverseByte: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 15;
+  pub const r#ReverseChar: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 16;
+  pub const r#ReverseInt: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 17;
+  pub const r#ReverseLong: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 18;
+  pub const r#ReverseFloat: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 19;
+  pub const r#ReverseDouble: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 20;
+  pub const r#ReverseString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 21;
+  pub const r#ReverseByteEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 22;
+  pub const r#ReverseIntEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 23;
+  pub const r#ReverseLongEnum: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 24;
+  pub const r#GetOtherTestService: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 25;
+  pub const r#SetOtherTestService: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 26;
+  pub const r#VerifyName: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 27;
+  pub const r#GetInterfaceArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 28;
+  pub const r#VerifyNamesWithInterfaceArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 29;
+  pub const r#GetNullableInterfaceArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 30;
+  pub const r#VerifyNamesWithNullableInterfaceArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 31;
+  pub const r#GetInterfaceList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 32;
+  pub const r#VerifyNamesWithInterfaceList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 33;
+  pub const r#ReverseStringList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 34;
+  pub const r#RepeatParcelFileDescriptor: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 35;
+  pub const r#ReverseParcelFileDescriptorArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 36;
+  pub const r#ThrowServiceException: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 37;
+  pub const r#RepeatNullableIntArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 38;
+  pub const r#RepeatNullableByteEnumArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 39;
+  pub const r#RepeatNullableIntEnumArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 40;
+  pub const r#RepeatNullableLongEnumArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 41;
+  pub const r#RepeatNullableString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 42;
+  pub const r#RepeatNullableStringList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 43;
+  pub const r#RepeatNullableParcelable: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 44;
+  pub const r#RepeatNullableParcelableArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 45;
+  pub const r#RepeatNullableParcelableList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 46;
+  pub const r#TakesAnIBinder: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 47;
+  pub const r#TakesANullableIBinder: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 48;
+  pub const r#TakesAnIBinderList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 49;
+  pub const r#TakesANullableIBinderList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 50;
+  pub const r#RepeatUtf8CppString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 51;
+  pub const r#RepeatNullableUtf8CppString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 52;
+  pub const r#ReverseUtf8CppString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 53;
+  pub const r#ReverseNullableUtf8CppString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 54;
+  pub const r#ReverseUtf8CppStringList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 55;
+  pub const r#GetCallback: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 56;
+  pub const r#FillOutStructuredParcelable: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 57;
+  pub const r#RepeatExtendableParcelable: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 58;
+  pub const r#ReverseList: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 59;
+  pub const r#ReverseIBinderArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 60;
+  pub const r#ReverseNullableIBinderArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 61;
+  pub const r#GetOldNameInterface: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 62;
+  pub const r#GetNewNameInterface: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 63;
+  pub const r#GetUnionTags: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 64;
+  pub const r#GetCppJavaTests: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 65;
+  pub const r#getBackendType: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 66;
+  pub const r#GetCircular: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 67;
 }
 pub type ITestServiceDefaultRef = Option<std::sync::Arc<dyn ITestServiceDefault>>;
 use lazy_static::lazy_static;
 lazy_static! {
   static ref DEFAULT_IMPL: std::sync::Mutex<ITestServiceDefaultRef> = std::sync::Mutex::new(None);
 }
-pub const TEST_CONSTANT: i32 = 42;
-pub const TEST_CONSTANT2: i32 = -42;
-pub const TEST_CONSTANT3: i32 = 42;
-pub const TEST_CONSTANT4: i32 = 4;
-pub const TEST_CONSTANT5: i32 = -4;
-pub const TEST_CONSTANT6: i32 = 0;
-pub const TEST_CONSTANT7: i32 = 0;
-pub const TEST_CONSTANT8: i32 = 0;
-pub const TEST_CONSTANT9: i32 = 86;
-pub const TEST_CONSTANT10: i32 = 165;
-pub const TEST_CONSTANT11: i32 = 250;
-pub const TEST_CONSTANT12: i32 = -1;
-pub const BYTE_TEST_CONSTANT: i8 = 17;
-pub const LONG_TEST_CONSTANT: i64 = 1099511627776;
-pub const STRING_TEST_CONSTANT: &str = "foo";
-pub const STRING_TEST_CONSTANT2: &str = "bar";
-pub const STRING_TEST_CONSTANT_UTF8: &str = "baz";
-pub const A1: i32 = 1;
-pub const A2: i32 = 1;
-pub const A3: i32 = 1;
-pub const A4: i32 = 1;
-pub const A5: i32 = 1;
-pub const A6: i32 = 1;
-pub const A7: i32 = 1;
-pub const A8: i32 = 1;
-pub const A9: i32 = 1;
-pub const A10: i32 = 1;
-pub const A11: i32 = 1;
-pub const A12: i32 = 1;
-pub const A13: i32 = 1;
-pub const A14: i32 = 1;
-pub const A15: i32 = 1;
-pub const A16: i32 = 1;
-pub const A17: i32 = 1;
-pub const A18: i32 = 1;
-pub const A19: i32 = 1;
-pub const A20: i32 = 1;
-pub const A21: i32 = 1;
-pub const A22: i32 = 1;
-pub const A23: i32 = 1;
-pub const A24: i32 = 1;
-pub const A25: i32 = 1;
-pub const A26: i32 = 1;
-pub const A27: i32 = 1;
-pub const A28: i32 = 1;
-pub const A29: i32 = 1;
-pub const A30: i32 = 1;
-pub const A31: i32 = 1;
-pub const A32: i32 = 1;
-pub const A33: i32 = 1;
-pub const A34: i32 = 1;
-pub const A35: i32 = 1;
-pub const A36: i32 = 1;
-pub const A37: i32 = 1;
-pub const A38: i32 = 1;
-pub const A39: i32 = 1;
-pub const A40: i32 = 1;
-pub const A41: i32 = 1;
-pub const A42: i32 = 1;
-pub const A43: i32 = 1;
-pub const A44: i32 = 1;
-pub const A45: i32 = 1;
-pub const A46: i32 = 1;
-pub const A47: i32 = 1;
-pub const A48: i32 = 1;
-pub const A49: i32 = 1;
-pub const A50: i32 = 1;
-pub const A51: i32 = 1;
-pub const A52: i32 = 1;
-pub const A53: i32 = 1;
-pub const A54: i32 = 1;
-pub const A55: i32 = 1;
-pub const A56: i32 = 1;
-pub const A57: i32 = 1;
+pub const r#TEST_CONSTANT: i32 = 42;
+pub const r#TEST_CONSTANT2: i32 = -42;
+pub const r#TEST_CONSTANT3: i32 = 42;
+pub const r#TEST_CONSTANT4: i32 = 4;
+pub const r#TEST_CONSTANT5: i32 = -4;
+pub const r#TEST_CONSTANT6: i32 = 0;
+pub const r#TEST_CONSTANT7: i32 = 0;
+pub const r#TEST_CONSTANT8: i32 = 0;
+pub const r#TEST_CONSTANT9: i32 = 86;
+pub const r#TEST_CONSTANT10: i32 = 165;
+pub const r#TEST_CONSTANT11: i32 = 250;
+pub const r#TEST_CONSTANT12: i32 = -1;
+pub const r#BYTE_TEST_CONSTANT: i8 = 17;
+pub const r#LONG_TEST_CONSTANT: i64 = 1099511627776;
+pub const r#STRING_TEST_CONSTANT: &str = "foo";
+pub const r#STRING_TEST_CONSTANT2: &str = "bar";
+pub const r#STRING_TEST_CONSTANT_UTF8: &str = "baz";
+pub const r#A1: i32 = 1;
+pub const r#A2: i32 = 1;
+pub const r#A3: i32 = 1;
+pub const r#A4: i32 = 1;
+pub const r#A5: i32 = 1;
+pub const r#A6: i32 = 1;
+pub const r#A7: i32 = 1;
+pub const r#A8: i32 = 1;
+pub const r#A9: i32 = 1;
+pub const r#A10: i32 = 1;
+pub const r#A11: i32 = 1;
+pub const r#A12: i32 = 1;
+pub const r#A13: i32 = 1;
+pub const r#A14: i32 = 1;
+pub const r#A15: i32 = 1;
+pub const r#A16: i32 = 1;
+pub const r#A17: i32 = 1;
+pub const r#A18: i32 = 1;
+pub const r#A19: i32 = 1;
+pub const r#A20: i32 = 1;
+pub const r#A21: i32 = 1;
+pub const r#A22: i32 = 1;
+pub const r#A23: i32 = 1;
+pub const r#A24: i32 = 1;
+pub const r#A25: i32 = 1;
+pub const r#A26: i32 = 1;
+pub const r#A27: i32 = 1;
+pub const r#A28: i32 = 1;
+pub const r#A29: i32 = 1;
+pub const r#A30: i32 = 1;
+pub const r#A31: i32 = 1;
+pub const r#A32: i32 = 1;
+pub const r#A33: i32 = 1;
+pub const r#A34: i32 = 1;
+pub const r#A35: i32 = 1;
+pub const r#A36: i32 = 1;
+pub const r#A37: i32 = 1;
+pub const r#A38: i32 = 1;
+pub const r#A39: i32 = 1;
+pub const r#A40: i32 = 1;
+pub const r#A41: i32 = 1;
+pub const r#A42: i32 = 1;
+pub const r#A43: i32 = 1;
+pub const r#A44: i32 = 1;
+pub const r#A45: i32 = 1;
+pub const r#A46: i32 = 1;
+pub const r#A47: i32 = 1;
+pub const r#A48: i32 = 1;
+pub const r#A49: i32 = 1;
+pub const r#A50: i32 = 1;
+pub const r#A51: i32 = 1;
+pub const r#A52: i32 = 1;
+pub const r#A53: i32 = 1;
+pub const r#A54: i32 = 1;
+pub const r#A55: i32 = 1;
+pub const r#A56: i32 = 1;
+pub const r#A57: i32 = 1;
 impl BpTestService {
   fn build_parcel_UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<binder::binder_impl::Parcel> {
     let mut aidl_data = self.binder.prepare_transact()?;
@@ -809,7 +829,7 @@
   fn read_response_UnimplementedMethod(&self, _arg_arg: i32, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<i32> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.UnimplementedMethod(_arg_arg);
+        return _aidl_default_impl.r#UnimplementedMethod(_arg_arg);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -826,7 +846,7 @@
   fn read_response_Deprecated(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.Deprecated();
+        return _aidl_default_impl.r#Deprecated();
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -842,7 +862,7 @@
   fn read_response_TestOneway(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.TestOneway();
+        return _aidl_default_impl.r#TestOneway();
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -857,7 +877,7 @@
   fn read_response_RepeatBoolean(&self, _arg_token: bool, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<bool> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatBoolean(_arg_token);
+        return _aidl_default_impl.r#RepeatBoolean(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -875,7 +895,7 @@
   fn read_response_RepeatByte(&self, _arg_token: i8, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<i8> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatByte(_arg_token);
+        return _aidl_default_impl.r#RepeatByte(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -893,7 +913,7 @@
   fn read_response_RepeatChar(&self, _arg_token: u16, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<u16> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatChar(_arg_token);
+        return _aidl_default_impl.r#RepeatChar(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -911,7 +931,7 @@
   fn read_response_RepeatInt(&self, _arg_token: i32, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<i32> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatInt(_arg_token);
+        return _aidl_default_impl.r#RepeatInt(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -929,7 +949,7 @@
   fn read_response_RepeatLong(&self, _arg_token: i64, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<i64> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatLong(_arg_token);
+        return _aidl_default_impl.r#RepeatLong(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -947,7 +967,7 @@
   fn read_response_RepeatFloat(&self, _arg_token: f32, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<f32> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatFloat(_arg_token);
+        return _aidl_default_impl.r#RepeatFloat(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -965,7 +985,7 @@
   fn read_response_RepeatDouble(&self, _arg_token: f64, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<f64> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatDouble(_arg_token);
+        return _aidl_default_impl.r#RepeatDouble(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -983,7 +1003,7 @@
   fn read_response_RepeatString(&self, _arg_token: &str, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<String> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatString(_arg_token);
+        return _aidl_default_impl.r#RepeatString(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1001,7 +1021,7 @@
   fn read_response_RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatByteEnum(_arg_token);
+        return _aidl_default_impl.r#RepeatByteEnum(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1019,7 +1039,7 @@
   fn read_response_RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatIntEnum(_arg_token);
+        return _aidl_default_impl.r#RepeatIntEnum(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1037,7 +1057,7 @@
   fn read_response_RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatLongEnum(_arg_token);
+        return _aidl_default_impl.r#RepeatLongEnum(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1056,7 +1076,7 @@
   fn read_response_ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<bool>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseBoolean(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseBoolean(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1076,7 +1096,7 @@
   fn read_response_ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<u8>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseByte(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseByte(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1096,7 +1116,7 @@
   fn read_response_ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<u16>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseChar(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseChar(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1116,7 +1136,7 @@
   fn read_response_ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<i32>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseInt(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseInt(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1136,7 +1156,7 @@
   fn read_response_ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<i64>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseLong(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseLong(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1156,7 +1176,7 @@
   fn read_response_ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<f32>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseFloat(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseFloat(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1176,7 +1196,7 @@
   fn read_response_ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<f64>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseDouble(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseDouble(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1196,7 +1216,7 @@
   fn read_response_ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<String>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseString(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseString(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1216,7 +1236,7 @@
   fn read_response_ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseByteEnum(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseByteEnum(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1236,7 +1256,7 @@
   fn read_response_ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseIntEnum(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseIntEnum(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1256,7 +1276,7 @@
   fn read_response_ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseLongEnum(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseLongEnum(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1275,7 +1295,7 @@
   fn read_response_GetOtherTestService(&self, _arg_name: &str, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.GetOtherTestService(_arg_name);
+        return _aidl_default_impl.r#GetOtherTestService(_arg_name);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1284,6 +1304,25 @@
     let _aidl_return: binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback> = _aidl_reply.read()?;
     Ok(_aidl_return)
   }
+  fn build_parcel_SetOtherTestService(&self, _arg_name: &str, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>) -> binder::Result<binder::binder_impl::Parcel> {
+    let mut aidl_data = self.binder.prepare_transact()?;
+    aidl_data.mark_sensitive();
+    aidl_data.write(_arg_name)?;
+    aidl_data.write(_arg_service)?;
+    Ok(aidl_data)
+  }
+  fn read_response_SetOtherTestService(&self, _arg_name: &str, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<bool> {
+    if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
+      if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
+        return _aidl_default_impl.r#SetOtherTestService(_arg_name, _arg_service);
+      }
+    }
+    let _aidl_reply = _aidl_reply?;
+    let _aidl_status: binder::Status = _aidl_reply.read()?;
+    if !_aidl_status.is_ok() { return Err(_aidl_status); }
+    let _aidl_return: bool = _aidl_reply.read()?;
+    Ok(_aidl_return)
+  }
   fn build_parcel_VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<binder::binder_impl::Parcel> {
     let mut aidl_data = self.binder.prepare_transact()?;
     aidl_data.mark_sensitive();
@@ -1294,7 +1333,7 @@
   fn read_response_VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<bool> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.VerifyName(_arg_service, _arg_name);
+        return _aidl_default_impl.r#VerifyName(_arg_service, _arg_name);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1312,7 +1351,7 @@
   fn read_response_GetInterfaceArray(&self, _arg_names: &[String], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.GetInterfaceArray(_arg_names);
+        return _aidl_default_impl.r#GetInterfaceArray(_arg_names);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1331,7 +1370,7 @@
   fn read_response_VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<bool> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.VerifyNamesWithInterfaceArray(_arg_services, _arg_names);
+        return _aidl_default_impl.r#VerifyNamesWithInterfaceArray(_arg_services, _arg_names);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1349,7 +1388,7 @@
   fn read_response_GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.GetNullableInterfaceArray(_arg_names);
+        return _aidl_default_impl.r#GetNullableInterfaceArray(_arg_names);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1368,7 +1407,7 @@
   fn read_response_VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<bool> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.VerifyNamesWithNullableInterfaceArray(_arg_services, _arg_names);
+        return _aidl_default_impl.r#VerifyNamesWithNullableInterfaceArray(_arg_services, _arg_names);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1386,7 +1425,7 @@
   fn read_response_GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.GetInterfaceList(_arg_names);
+        return _aidl_default_impl.r#GetInterfaceList(_arg_names);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1405,7 +1444,7 @@
   fn read_response_VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<bool> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.VerifyNamesWithInterfaceList(_arg_services, _arg_names);
+        return _aidl_default_impl.r#VerifyNamesWithInterfaceList(_arg_services, _arg_names);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1423,7 +1462,7 @@
   fn read_response_ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<String>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseStringList(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseStringList(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1442,7 +1481,7 @@
   fn read_response_RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<binder::ParcelFileDescriptor> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatParcelFileDescriptor(_arg_read);
+        return _aidl_default_impl.r#RepeatParcelFileDescriptor(_arg_read);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1461,7 +1500,7 @@
   fn read_response_ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<binder::ParcelFileDescriptor>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseParcelFileDescriptorArray(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseParcelFileDescriptorArray(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1480,7 +1519,7 @@
   fn read_response_ThrowServiceException(&self, _arg_code: i32, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ThrowServiceException(_arg_code);
+        return _aidl_default_impl.r#ThrowServiceException(_arg_code);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1497,7 +1536,7 @@
   fn read_response_RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<i32>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatNullableIntArray(_arg_input);
+        return _aidl_default_impl.r#RepeatNullableIntArray(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1515,7 +1554,7 @@
   fn read_response_RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatNullableByteEnumArray(_arg_input);
+        return _aidl_default_impl.r#RepeatNullableByteEnumArray(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1533,7 +1572,7 @@
   fn read_response_RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatNullableIntEnumArray(_arg_input);
+        return _aidl_default_impl.r#RepeatNullableIntEnumArray(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1551,7 +1590,7 @@
   fn read_response_RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatNullableLongEnumArray(_arg_input);
+        return _aidl_default_impl.r#RepeatNullableLongEnumArray(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1569,7 +1608,7 @@
   fn read_response_RepeatNullableString(&self, _arg_input: Option<&str>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<String>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatNullableString(_arg_input);
+        return _aidl_default_impl.r#RepeatNullableString(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1587,7 +1626,7 @@
   fn read_response_RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<Option<String>>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatNullableStringList(_arg_input);
+        return _aidl_default_impl.r#RepeatNullableStringList(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1605,7 +1644,7 @@
   fn read_response_RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatNullableParcelable(_arg_input);
+        return _aidl_default_impl.r#RepeatNullableParcelable(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1623,7 +1662,7 @@
   fn read_response_RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatNullableParcelableArray(_arg_input);
+        return _aidl_default_impl.r#RepeatNullableParcelableArray(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1641,7 +1680,7 @@
   fn read_response_RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatNullableParcelableList(_arg_input);
+        return _aidl_default_impl.r#RepeatNullableParcelableList(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1659,7 +1698,7 @@
   fn read_response_TakesAnIBinder(&self, _arg_input: &binder::SpIBinder, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.TakesAnIBinder(_arg_input);
+        return _aidl_default_impl.r#TakesAnIBinder(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1676,7 +1715,7 @@
   fn read_response_TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.TakesANullableIBinder(_arg_input);
+        return _aidl_default_impl.r#TakesANullableIBinder(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1693,7 +1732,7 @@
   fn read_response_TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.TakesAnIBinderList(_arg_input);
+        return _aidl_default_impl.r#TakesAnIBinderList(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1710,7 +1749,7 @@
   fn read_response_TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.TakesANullableIBinderList(_arg_input);
+        return _aidl_default_impl.r#TakesANullableIBinderList(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1727,7 +1766,7 @@
   fn read_response_RepeatUtf8CppString(&self, _arg_token: &str, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<String> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatUtf8CppString(_arg_token);
+        return _aidl_default_impl.r#RepeatUtf8CppString(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1745,7 +1784,7 @@
   fn read_response_RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<String>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatNullableUtf8CppString(_arg_token);
+        return _aidl_default_impl.r#RepeatNullableUtf8CppString(_arg_token);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1764,7 +1803,7 @@
   fn read_response_ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<String>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseUtf8CppString(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseUtf8CppString(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1784,7 +1823,7 @@
   fn read_response_ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<Option<String>>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseNullableUtf8CppString(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseNullableUtf8CppString(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1803,7 +1842,7 @@
   fn read_response_ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<Option<String>>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseUtf8CppStringList(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseUtf8CppStringList(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1822,7 +1861,7 @@
   fn read_response_GetCallback(&self, _arg_return_null: bool, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.GetCallback(_arg_return_null);
+        return _aidl_default_impl.r#GetCallback(_arg_return_null);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1840,7 +1879,7 @@
   fn read_response_FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.FillOutStructuredParcelable(_arg_parcel);
+        return _aidl_default_impl.r#FillOutStructuredParcelable(_arg_parcel);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1858,7 +1897,7 @@
   fn read_response_RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.RepeatExtendableParcelable(_arg_ep, _arg_ep2);
+        return _aidl_default_impl.r#RepeatExtendableParcelable(_arg_ep, _arg_ep2);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1876,7 +1915,7 @@
   fn read_response_ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseList(_arg_list);
+        return _aidl_default_impl.r#ReverseList(_arg_list);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1895,7 +1934,7 @@
   fn read_response_ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<binder::SpIBinder>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseIBinderArray(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseIBinderArray(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1915,7 +1954,7 @@
   fn read_response_ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.ReverseNullableIBinderArray(_arg_input, _arg_repeated);
+        return _aidl_default_impl.r#ReverseNullableIBinderArray(_arg_input, _arg_repeated);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1933,7 +1972,7 @@
   fn read_response_GetOldNameInterface(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.GetOldNameInterface();
+        return _aidl_default_impl.r#GetOldNameInterface();
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1950,7 +1989,7 @@
   fn read_response_GetNewNameInterface(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.GetNewNameInterface();
+        return _aidl_default_impl.r#GetNewNameInterface();
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1968,7 +2007,7 @@
   fn read_response_GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.GetUnionTags(_arg_input);
+        return _aidl_default_impl.r#GetUnionTags(_arg_input);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -1985,7 +2024,7 @@
   fn read_response_GetCppJavaTests(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<binder::SpIBinder>> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.GetCppJavaTests();
+        return _aidl_default_impl.r#GetCppJavaTests();
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -2002,7 +2041,7 @@
   fn read_response_getBackendType(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.getBackendType();
+        return _aidl_default_impl.r#getBackendType();
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -2011,1267 +2050,1323 @@
     let _aidl_return: crate::mangled::_7_android_4_aidl_5_tests_11_BackendType = _aidl_reply.read()?;
     Ok(_aidl_return)
   }
+  fn build_parcel_GetCircular(&self, _arg_cp: &mut crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable) -> binder::Result<binder::binder_impl::Parcel> {
+    let mut aidl_data = self.binder.prepare_transact()?;
+    aidl_data.mark_sensitive();
+    Ok(aidl_data)
+  }
+  fn read_response_GetCircular(&self, _arg_cp: &mut crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_9_ICircular>> {
+    if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
+      if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
+        return _aidl_default_impl.r#GetCircular(_arg_cp);
+      }
+    }
+    let _aidl_reply = _aidl_reply?;
+    let _aidl_status: binder::Status = _aidl_reply.read()?;
+    if !_aidl_status.is_ok() { return Err(_aidl_status); }
+    let _aidl_return: binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_9_ICircular> = _aidl_reply.read()?;
+    _aidl_reply.read_onto(_arg_cp)?;
+    Ok(_aidl_return)
+  }
 }
 impl ITestService for BpTestService {
-  fn UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32> {
+  fn r#UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32> {
     let _aidl_data = self.build_parcel_UnimplementedMethod(_arg_arg)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::UnimplementedMethod, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#UnimplementedMethod, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_UnimplementedMethod(_arg_arg, _aidl_reply)
   }
-  fn Deprecated(&self) -> binder::Result<()> {
+  fn r#Deprecated(&self) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_Deprecated()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::Deprecated, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#Deprecated, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_Deprecated(_aidl_reply)
   }
-  fn TestOneway(&self) -> binder::Result<()> {
+  fn r#TestOneway(&self) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_TestOneway()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::TestOneway, _aidl_data, binder::binder_impl::FLAG_ONEWAY | binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#TestOneway, _aidl_data, binder::binder_impl::FLAG_ONEWAY | binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_TestOneway(_aidl_reply)
   }
-  fn RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool> {
+  fn r#RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool> {
     let _aidl_data = self.build_parcel_RepeatBoolean(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatBoolean, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatBoolean, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatBoolean(_arg_token, _aidl_reply)
   }
-  fn RepeatByte(&self, _arg_token: i8) -> binder::Result<i8> {
+  fn r#RepeatByte(&self, _arg_token: i8) -> binder::Result<i8> {
     let _aidl_data = self.build_parcel_RepeatByte(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatByte, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatByte, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatByte(_arg_token, _aidl_reply)
   }
-  fn RepeatChar(&self, _arg_token: u16) -> binder::Result<u16> {
+  fn r#RepeatChar(&self, _arg_token: u16) -> binder::Result<u16> {
     let _aidl_data = self.build_parcel_RepeatChar(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatChar, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatChar, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatChar(_arg_token, _aidl_reply)
   }
-  fn RepeatInt(&self, _arg_token: i32) -> binder::Result<i32> {
+  fn r#RepeatInt(&self, _arg_token: i32) -> binder::Result<i32> {
     let _aidl_data = self.build_parcel_RepeatInt(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatInt, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatInt, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatInt(_arg_token, _aidl_reply)
   }
-  fn RepeatLong(&self, _arg_token: i64) -> binder::Result<i64> {
+  fn r#RepeatLong(&self, _arg_token: i64) -> binder::Result<i64> {
     let _aidl_data = self.build_parcel_RepeatLong(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatLong, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatLong, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatLong(_arg_token, _aidl_reply)
   }
-  fn RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32> {
+  fn r#RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32> {
     let _aidl_data = self.build_parcel_RepeatFloat(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatFloat, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatFloat, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatFloat(_arg_token, _aidl_reply)
   }
-  fn RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64> {
+  fn r#RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64> {
     let _aidl_data = self.build_parcel_RepeatDouble(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatDouble, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatDouble, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatDouble(_arg_token, _aidl_reply)
   }
-  fn RepeatString(&self, _arg_token: &str) -> binder::Result<String> {
+  fn r#RepeatString(&self, _arg_token: &str) -> binder::Result<String> {
     let _aidl_data = self.build_parcel_RepeatString(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatString(_arg_token, _aidl_reply)
   }
-  fn RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> {
+  fn r#RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> {
     let _aidl_data = self.build_parcel_RepeatByteEnum(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatByteEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatByteEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatByteEnum(_arg_token, _aidl_reply)
   }
-  fn RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> {
+  fn r#RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> {
     let _aidl_data = self.build_parcel_RepeatIntEnum(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatIntEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatIntEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatIntEnum(_arg_token, _aidl_reply)
   }
-  fn RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> {
+  fn r#RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> {
     let _aidl_data = self.build_parcel_RepeatLongEnum(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatLongEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatLongEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatLongEnum(_arg_token, _aidl_reply)
   }
-  fn ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>> {
+  fn r#ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>> {
     let _aidl_data = self.build_parcel_ReverseBoolean(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseBoolean, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseBoolean, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseBoolean(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>> {
+  fn r#ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>> {
     let _aidl_data = self.build_parcel_ReverseByte(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseByte, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseByte, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseByte(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>> {
+  fn r#ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>> {
     let _aidl_data = self.build_parcel_ReverseChar(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseChar, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseChar, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseChar(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>> {
+  fn r#ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>> {
     let _aidl_data = self.build_parcel_ReverseInt(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseInt, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseInt, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseInt(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>> {
+  fn r#ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>> {
     let _aidl_data = self.build_parcel_ReverseLong(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseLong, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseLong, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseLong(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>> {
+  fn r#ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>> {
     let _aidl_data = self.build_parcel_ReverseFloat(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseFloat, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseFloat, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseFloat(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>> {
+  fn r#ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>> {
     let _aidl_data = self.build_parcel_ReverseDouble(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseDouble, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseDouble, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseDouble(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
+  fn r#ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
     let _aidl_data = self.build_parcel_ReverseString(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseString(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> {
+  fn r#ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> {
     let _aidl_data = self.build_parcel_ReverseByteEnum(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseByteEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseByteEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseByteEnum(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> {
+  fn r#ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> {
     let _aidl_data = self.build_parcel_ReverseIntEnum(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseIntEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseIntEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseIntEnum(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> {
+  fn r#ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> {
     let _aidl_data = self.build_parcel_ReverseLongEnum(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseLongEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseLongEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseLongEnum(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>> {
+  fn r#GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>> {
     let _aidl_data = self.build_parcel_GetOtherTestService(_arg_name)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetOtherTestService, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetOtherTestService, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetOtherTestService(_arg_name, _aidl_reply)
   }
-  fn VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool> {
+  fn r#SetOtherTestService(&self, _arg_name: &str, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>) -> binder::Result<bool> {
+    let _aidl_data = self.build_parcel_SetOtherTestService(_arg_name, _arg_service)?;
+    let _aidl_reply = self.binder.submit_transact(transactions::r#SetOtherTestService, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    self.read_response_SetOtherTestService(_arg_name, _arg_service, _aidl_reply)
+  }
+  fn r#VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool> {
     let _aidl_data = self.build_parcel_VerifyName(_arg_service, _arg_name)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::VerifyName, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#VerifyName, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_VerifyName(_arg_service, _arg_name, _aidl_reply)
   }
-  fn GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
+  fn r#GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
     let _aidl_data = self.build_parcel_GetInterfaceArray(_arg_names)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetInterfaceArray(_arg_names, _aidl_reply)
   }
-  fn VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool> {
+  fn r#VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool> {
     let _aidl_data = self.build_parcel_VerifyNamesWithInterfaceArray(_arg_services, _arg_names)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::VerifyNamesWithInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#VerifyNamesWithInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_VerifyNamesWithInterfaceArray(_arg_services, _arg_names, _aidl_reply)
   }
-  fn GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
+  fn r#GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
     let _aidl_data = self.build_parcel_GetNullableInterfaceArray(_arg_names)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetNullableInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetNullableInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetNullableInterfaceArray(_arg_names, _aidl_reply)
   }
-  fn VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
+  fn r#VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
     let _aidl_data = self.build_parcel_VerifyNamesWithNullableInterfaceArray(_arg_services, _arg_names)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::VerifyNamesWithNullableInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#VerifyNamesWithNullableInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_VerifyNamesWithNullableInterfaceArray(_arg_services, _arg_names, _aidl_reply)
   }
-  fn GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
+  fn r#GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> {
     let _aidl_data = self.build_parcel_GetInterfaceList(_arg_names)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetInterfaceList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetInterfaceList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetInterfaceList(_arg_names, _aidl_reply)
   }
-  fn VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
+  fn r#VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> {
     let _aidl_data = self.build_parcel_VerifyNamesWithInterfaceList(_arg_services, _arg_names)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::VerifyNamesWithInterfaceList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#VerifyNamesWithInterfaceList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_VerifyNamesWithInterfaceList(_arg_services, _arg_names, _aidl_reply)
   }
-  fn ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
+  fn r#ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
     let _aidl_data = self.build_parcel_ReverseStringList(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseStringList(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor> {
+  fn r#RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor> {
     let _aidl_data = self.build_parcel_RepeatParcelFileDescriptor(_arg_read)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatParcelFileDescriptor, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatParcelFileDescriptor, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatParcelFileDescriptor(_arg_read, _aidl_reply)
   }
-  fn ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>> {
+  fn r#ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>> {
     let _aidl_data = self.build_parcel_ReverseParcelFileDescriptorArray(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseParcelFileDescriptorArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseParcelFileDescriptorArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseParcelFileDescriptorArray(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()> {
+  fn r#ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_ThrowServiceException(_arg_code)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ThrowServiceException, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ThrowServiceException, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ThrowServiceException(_arg_code, _aidl_reply)
   }
-  fn RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>> {
+  fn r#RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>> {
     let _aidl_data = self.build_parcel_RepeatNullableIntArray(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatNullableIntArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatNullableIntArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatNullableIntArray(_arg_input, _aidl_reply)
   }
-  fn RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> {
+  fn r#RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> {
     let _aidl_data = self.build_parcel_RepeatNullableByteEnumArray(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatNullableByteEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatNullableByteEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatNullableByteEnumArray(_arg_input, _aidl_reply)
   }
-  fn RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> {
+  fn r#RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> {
     let _aidl_data = self.build_parcel_RepeatNullableIntEnumArray(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatNullableIntEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatNullableIntEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatNullableIntEnumArray(_arg_input, _aidl_reply)
   }
-  fn RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> {
+  fn r#RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> {
     let _aidl_data = self.build_parcel_RepeatNullableLongEnumArray(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatNullableLongEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatNullableLongEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatNullableLongEnumArray(_arg_input, _aidl_reply)
   }
-  fn RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>> {
+  fn r#RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>> {
     let _aidl_data = self.build_parcel_RepeatNullableString(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatNullableString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatNullableString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatNullableString(_arg_input, _aidl_reply)
   }
-  fn RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>> {
+  fn r#RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>> {
     let _aidl_data = self.build_parcel_RepeatNullableStringList(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatNullableStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatNullableStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatNullableStringList(_arg_input, _aidl_reply)
   }
-  fn RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>> {
+  fn r#RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>> {
     let _aidl_data = self.build_parcel_RepeatNullableParcelable(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatNullableParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatNullableParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatNullableParcelable(_arg_input, _aidl_reply)
   }
-  fn RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
+  fn r#RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
     let _aidl_data = self.build_parcel_RepeatNullableParcelableArray(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatNullableParcelableArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatNullableParcelableArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatNullableParcelableArray(_arg_input, _aidl_reply)
   }
-  fn RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
+  fn r#RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> {
     let _aidl_data = self.build_parcel_RepeatNullableParcelableList(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatNullableParcelableList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatNullableParcelableList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatNullableParcelableList(_arg_input, _aidl_reply)
   }
-  fn TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()> {
+  fn r#TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_TakesAnIBinder(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::TakesAnIBinder, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#TakesAnIBinder, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_TakesAnIBinder(_arg_input, _aidl_reply)
   }
-  fn TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()> {
+  fn r#TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_TakesANullableIBinder(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::TakesANullableIBinder, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#TakesANullableIBinder, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_TakesANullableIBinder(_arg_input, _aidl_reply)
   }
-  fn TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()> {
+  fn r#TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_TakesAnIBinderList(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::TakesAnIBinderList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#TakesAnIBinderList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_TakesAnIBinderList(_arg_input, _aidl_reply)
   }
-  fn TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()> {
+  fn r#TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_TakesANullableIBinderList(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::TakesANullableIBinderList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#TakesANullableIBinderList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_TakesANullableIBinderList(_arg_input, _aidl_reply)
   }
-  fn RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String> {
+  fn r#RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String> {
     let _aidl_data = self.build_parcel_RepeatUtf8CppString(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatUtf8CppString(_arg_token, _aidl_reply)
   }
-  fn RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>> {
+  fn r#RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>> {
     let _aidl_data = self.build_parcel_RepeatNullableUtf8CppString(_arg_token)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatNullableUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatNullableUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatNullableUtf8CppString(_arg_token, _aidl_reply)
   }
-  fn ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
+  fn r#ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> {
     let _aidl_data = self.build_parcel_ReverseUtf8CppString(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseUtf8CppString(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
+  fn r#ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
     let _aidl_data = self.build_parcel_ReverseNullableUtf8CppString(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseNullableUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseNullableUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseNullableUtf8CppString(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
+  fn r#ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> {
     let _aidl_data = self.build_parcel_ReverseUtf8CppStringList(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseUtf8CppStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseUtf8CppStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseUtf8CppStringList(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
+  fn r#GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
     let _aidl_data = self.build_parcel_GetCallback(_arg_return_null)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetCallback, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetCallback, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetCallback(_arg_return_null, _aidl_reply)
   }
-  fn FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()> {
+  fn r#FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_FillOutStructuredParcelable(_arg_parcel)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::FillOutStructuredParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#FillOutStructuredParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_FillOutStructuredParcelable(_arg_parcel, _aidl_reply)
   }
-  fn RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()> {
+  fn r#RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_RepeatExtendableParcelable(_arg_ep, _arg_ep2)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::RepeatExtendableParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#RepeatExtendableParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_RepeatExtendableParcelable(_arg_ep, _arg_ep2, _aidl_reply)
   }
-  fn ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList> {
+  fn r#ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList> {
     let _aidl_data = self.build_parcel_ReverseList(_arg_list)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseList(_arg_list, _aidl_reply)
   }
-  fn ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>> {
+  fn r#ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>> {
     let _aidl_data = self.build_parcel_ReverseIBinderArray(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseIBinderArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseIBinderArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseIBinderArray(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>> {
+  fn r#ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>> {
     let _aidl_data = self.build_parcel_ReverseNullableIBinderArray(_arg_input, _arg_repeated)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ReverseNullableIBinderArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ReverseNullableIBinderArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ReverseNullableIBinderArray(_arg_input, _arg_repeated, _aidl_reply)
   }
-  fn GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>> {
+  fn r#GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>> {
     let _aidl_data = self.build_parcel_GetOldNameInterface()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetOldNameInterface, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetOldNameInterface, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetOldNameInterface(_aidl_reply)
   }
-  fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> {
+  fn r#GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> {
     let _aidl_data = self.build_parcel_GetNewNameInterface()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetNewNameInterface, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetNewNameInterface, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetNewNameInterface(_aidl_reply)
   }
-  fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
+  fn r#GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
     let _aidl_data = self.build_parcel_GetUnionTags(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetUnionTags, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetUnionTags, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetUnionTags(_arg_input, _aidl_reply)
   }
-  fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> {
+  fn r#GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> {
     let _aidl_data = self.build_parcel_GetCppJavaTests()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetCppJavaTests, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetCppJavaTests, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetCppJavaTests(_aidl_reply)
   }
-  fn getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType> {
+  fn r#getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType> {
     let _aidl_data = self.build_parcel_getBackendType()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::getBackendType, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#getBackendType, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_getBackendType(_aidl_reply)
   }
+  fn r#GetCircular(&self, _arg_cp: &mut crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_9_ICircular>> {
+    let _aidl_data = self.build_parcel_GetCircular(_arg_cp)?;
+    let _aidl_reply = self.binder.submit_transact(transactions::r#GetCircular, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    self.read_response_GetCircular(_arg_cp, _aidl_reply)
+  }
 }
 impl<P: binder::BinderAsyncPool> ITestServiceAsync<P> for BpTestService {
-  fn UnimplementedMethod<'a>(&'a self, _arg_arg: i32) -> binder::BoxFuture<'a, binder::Result<i32>> {
+  fn r#UnimplementedMethod<'a>(&'a self, _arg_arg: i32) -> binder::BoxFuture<'a, binder::Result<i32>> {
     let _aidl_data = match self.build_parcel_UnimplementedMethod(_arg_arg) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::UnimplementedMethod, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#UnimplementedMethod, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_UnimplementedMethod(_arg_arg, _aidl_reply)
       }
     )
   }
-  fn Deprecated<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<()>> {
+  fn r#Deprecated<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<()>> {
     let _aidl_data = match self.build_parcel_Deprecated() {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::Deprecated, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#Deprecated, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_Deprecated(_aidl_reply)
       }
     )
   }
-  fn TestOneway(&self) -> std::future::Ready<binder::Result<()>> {
+  fn r#TestOneway(&self) -> std::future::Ready<binder::Result<()>> {
     let _aidl_data = match self.build_parcel_TestOneway() {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return std::future::ready(Err(err)),
     };
-    let _aidl_reply = self.binder.submit_transact(transactions::TestOneway, _aidl_data, binder::binder_impl::FLAG_ONEWAY | binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#TestOneway, _aidl_data, binder::binder_impl::FLAG_ONEWAY | binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     std::future::ready(self.read_response_TestOneway(_aidl_reply))
   }
-  fn RepeatBoolean<'a>(&'a self, _arg_token: bool) -> binder::BoxFuture<'a, binder::Result<bool>> {
+  fn r#RepeatBoolean<'a>(&'a self, _arg_token: bool) -> binder::BoxFuture<'a, binder::Result<bool>> {
     let _aidl_data = match self.build_parcel_RepeatBoolean(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatBoolean, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatBoolean, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatBoolean(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatByte<'a>(&'a self, _arg_token: i8) -> binder::BoxFuture<'a, binder::Result<i8>> {
+  fn r#RepeatByte<'a>(&'a self, _arg_token: i8) -> binder::BoxFuture<'a, binder::Result<i8>> {
     let _aidl_data = match self.build_parcel_RepeatByte(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatByte, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatByte, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatByte(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatChar<'a>(&'a self, _arg_token: u16) -> binder::BoxFuture<'a, binder::Result<u16>> {
+  fn r#RepeatChar<'a>(&'a self, _arg_token: u16) -> binder::BoxFuture<'a, binder::Result<u16>> {
     let _aidl_data = match self.build_parcel_RepeatChar(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatChar, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatChar, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatChar(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatInt<'a>(&'a self, _arg_token: i32) -> binder::BoxFuture<'a, binder::Result<i32>> {
+  fn r#RepeatInt<'a>(&'a self, _arg_token: i32) -> binder::BoxFuture<'a, binder::Result<i32>> {
     let _aidl_data = match self.build_parcel_RepeatInt(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatInt, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatInt, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatInt(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatLong<'a>(&'a self, _arg_token: i64) -> binder::BoxFuture<'a, binder::Result<i64>> {
+  fn r#RepeatLong<'a>(&'a self, _arg_token: i64) -> binder::BoxFuture<'a, binder::Result<i64>> {
     let _aidl_data = match self.build_parcel_RepeatLong(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatLong, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatLong, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatLong(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatFloat<'a>(&'a self, _arg_token: f32) -> binder::BoxFuture<'a, binder::Result<f32>> {
+  fn r#RepeatFloat<'a>(&'a self, _arg_token: f32) -> binder::BoxFuture<'a, binder::Result<f32>> {
     let _aidl_data = match self.build_parcel_RepeatFloat(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatFloat, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatFloat, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatFloat(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatDouble<'a>(&'a self, _arg_token: f64) -> binder::BoxFuture<'a, binder::Result<f64>> {
+  fn r#RepeatDouble<'a>(&'a self, _arg_token: f64) -> binder::BoxFuture<'a, binder::Result<f64>> {
     let _aidl_data = match self.build_parcel_RepeatDouble(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatDouble, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatDouble, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatDouble(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatString<'a>(&'a self, _arg_token: &'a str) -> binder::BoxFuture<'a, binder::Result<String>> {
+  fn r#RepeatString<'a>(&'a self, _arg_token: &'a str) -> binder::BoxFuture<'a, binder::Result<String>> {
     let _aidl_data = match self.build_parcel_RepeatString(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatString(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatByteEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> {
+  fn r#RepeatByteEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> {
     let _aidl_data = match self.build_parcel_RepeatByteEnum(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatByteEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatByteEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatByteEnum(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatIntEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> {
+  fn r#RepeatIntEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> {
     let _aidl_data = match self.build_parcel_RepeatIntEnum(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatIntEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatIntEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatIntEnum(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatLongEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> {
+  fn r#RepeatLongEnum<'a>(&'a self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> {
     let _aidl_data = match self.build_parcel_RepeatLongEnum(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatLongEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatLongEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatLongEnum(_arg_token, _aidl_reply)
       }
     )
   }
-  fn ReverseBoolean<'a>(&'a self, _arg_input: &'a [bool], _arg_repeated: &'a mut Vec<bool>) -> binder::BoxFuture<'a, binder::Result<Vec<bool>>> {
+  fn r#ReverseBoolean<'a>(&'a self, _arg_input: &'a [bool], _arg_repeated: &'a mut Vec<bool>) -> binder::BoxFuture<'a, binder::Result<Vec<bool>>> {
     let _aidl_data = match self.build_parcel_ReverseBoolean(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseBoolean, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseBoolean, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseBoolean(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseByte<'a>(&'a self, _arg_input: &'a [u8], _arg_repeated: &'a mut Vec<u8>) -> binder::BoxFuture<'a, binder::Result<Vec<u8>>> {
+  fn r#ReverseByte<'a>(&'a self, _arg_input: &'a [u8], _arg_repeated: &'a mut Vec<u8>) -> binder::BoxFuture<'a, binder::Result<Vec<u8>>> {
     let _aidl_data = match self.build_parcel_ReverseByte(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseByte, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseByte, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseByte(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseChar<'a>(&'a self, _arg_input: &'a [u16], _arg_repeated: &'a mut Vec<u16>) -> binder::BoxFuture<'a, binder::Result<Vec<u16>>> {
+  fn r#ReverseChar<'a>(&'a self, _arg_input: &'a [u16], _arg_repeated: &'a mut Vec<u16>) -> binder::BoxFuture<'a, binder::Result<Vec<u16>>> {
     let _aidl_data = match self.build_parcel_ReverseChar(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseChar, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseChar, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseChar(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseInt<'a>(&'a self, _arg_input: &'a [i32], _arg_repeated: &'a mut Vec<i32>) -> binder::BoxFuture<'a, binder::Result<Vec<i32>>> {
+  fn r#ReverseInt<'a>(&'a self, _arg_input: &'a [i32], _arg_repeated: &'a mut Vec<i32>) -> binder::BoxFuture<'a, binder::Result<Vec<i32>>> {
     let _aidl_data = match self.build_parcel_ReverseInt(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseInt, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseInt, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseInt(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseLong<'a>(&'a self, _arg_input: &'a [i64], _arg_repeated: &'a mut Vec<i64>) -> binder::BoxFuture<'a, binder::Result<Vec<i64>>> {
+  fn r#ReverseLong<'a>(&'a self, _arg_input: &'a [i64], _arg_repeated: &'a mut Vec<i64>) -> binder::BoxFuture<'a, binder::Result<Vec<i64>>> {
     let _aidl_data = match self.build_parcel_ReverseLong(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseLong, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseLong, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseLong(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseFloat<'a>(&'a self, _arg_input: &'a [f32], _arg_repeated: &'a mut Vec<f32>) -> binder::BoxFuture<'a, binder::Result<Vec<f32>>> {
+  fn r#ReverseFloat<'a>(&'a self, _arg_input: &'a [f32], _arg_repeated: &'a mut Vec<f32>) -> binder::BoxFuture<'a, binder::Result<Vec<f32>>> {
     let _aidl_data = match self.build_parcel_ReverseFloat(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseFloat, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseFloat, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseFloat(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseDouble<'a>(&'a self, _arg_input: &'a [f64], _arg_repeated: &'a mut Vec<f64>) -> binder::BoxFuture<'a, binder::Result<Vec<f64>>> {
+  fn r#ReverseDouble<'a>(&'a self, _arg_input: &'a [f64], _arg_repeated: &'a mut Vec<f64>) -> binder::BoxFuture<'a, binder::Result<Vec<f64>>> {
     let _aidl_data = match self.build_parcel_ReverseDouble(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseDouble, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseDouble, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseDouble(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseString<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>> {
+  fn r#ReverseString<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>> {
     let _aidl_data = match self.build_parcel_ReverseString(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseString(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseByteEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> {
+  fn r#ReverseByteEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> {
     let _aidl_data = match self.build_parcel_ReverseByteEnum(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseByteEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseByteEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseByteEnum(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseIntEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> {
+  fn r#ReverseIntEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> {
     let _aidl_data = match self.build_parcel_ReverseIntEnum(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseIntEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseIntEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseIntEnum(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseLongEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> {
+  fn r#ReverseLongEnum<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &'a mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> {
     let _aidl_data = match self.build_parcel_ReverseLongEnum(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseLongEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseLongEnum, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseLongEnum(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn GetOtherTestService<'a>(&'a self, _arg_name: &'a str) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
+  fn r#GetOtherTestService<'a>(&'a self, _arg_name: &'a str) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> {
     let _aidl_data = match self.build_parcel_GetOtherTestService(_arg_name) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::GetOtherTestService, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#GetOtherTestService, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_GetOtherTestService(_arg_name, _aidl_reply)
       }
     )
   }
-  fn VerifyName<'a>(&'a self, _arg_service: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &'a str) -> binder::BoxFuture<'a, binder::Result<bool>> {
+  fn r#SetOtherTestService<'a>(&'a self, _arg_name: &'a str, _arg_service: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>) -> binder::BoxFuture<'a, binder::Result<bool>> {
+    let _aidl_data = match self.build_parcel_SetOtherTestService(_arg_name, _arg_service) {
+      Ok(_aidl_data) => _aidl_data,
+      Err(err) => return Box::pin(std::future::ready(Err(err))),
+    };
+    let binder = self.binder.clone();
+    P::spawn(
+      move || binder.submit_transact(transactions::r#SetOtherTestService, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move |_aidl_reply| async move {
+        self.read_response_SetOtherTestService(_arg_name, _arg_service, _aidl_reply)
+      }
+    )
+  }
+  fn r#VerifyName<'a>(&'a self, _arg_service: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &'a str) -> binder::BoxFuture<'a, binder::Result<bool>> {
     let _aidl_data = match self.build_parcel_VerifyName(_arg_service, _arg_name) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::VerifyName, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#VerifyName, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_VerifyName(_arg_service, _arg_name, _aidl_reply)
       }
     )
   }
-  fn GetInterfaceArray<'a>(&'a self, _arg_names: &'a [String]) -> binder::BoxFuture<'a, binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>> {
+  fn r#GetInterfaceArray<'a>(&'a self, _arg_names: &'a [String]) -> binder::BoxFuture<'a, binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>> {
     let _aidl_data = match self.build_parcel_GetInterfaceArray(_arg_names) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::GetInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#GetInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_GetInterfaceArray(_arg_names, _aidl_reply)
       }
     )
   }
-  fn VerifyNamesWithInterfaceArray<'a>(&'a self, _arg_services: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &'a [String]) -> binder::BoxFuture<'a, binder::Result<bool>> {
+  fn r#VerifyNamesWithInterfaceArray<'a>(&'a self, _arg_services: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &'a [String]) -> binder::BoxFuture<'a, binder::Result<bool>> {
     let _aidl_data = match self.build_parcel_VerifyNamesWithInterfaceArray(_arg_services, _arg_names) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::VerifyNamesWithInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#VerifyNamesWithInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_VerifyNamesWithInterfaceArray(_arg_services, _arg_names, _aidl_reply)
       }
     )
   }
-  fn GetNullableInterfaceArray<'a>(&'a self, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>> {
+  fn r#GetNullableInterfaceArray<'a>(&'a self, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>> {
     let _aidl_data = match self.build_parcel_GetNullableInterfaceArray(_arg_names) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::GetNullableInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#GetNullableInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_GetNullableInterfaceArray(_arg_names, _aidl_reply)
       }
     )
   }
-  fn VerifyNamesWithNullableInterfaceArray<'a>(&'a self, _arg_services: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<bool>> {
+  fn r#VerifyNamesWithNullableInterfaceArray<'a>(&'a self, _arg_services: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<bool>> {
     let _aidl_data = match self.build_parcel_VerifyNamesWithNullableInterfaceArray(_arg_services, _arg_names) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::VerifyNamesWithNullableInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#VerifyNamesWithNullableInterfaceArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_VerifyNamesWithNullableInterfaceArray(_arg_services, _arg_names, _aidl_reply)
       }
     )
   }
-  fn GetInterfaceList<'a>(&'a self, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>> {
+  fn r#GetInterfaceList<'a>(&'a self, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>>> {
     let _aidl_data = match self.build_parcel_GetInterfaceList(_arg_names) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::GetInterfaceList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#GetInterfaceList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_GetInterfaceList(_arg_names, _aidl_reply)
       }
     )
   }
-  fn VerifyNamesWithInterfaceList<'a>(&'a self, _arg_services: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<bool>> {
+  fn r#VerifyNamesWithInterfaceList<'a>(&'a self, _arg_services: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<bool>> {
     let _aidl_data = match self.build_parcel_VerifyNamesWithInterfaceList(_arg_services, _arg_names) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::VerifyNamesWithInterfaceList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#VerifyNamesWithInterfaceList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_VerifyNamesWithInterfaceList(_arg_services, _arg_names, _aidl_reply)
       }
     )
   }
-  fn ReverseStringList<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>> {
+  fn r#ReverseStringList<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>> {
     let _aidl_data = match self.build_parcel_ReverseStringList(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseStringList(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn RepeatParcelFileDescriptor<'a>(&'a self, _arg_read: &'a binder::ParcelFileDescriptor) -> binder::BoxFuture<'a, binder::Result<binder::ParcelFileDescriptor>> {
+  fn r#RepeatParcelFileDescriptor<'a>(&'a self, _arg_read: &'a binder::ParcelFileDescriptor) -> binder::BoxFuture<'a, binder::Result<binder::ParcelFileDescriptor>> {
     let _aidl_data = match self.build_parcel_RepeatParcelFileDescriptor(_arg_read) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatParcelFileDescriptor, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatParcelFileDescriptor, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatParcelFileDescriptor(_arg_read, _aidl_reply)
       }
     )
   }
-  fn ReverseParcelFileDescriptorArray<'a>(&'a self, _arg_input: &'a [binder::ParcelFileDescriptor], _arg_repeated: &'a mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::BoxFuture<'a, binder::Result<Vec<binder::ParcelFileDescriptor>>> {
+  fn r#ReverseParcelFileDescriptorArray<'a>(&'a self, _arg_input: &'a [binder::ParcelFileDescriptor], _arg_repeated: &'a mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::BoxFuture<'a, binder::Result<Vec<binder::ParcelFileDescriptor>>> {
     let _aidl_data = match self.build_parcel_ReverseParcelFileDescriptorArray(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseParcelFileDescriptorArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseParcelFileDescriptorArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseParcelFileDescriptorArray(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ThrowServiceException<'a>(&'a self, _arg_code: i32) -> binder::BoxFuture<'a, binder::Result<()>> {
+  fn r#ThrowServiceException<'a>(&'a self, _arg_code: i32) -> binder::BoxFuture<'a, binder::Result<()>> {
     let _aidl_data = match self.build_parcel_ThrowServiceException(_arg_code) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ThrowServiceException, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ThrowServiceException, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ThrowServiceException(_arg_code, _aidl_reply)
       }
     )
   }
-  fn RepeatNullableIntArray<'a>(&'a self, _arg_input: Option<&'a [i32]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<i32>>>> {
+  fn r#RepeatNullableIntArray<'a>(&'a self, _arg_input: Option<&'a [i32]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<i32>>>> {
     let _aidl_data = match self.build_parcel_RepeatNullableIntArray(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatNullableIntArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatNullableIntArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatNullableIntArray(_arg_input, _aidl_reply)
       }
     )
   }
-  fn RepeatNullableByteEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>>> {
+  fn r#RepeatNullableByteEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>>> {
     let _aidl_data = match self.build_parcel_RepeatNullableByteEnumArray(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatNullableByteEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatNullableByteEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatNullableByteEnumArray(_arg_input, _aidl_reply)
       }
     )
   }
-  fn RepeatNullableIntEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>>> {
+  fn r#RepeatNullableIntEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>>> {
     let _aidl_data = match self.build_parcel_RepeatNullableIntEnumArray(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatNullableIntEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatNullableIntEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatNullableIntEnumArray(_arg_input, _aidl_reply)
       }
     )
   }
-  fn RepeatNullableLongEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>>> {
+  fn r#RepeatNullableLongEnumArray<'a>(&'a self, _arg_input: Option<&'a [crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>>> {
     let _aidl_data = match self.build_parcel_RepeatNullableLongEnumArray(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatNullableLongEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatNullableLongEnumArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatNullableLongEnumArray(_arg_input, _aidl_reply)
       }
     )
   }
-  fn RepeatNullableString<'a>(&'a self, _arg_input: Option<&'a str>) -> binder::BoxFuture<'a, binder::Result<Option<String>>> {
+  fn r#RepeatNullableString<'a>(&'a self, _arg_input: Option<&'a str>) -> binder::BoxFuture<'a, binder::Result<Option<String>>> {
     let _aidl_data = match self.build_parcel_RepeatNullableString(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatNullableString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatNullableString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatNullableString(_arg_input, _aidl_reply)
       }
     )
   }
-  fn RepeatNullableStringList<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>> {
+  fn r#RepeatNullableStringList<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>> {
     let _aidl_data = match self.build_parcel_RepeatNullableStringList(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatNullableStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatNullableStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatNullableStringList(_arg_input, _aidl_reply)
       }
     )
   }
-  fn RepeatNullableParcelable<'a>(&'a self, _arg_input: Option<&'a crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::BoxFuture<'a, binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>> {
+  fn r#RepeatNullableParcelable<'a>(&'a self, _arg_input: Option<&'a crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::BoxFuture<'a, binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>> {
     let _aidl_data = match self.build_parcel_RepeatNullableParcelable(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatNullableParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatNullableParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatNullableParcelable(_arg_input, _aidl_reply)
       }
     )
   }
-  fn RepeatNullableParcelableArray<'a>(&'a self, _arg_input: Option<&'a [Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>> {
+  fn r#RepeatNullableParcelableArray<'a>(&'a self, _arg_input: Option<&'a [Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>> {
     let _aidl_data = match self.build_parcel_RepeatNullableParcelableArray(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatNullableParcelableArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatNullableParcelableArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatNullableParcelableArray(_arg_input, _aidl_reply)
       }
     )
   }
-  fn RepeatNullableParcelableList<'a>(&'a self, _arg_input: Option<&'a [Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>> {
+  fn r#RepeatNullableParcelableList<'a>(&'a self, _arg_input: Option<&'a [Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>>> {
     let _aidl_data = match self.build_parcel_RepeatNullableParcelableList(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatNullableParcelableList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatNullableParcelableList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatNullableParcelableList(_arg_input, _aidl_reply)
       }
     )
   }
-  fn TakesAnIBinder<'a>(&'a self, _arg_input: &'a binder::SpIBinder) -> binder::BoxFuture<'a, binder::Result<()>> {
+  fn r#TakesAnIBinder<'a>(&'a self, _arg_input: &'a binder::SpIBinder) -> binder::BoxFuture<'a, binder::Result<()>> {
     let _aidl_data = match self.build_parcel_TakesAnIBinder(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::TakesAnIBinder, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#TakesAnIBinder, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_TakesAnIBinder(_arg_input, _aidl_reply)
       }
     )
   }
-  fn TakesANullableIBinder<'a>(&'a self, _arg_input: Option<&'a binder::SpIBinder>) -> binder::BoxFuture<'a, binder::Result<()>> {
+  fn r#TakesANullableIBinder<'a>(&'a self, _arg_input: Option<&'a binder::SpIBinder>) -> binder::BoxFuture<'a, binder::Result<()>> {
     let _aidl_data = match self.build_parcel_TakesANullableIBinder(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::TakesANullableIBinder, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#TakesANullableIBinder, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_TakesANullableIBinder(_arg_input, _aidl_reply)
       }
     )
   }
-  fn TakesAnIBinderList<'a>(&'a self, _arg_input: &'a [binder::SpIBinder]) -> binder::BoxFuture<'a, binder::Result<()>> {
+  fn r#TakesAnIBinderList<'a>(&'a self, _arg_input: &'a [binder::SpIBinder]) -> binder::BoxFuture<'a, binder::Result<()>> {
     let _aidl_data = match self.build_parcel_TakesAnIBinderList(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::TakesAnIBinderList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#TakesAnIBinderList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_TakesAnIBinderList(_arg_input, _aidl_reply)
       }
     )
   }
-  fn TakesANullableIBinderList<'a>(&'a self, _arg_input: Option<&'a [Option<binder::SpIBinder>]>) -> binder::BoxFuture<'a, binder::Result<()>> {
+  fn r#TakesANullableIBinderList<'a>(&'a self, _arg_input: Option<&'a [Option<binder::SpIBinder>]>) -> binder::BoxFuture<'a, binder::Result<()>> {
     let _aidl_data = match self.build_parcel_TakesANullableIBinderList(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::TakesANullableIBinderList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#TakesANullableIBinderList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_TakesANullableIBinderList(_arg_input, _aidl_reply)
       }
     )
   }
-  fn RepeatUtf8CppString<'a>(&'a self, _arg_token: &'a str) -> binder::BoxFuture<'a, binder::Result<String>> {
+  fn r#RepeatUtf8CppString<'a>(&'a self, _arg_token: &'a str) -> binder::BoxFuture<'a, binder::Result<String>> {
     let _aidl_data = match self.build_parcel_RepeatUtf8CppString(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatUtf8CppString(_arg_token, _aidl_reply)
       }
     )
   }
-  fn RepeatNullableUtf8CppString<'a>(&'a self, _arg_token: Option<&'a str>) -> binder::BoxFuture<'a, binder::Result<Option<String>>> {
+  fn r#RepeatNullableUtf8CppString<'a>(&'a self, _arg_token: Option<&'a str>) -> binder::BoxFuture<'a, binder::Result<Option<String>>> {
     let _aidl_data = match self.build_parcel_RepeatNullableUtf8CppString(_arg_token) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatNullableUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatNullableUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatNullableUtf8CppString(_arg_token, _aidl_reply)
       }
     )
   }
-  fn ReverseUtf8CppString<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>> {
+  fn r#ReverseUtf8CppString<'a>(&'a self, _arg_input: &'a [String], _arg_repeated: &'a mut Vec<String>) -> binder::BoxFuture<'a, binder::Result<Vec<String>>> {
     let _aidl_data = match self.build_parcel_ReverseUtf8CppString(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseUtf8CppString(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseNullableUtf8CppString<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>, _arg_repeated: &'a mut Option<Vec<Option<String>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>> {
+  fn r#ReverseNullableUtf8CppString<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>, _arg_repeated: &'a mut Option<Vec<Option<String>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>> {
     let _aidl_data = match self.build_parcel_ReverseNullableUtf8CppString(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseNullableUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseNullableUtf8CppString, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseNullableUtf8CppString(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseUtf8CppStringList<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>, _arg_repeated: &'a mut Option<Vec<Option<String>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>> {
+  fn r#ReverseUtf8CppStringList<'a>(&'a self, _arg_input: Option<&'a [Option<String>]>, _arg_repeated: &'a mut Option<Vec<Option<String>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<String>>>>> {
     let _aidl_data = match self.build_parcel_ReverseUtf8CppStringList(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseUtf8CppStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseUtf8CppStringList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseUtf8CppStringList(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn GetCallback<'a>(&'a self, _arg_return_null: bool) -> binder::BoxFuture<'a, binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>> {
+  fn r#GetCallback<'a>(&'a self, _arg_return_null: bool) -> binder::BoxFuture<'a, binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>> {
     let _aidl_data = match self.build_parcel_GetCallback(_arg_return_null) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::GetCallback, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#GetCallback, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_GetCallback(_arg_return_null, _aidl_reply)
       }
     )
   }
-  fn FillOutStructuredParcelable<'a>(&'a self, _arg_parcel: &'a mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::BoxFuture<'a, binder::Result<()>> {
+  fn r#FillOutStructuredParcelable<'a>(&'a self, _arg_parcel: &'a mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::BoxFuture<'a, binder::Result<()>> {
     let _aidl_data = match self.build_parcel_FillOutStructuredParcelable(_arg_parcel) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::FillOutStructuredParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#FillOutStructuredParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_FillOutStructuredParcelable(_arg_parcel, _aidl_reply)
       }
     )
   }
-  fn RepeatExtendableParcelable<'a>(&'a self, _arg_ep: &'a crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &'a mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::BoxFuture<'a, binder::Result<()>> {
+  fn r#RepeatExtendableParcelable<'a>(&'a self, _arg_ep: &'a crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &'a mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::BoxFuture<'a, binder::Result<()>> {
     let _aidl_data = match self.build_parcel_RepeatExtendableParcelable(_arg_ep, _arg_ep2) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::RepeatExtendableParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#RepeatExtendableParcelable, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_RepeatExtendableParcelable(_arg_ep, _arg_ep2, _aidl_reply)
       }
     )
   }
-  fn ReverseList<'a>(&'a self, _arg_list: &'a crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList>> {
+  fn r#ReverseList<'a>(&'a self, _arg_list: &'a crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList>> {
     let _aidl_data = match self.build_parcel_ReverseList(_arg_list) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseList, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseList(_arg_list, _aidl_reply)
       }
     )
   }
-  fn ReverseIBinderArray<'a>(&'a self, _arg_input: &'a [binder::SpIBinder], _arg_repeated: &'a mut Vec<Option<binder::SpIBinder>>) -> binder::BoxFuture<'a, binder::Result<Vec<binder::SpIBinder>>> {
+  fn r#ReverseIBinderArray<'a>(&'a self, _arg_input: &'a [binder::SpIBinder], _arg_repeated: &'a mut Vec<Option<binder::SpIBinder>>) -> binder::BoxFuture<'a, binder::Result<Vec<binder::SpIBinder>>> {
     let _aidl_data = match self.build_parcel_ReverseIBinderArray(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseIBinderArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseIBinderArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseIBinderArray(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn ReverseNullableIBinderArray<'a>(&'a self, _arg_input: Option<&'a [Option<binder::SpIBinder>]>, _arg_repeated: &'a mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::SpIBinder>>>>> {
+  fn r#ReverseNullableIBinderArray<'a>(&'a self, _arg_input: Option<&'a [Option<binder::SpIBinder>]>, _arg_repeated: &'a mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::SpIBinder>>>>> {
     let _aidl_data = match self.build_parcel_ReverseNullableIBinderArray(_arg_input, _arg_repeated) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ReverseNullableIBinderArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ReverseNullableIBinderArray, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ReverseNullableIBinderArray(_arg_input, _arg_repeated, _aidl_reply)
       }
     )
   }
-  fn GetOldNameInterface<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>> {
+  fn r#GetOldNameInterface<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>> {
     let _aidl_data = match self.build_parcel_GetOldNameInterface() {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::GetOldNameInterface, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#GetOldNameInterface, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_GetOldNameInterface(_aidl_reply)
       }
     )
   }
-  fn GetNewNameInterface<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>> {
+  fn r#GetNewNameInterface<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>> {
     let _aidl_data = match self.build_parcel_GetNewNameInterface() {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::GetNewNameInterface, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#GetNewNameInterface, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_GetNewNameInterface(_aidl_reply)
       }
     )
   }
-  fn GetUnionTags<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>> {
+  fn r#GetUnionTags<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>> {
     let _aidl_data = match self.build_parcel_GetUnionTags(_arg_input) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::GetUnionTags, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#GetUnionTags, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_GetUnionTags(_arg_input, _aidl_reply)
       }
     )
   }
-  fn GetCppJavaTests<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<Option<binder::SpIBinder>>> {
+  fn r#GetCppJavaTests<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<Option<binder::SpIBinder>>> {
     let _aidl_data = match self.build_parcel_GetCppJavaTests() {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::GetCppJavaTests, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#GetCppJavaTests, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_GetCppJavaTests(_aidl_reply)
       }
     )
   }
-  fn getBackendType<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>> {
+  fn r#getBackendType<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>> {
     let _aidl_data = match self.build_parcel_getBackendType() {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::getBackendType, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#getBackendType, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_getBackendType(_aidl_reply)
       }
     )
   }
+  fn r#GetCircular<'a>(&'a self, _arg_cp: &'a mut crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_9_ICircular>>> {
+    let _aidl_data = match self.build_parcel_GetCircular(_arg_cp) {
+      Ok(_aidl_data) => _aidl_data,
+      Err(err) => return Box::pin(std::future::ready(Err(err))),
+    };
+    let binder = self.binder.clone();
+    P::spawn(
+      move || binder.submit_transact(transactions::r#GetCircular, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move |_aidl_reply| async move {
+        self.read_response_GetCircular(_arg_cp, _aidl_reply)
+      }
+    )
+  }
 }
 impl ITestService for binder::binder_impl::Binder<BnTestService> {
-  fn UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32> { self.0.UnimplementedMethod(_arg_arg) }
-  fn Deprecated(&self) -> binder::Result<()> { self.0.Deprecated() }
-  fn TestOneway(&self) -> binder::Result<()> { self.0.TestOneway() }
-  fn RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool> { self.0.RepeatBoolean(_arg_token) }
-  fn RepeatByte(&self, _arg_token: i8) -> binder::Result<i8> { self.0.RepeatByte(_arg_token) }
-  fn RepeatChar(&self, _arg_token: u16) -> binder::Result<u16> { self.0.RepeatChar(_arg_token) }
-  fn RepeatInt(&self, _arg_token: i32) -> binder::Result<i32> { self.0.RepeatInt(_arg_token) }
-  fn RepeatLong(&self, _arg_token: i64) -> binder::Result<i64> { self.0.RepeatLong(_arg_token) }
-  fn RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32> { self.0.RepeatFloat(_arg_token) }
-  fn RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64> { self.0.RepeatDouble(_arg_token) }
-  fn RepeatString(&self, _arg_token: &str) -> binder::Result<String> { self.0.RepeatString(_arg_token) }
-  fn RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> { self.0.RepeatByteEnum(_arg_token) }
-  fn RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> { self.0.RepeatIntEnum(_arg_token) }
-  fn RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> { self.0.RepeatLongEnum(_arg_token) }
-  fn ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>> { self.0.ReverseBoolean(_arg_input, _arg_repeated) }
-  fn ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>> { self.0.ReverseByte(_arg_input, _arg_repeated) }
-  fn ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>> { self.0.ReverseChar(_arg_input, _arg_repeated) }
-  fn ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>> { self.0.ReverseInt(_arg_input, _arg_repeated) }
-  fn ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>> { self.0.ReverseLong(_arg_input, _arg_repeated) }
-  fn ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>> { self.0.ReverseFloat(_arg_input, _arg_repeated) }
-  fn ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>> { self.0.ReverseDouble(_arg_input, _arg_repeated) }
-  fn ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> { self.0.ReverseString(_arg_input, _arg_repeated) }
-  fn ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> { self.0.ReverseByteEnum(_arg_input, _arg_repeated) }
-  fn ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> { self.0.ReverseIntEnum(_arg_input, _arg_repeated) }
-  fn ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> { self.0.ReverseLongEnum(_arg_input, _arg_repeated) }
-  fn GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>> { self.0.GetOtherTestService(_arg_name) }
-  fn VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool> { self.0.VerifyName(_arg_service, _arg_name) }
-  fn GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> { self.0.GetInterfaceArray(_arg_names) }
-  fn VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool> { self.0.VerifyNamesWithInterfaceArray(_arg_services, _arg_names) }
-  fn GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> { self.0.GetNullableInterfaceArray(_arg_names) }
-  fn VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> { self.0.VerifyNamesWithNullableInterfaceArray(_arg_services, _arg_names) }
-  fn GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> { self.0.GetInterfaceList(_arg_names) }
-  fn VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> { self.0.VerifyNamesWithInterfaceList(_arg_services, _arg_names) }
-  fn ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> { self.0.ReverseStringList(_arg_input, _arg_repeated) }
-  fn RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor> { self.0.RepeatParcelFileDescriptor(_arg_read) }
-  fn ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>> { self.0.ReverseParcelFileDescriptorArray(_arg_input, _arg_repeated) }
-  fn ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()> { self.0.ThrowServiceException(_arg_code) }
-  fn RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>> { self.0.RepeatNullableIntArray(_arg_input) }
-  fn RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> { self.0.RepeatNullableByteEnumArray(_arg_input) }
-  fn RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> { self.0.RepeatNullableIntEnumArray(_arg_input) }
-  fn RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> { self.0.RepeatNullableLongEnumArray(_arg_input) }
-  fn RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>> { self.0.RepeatNullableString(_arg_input) }
-  fn RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>> { self.0.RepeatNullableStringList(_arg_input) }
-  fn RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>> { self.0.RepeatNullableParcelable(_arg_input) }
-  fn RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> { self.0.RepeatNullableParcelableArray(_arg_input) }
-  fn RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> { self.0.RepeatNullableParcelableList(_arg_input) }
-  fn TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()> { self.0.TakesAnIBinder(_arg_input) }
-  fn TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()> { self.0.TakesANullableIBinder(_arg_input) }
-  fn TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()> { self.0.TakesAnIBinderList(_arg_input) }
-  fn TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()> { self.0.TakesANullableIBinderList(_arg_input) }
-  fn RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String> { self.0.RepeatUtf8CppString(_arg_token) }
-  fn RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>> { self.0.RepeatNullableUtf8CppString(_arg_token) }
-  fn ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> { self.0.ReverseUtf8CppString(_arg_input, _arg_repeated) }
-  fn ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> { self.0.ReverseNullableUtf8CppString(_arg_input, _arg_repeated) }
-  fn ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> { self.0.ReverseUtf8CppStringList(_arg_input, _arg_repeated) }
-  fn GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> { self.0.GetCallback(_arg_return_null) }
-  fn FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()> { self.0.FillOutStructuredParcelable(_arg_parcel) }
-  fn RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()> { self.0.RepeatExtendableParcelable(_arg_ep, _arg_ep2) }
-  fn ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList> { self.0.ReverseList(_arg_list) }
-  fn ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>> { self.0.ReverseIBinderArray(_arg_input, _arg_repeated) }
-  fn ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>> { self.0.ReverseNullableIBinderArray(_arg_input, _arg_repeated) }
-  fn GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>> { self.0.GetOldNameInterface() }
-  fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> { self.0.GetNewNameInterface() }
-  fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> { self.0.GetUnionTags(_arg_input) }
-  fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> { self.0.GetCppJavaTests() }
-  fn getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType> { self.0.getBackendType() }
+  fn r#UnimplementedMethod(&self, _arg_arg: i32) -> binder::Result<i32> { self.0.r#UnimplementedMethod(_arg_arg) }
+  fn r#Deprecated(&self) -> binder::Result<()> { self.0.r#Deprecated() }
+  fn r#TestOneway(&self) -> binder::Result<()> { self.0.r#TestOneway() }
+  fn r#RepeatBoolean(&self, _arg_token: bool) -> binder::Result<bool> { self.0.r#RepeatBoolean(_arg_token) }
+  fn r#RepeatByte(&self, _arg_token: i8) -> binder::Result<i8> { self.0.r#RepeatByte(_arg_token) }
+  fn r#RepeatChar(&self, _arg_token: u16) -> binder::Result<u16> { self.0.r#RepeatChar(_arg_token) }
+  fn r#RepeatInt(&self, _arg_token: i32) -> binder::Result<i32> { self.0.r#RepeatInt(_arg_token) }
+  fn r#RepeatLong(&self, _arg_token: i64) -> binder::Result<i64> { self.0.r#RepeatLong(_arg_token) }
+  fn r#RepeatFloat(&self, _arg_token: f32) -> binder::Result<f32> { self.0.r#RepeatFloat(_arg_token) }
+  fn r#RepeatDouble(&self, _arg_token: f64) -> binder::Result<f64> { self.0.r#RepeatDouble(_arg_token) }
+  fn r#RepeatString(&self, _arg_token: &str) -> binder::Result<String> { self.0.r#RepeatString(_arg_token) }
+  fn r#RepeatByteEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> { self.0.r#RepeatByteEnum(_arg_token) }
+  fn r#RepeatIntEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> { self.0.r#RepeatIntEnum(_arg_token) }
+  fn r#RepeatLongEnum(&self, _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> { self.0.r#RepeatLongEnum(_arg_token) }
+  fn r#ReverseBoolean(&self, _arg_input: &[bool], _arg_repeated: &mut Vec<bool>) -> binder::Result<Vec<bool>> { self.0.r#ReverseBoolean(_arg_input, _arg_repeated) }
+  fn r#ReverseByte(&self, _arg_input: &[u8], _arg_repeated: &mut Vec<u8>) -> binder::Result<Vec<u8>> { self.0.r#ReverseByte(_arg_input, _arg_repeated) }
+  fn r#ReverseChar(&self, _arg_input: &[u16], _arg_repeated: &mut Vec<u16>) -> binder::Result<Vec<u16>> { self.0.r#ReverseChar(_arg_input, _arg_repeated) }
+  fn r#ReverseInt(&self, _arg_input: &[i32], _arg_repeated: &mut Vec<i32>) -> binder::Result<Vec<i32>> { self.0.r#ReverseInt(_arg_input, _arg_repeated) }
+  fn r#ReverseLong(&self, _arg_input: &[i64], _arg_repeated: &mut Vec<i64>) -> binder::Result<Vec<i64>> { self.0.r#ReverseLong(_arg_input, _arg_repeated) }
+  fn r#ReverseFloat(&self, _arg_input: &[f32], _arg_repeated: &mut Vec<f32>) -> binder::Result<Vec<f32>> { self.0.r#ReverseFloat(_arg_input, _arg_repeated) }
+  fn r#ReverseDouble(&self, _arg_input: &[f64], _arg_repeated: &mut Vec<f64>) -> binder::Result<Vec<f64>> { self.0.r#ReverseDouble(_arg_input, _arg_repeated) }
+  fn r#ReverseString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> { self.0.r#ReverseString(_arg_input, _arg_repeated) }
+  fn r#ReverseByteEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> { self.0.r#ReverseByteEnum(_arg_input, _arg_repeated) }
+  fn r#ReverseIntEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> { self.0.r#ReverseIntEnum(_arg_input, _arg_repeated) }
+  fn r#ReverseLongEnum(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum], _arg_repeated: &mut Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> { self.0.r#ReverseLongEnum(_arg_input, _arg_repeated) }
+  fn r#GetOtherTestService(&self, _arg_name: &str) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>> { self.0.r#GetOtherTestService(_arg_name) }
+  fn r#SetOtherTestService(&self, _arg_name: &str, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>) -> binder::Result<bool> { self.0.r#SetOtherTestService(_arg_name, _arg_service) }
+  fn r#VerifyName(&self, _arg_service: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>, _arg_name: &str) -> binder::Result<bool> { self.0.r#VerifyName(_arg_service, _arg_name) }
+  fn r#GetInterfaceArray(&self, _arg_names: &[String]) -> binder::Result<Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> { self.0.r#GetInterfaceArray(_arg_names) }
+  fn r#VerifyNamesWithInterfaceArray(&self, _arg_services: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>], _arg_names: &[String]) -> binder::Result<bool> { self.0.r#VerifyNamesWithInterfaceArray(_arg_services, _arg_names) }
+  fn r#GetNullableInterfaceArray(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> { self.0.r#GetNullableInterfaceArray(_arg_names) }
+  fn r#VerifyNamesWithNullableInterfaceArray(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> { self.0.r#VerifyNamesWithNullableInterfaceArray(_arg_services, _arg_names) }
+  fn r#GetInterfaceList(&self, _arg_names: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>>> { self.0.r#GetInterfaceList(_arg_names) }
+  fn r#VerifyNamesWithInterfaceList(&self, _arg_services: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>]>, _arg_names: Option<&[Option<String>]>) -> binder::Result<bool> { self.0.r#VerifyNamesWithInterfaceList(_arg_services, _arg_names) }
+  fn r#ReverseStringList(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> { self.0.r#ReverseStringList(_arg_input, _arg_repeated) }
+  fn r#RepeatParcelFileDescriptor(&self, _arg_read: &binder::ParcelFileDescriptor) -> binder::Result<binder::ParcelFileDescriptor> { self.0.r#RepeatParcelFileDescriptor(_arg_read) }
+  fn r#ReverseParcelFileDescriptorArray(&self, _arg_input: &[binder::ParcelFileDescriptor], _arg_repeated: &mut Vec<Option<binder::ParcelFileDescriptor>>) -> binder::Result<Vec<binder::ParcelFileDescriptor>> { self.0.r#ReverseParcelFileDescriptorArray(_arg_input, _arg_repeated) }
+  fn r#ThrowServiceException(&self, _arg_code: i32) -> binder::Result<()> { self.0.r#ThrowServiceException(_arg_code) }
+  fn r#RepeatNullableIntArray(&self, _arg_input: Option<&[i32]>) -> binder::Result<Option<Vec<i32>>> { self.0.r#RepeatNullableIntArray(_arg_input) }
+  fn r#RepeatNullableByteEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>>> { self.0.r#RepeatNullableByteEnumArray(_arg_input) }
+  fn r#RepeatNullableIntEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>>> { self.0.r#RepeatNullableIntEnumArray(_arg_input) }
+  fn r#RepeatNullableLongEnumArray(&self, _arg_input: Option<&[crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum]>) -> binder::Result<Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>>> { self.0.r#RepeatNullableLongEnumArray(_arg_input) }
+  fn r#RepeatNullableString(&self, _arg_input: Option<&str>) -> binder::Result<Option<String>> { self.0.r#RepeatNullableString(_arg_input) }
+  fn r#RepeatNullableStringList(&self, _arg_input: Option<&[Option<String>]>) -> binder::Result<Option<Vec<Option<String>>>> { self.0.r#RepeatNullableStringList(_arg_input) }
+  fn r#RepeatNullableParcelable(&self, _arg_input: Option<&crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>) -> binder::Result<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>> { self.0.r#RepeatNullableParcelable(_arg_input) }
+  fn r#RepeatNullableParcelableArray(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> { self.0.r#RepeatNullableParcelableArray(_arg_input) }
+  fn r#RepeatNullableParcelableList(&self, _arg_input: Option<&[Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>]>) -> binder::Result<Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>> { self.0.r#RepeatNullableParcelableList(_arg_input) }
+  fn r#TakesAnIBinder(&self, _arg_input: &binder::SpIBinder) -> binder::Result<()> { self.0.r#TakesAnIBinder(_arg_input) }
+  fn r#TakesANullableIBinder(&self, _arg_input: Option<&binder::SpIBinder>) -> binder::Result<()> { self.0.r#TakesANullableIBinder(_arg_input) }
+  fn r#TakesAnIBinderList(&self, _arg_input: &[binder::SpIBinder]) -> binder::Result<()> { self.0.r#TakesAnIBinderList(_arg_input) }
+  fn r#TakesANullableIBinderList(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>) -> binder::Result<()> { self.0.r#TakesANullableIBinderList(_arg_input) }
+  fn r#RepeatUtf8CppString(&self, _arg_token: &str) -> binder::Result<String> { self.0.r#RepeatUtf8CppString(_arg_token) }
+  fn r#RepeatNullableUtf8CppString(&self, _arg_token: Option<&str>) -> binder::Result<Option<String>> { self.0.r#RepeatNullableUtf8CppString(_arg_token) }
+  fn r#ReverseUtf8CppString(&self, _arg_input: &[String], _arg_repeated: &mut Vec<String>) -> binder::Result<Vec<String>> { self.0.r#ReverseUtf8CppString(_arg_input, _arg_repeated) }
+  fn r#ReverseNullableUtf8CppString(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> { self.0.r#ReverseNullableUtf8CppString(_arg_input, _arg_repeated) }
+  fn r#ReverseUtf8CppStringList(&self, _arg_input: Option<&[Option<String>]>, _arg_repeated: &mut Option<Vec<Option<String>>>) -> binder::Result<Option<Vec<Option<String>>>> { self.0.r#ReverseUtf8CppStringList(_arg_input, _arg_repeated) }
+  fn r#GetCallback(&self, _arg_return_null: bool) -> binder::Result<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>> { self.0.r#GetCallback(_arg_return_null) }
+  fn r#FillOutStructuredParcelable(&self, _arg_parcel: &mut crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable) -> binder::Result<()> { self.0.r#FillOutStructuredParcelable(_arg_parcel) }
+  fn r#RepeatExtendableParcelable(&self, _arg_ep: &crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable, _arg_ep2: &mut crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable) -> binder::Result<()> { self.0.r#RepeatExtendableParcelable(_arg_ep, _arg_ep2) }
+  fn r#ReverseList(&self, _arg_list: &crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList> { self.0.r#ReverseList(_arg_list) }
+  fn r#ReverseIBinderArray(&self, _arg_input: &[binder::SpIBinder], _arg_repeated: &mut Vec<Option<binder::SpIBinder>>) -> binder::Result<Vec<binder::SpIBinder>> { self.0.r#ReverseIBinderArray(_arg_input, _arg_repeated) }
+  fn r#ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>> { self.0.r#ReverseNullableIBinderArray(_arg_input, _arg_repeated) }
+  fn r#GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>> { self.0.r#GetOldNameInterface() }
+  fn r#GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> { self.0.r#GetNewNameInterface() }
+  fn r#GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> { self.0.r#GetUnionTags(_arg_input) }
+  fn r#GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> { self.0.r#GetCppJavaTests() }
+  fn r#getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType> { self.0.r#getBackendType() }
+  fn r#GetCircular(&self, _arg_cp: &mut crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_9_ICircular>> { self.0.r#GetCircular(_arg_cp) }
 }
 fn on_transact(_aidl_service: &dyn ITestService, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
   match _aidl_code {
-    transactions::UnimplementedMethod => {
+    transactions::r#UnimplementedMethod => {
       let _arg_arg: i32 = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.UnimplementedMethod(_arg_arg);
+      let _aidl_return = _aidl_service.r#UnimplementedMethod(_arg_arg);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3281,8 +3376,8 @@
       }
       Ok(())
     }
-    transactions::Deprecated => {
-      let _aidl_return = _aidl_service.Deprecated();
+    transactions::r#Deprecated => {
+      let _aidl_return = _aidl_service.r#Deprecated();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3291,13 +3386,13 @@
       }
       Ok(())
     }
-    transactions::TestOneway => {
-      let _aidl_return = _aidl_service.TestOneway();
+    transactions::r#TestOneway => {
+      let _aidl_return = _aidl_service.r#TestOneway();
       Ok(())
     }
-    transactions::RepeatBoolean => {
+    transactions::r#RepeatBoolean => {
       let _arg_token: bool = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatBoolean(_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatBoolean(_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3307,9 +3402,9 @@
       }
       Ok(())
     }
-    transactions::RepeatByte => {
+    transactions::r#RepeatByte => {
       let _arg_token: i8 = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatByte(_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatByte(_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3319,9 +3414,9 @@
       }
       Ok(())
     }
-    transactions::RepeatChar => {
+    transactions::r#RepeatChar => {
       let _arg_token: u16 = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatChar(_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatChar(_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3331,9 +3426,9 @@
       }
       Ok(())
     }
-    transactions::RepeatInt => {
+    transactions::r#RepeatInt => {
       let _arg_token: i32 = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatInt(_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatInt(_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3343,9 +3438,9 @@
       }
       Ok(())
     }
-    transactions::RepeatLong => {
+    transactions::r#RepeatLong => {
       let _arg_token: i64 = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatLong(_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatLong(_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3355,9 +3450,9 @@
       }
       Ok(())
     }
-    transactions::RepeatFloat => {
+    transactions::r#RepeatFloat => {
       let _arg_token: f32 = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatFloat(_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatFloat(_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3367,9 +3462,9 @@
       }
       Ok(())
     }
-    transactions::RepeatDouble => {
+    transactions::r#RepeatDouble => {
       let _arg_token: f64 = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatDouble(_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatDouble(_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3379,9 +3474,9 @@
       }
       Ok(())
     }
-    transactions::RepeatString => {
+    transactions::r#RepeatString => {
       let _arg_token: String = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatString(&_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatString(&_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3391,9 +3486,9 @@
       }
       Ok(())
     }
-    transactions::RepeatByteEnum => {
+    transactions::r#RepeatByteEnum => {
       let _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatByteEnum(_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatByteEnum(_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3403,9 +3498,9 @@
       }
       Ok(())
     }
-    transactions::RepeatIntEnum => {
+    transactions::r#RepeatIntEnum => {
       let _arg_token: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatIntEnum(_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatIntEnum(_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3415,9 +3510,9 @@
       }
       Ok(())
     }
-    transactions::RepeatLongEnum => {
+    transactions::r#RepeatLongEnum => {
       let _arg_token: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatLongEnum(_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatLongEnum(_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3427,11 +3522,11 @@
       }
       Ok(())
     }
-    transactions::ReverseBoolean => {
+    transactions::r#ReverseBoolean => {
       let _arg_input: Vec<bool> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<bool> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseBoolean(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseBoolean(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3442,11 +3537,11 @@
       }
       Ok(())
     }
-    transactions::ReverseByte => {
+    transactions::r#ReverseByte => {
       let _arg_input: Vec<u8> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<u8> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseByte(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseByte(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3457,11 +3552,11 @@
       }
       Ok(())
     }
-    transactions::ReverseChar => {
+    transactions::r#ReverseChar => {
       let _arg_input: Vec<u16> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<u16> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseChar(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseChar(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3472,11 +3567,11 @@
       }
       Ok(())
     }
-    transactions::ReverseInt => {
+    transactions::r#ReverseInt => {
       let _arg_input: Vec<i32> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<i32> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseInt(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseInt(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3487,11 +3582,11 @@
       }
       Ok(())
     }
-    transactions::ReverseLong => {
+    transactions::r#ReverseLong => {
       let _arg_input: Vec<i64> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<i64> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseLong(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseLong(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3502,11 +3597,11 @@
       }
       Ok(())
     }
-    transactions::ReverseFloat => {
+    transactions::r#ReverseFloat => {
       let _arg_input: Vec<f32> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<f32> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseFloat(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseFloat(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3517,11 +3612,11 @@
       }
       Ok(())
     }
-    transactions::ReverseDouble => {
+    transactions::r#ReverseDouble => {
       let _arg_input: Vec<f64> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<f64> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseDouble(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseDouble(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3532,11 +3627,11 @@
       }
       Ok(())
     }
-    transactions::ReverseString => {
+    transactions::r#ReverseString => {
       let _arg_input: Vec<String> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<String> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseString(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseString(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3547,11 +3642,11 @@
       }
       Ok(())
     }
-    transactions::ReverseByteEnum => {
+    transactions::r#ReverseByteEnum => {
       let _arg_input: Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseByteEnum(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseByteEnum(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3562,11 +3657,11 @@
       }
       Ok(())
     }
-    transactions::ReverseIntEnum => {
+    transactions::r#ReverseIntEnum => {
       let _arg_input: Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseIntEnum(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseIntEnum(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3577,11 +3672,11 @@
       }
       Ok(())
     }
-    transactions::ReverseLongEnum => {
+    transactions::r#ReverseLongEnum => {
       let _arg_input: Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseLongEnum(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseLongEnum(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3592,9 +3687,9 @@
       }
       Ok(())
     }
-    transactions::GetOtherTestService => {
+    transactions::r#GetOtherTestService => {
       let _arg_name: String = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.GetOtherTestService(&_arg_name);
+      let _aidl_return = _aidl_service.r#GetOtherTestService(&_arg_name);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3604,10 +3699,23 @@
       }
       Ok(())
     }
-    transactions::VerifyName => {
+    transactions::r#SetOtherTestService => {
+      let _arg_name: String = _aidl_data.read()?;
+      let _arg_service: binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback> = _aidl_data.read()?;
+      let _aidl_return = _aidl_service.r#SetOtherTestService(&_arg_name, &_arg_service);
+      match &_aidl_return {
+        Ok(_aidl_return) => {
+          _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
+          _aidl_reply.write(_aidl_return)?;
+        }
+        Err(_aidl_status) => _aidl_reply.write(_aidl_status)?
+      }
+      Ok(())
+    }
+    transactions::r#VerifyName => {
       let _arg_service: binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback> = _aidl_data.read()?;
       let _arg_name: String = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.VerifyName(&_arg_service, &_arg_name);
+      let _aidl_return = _aidl_service.r#VerifyName(&_arg_service, &_arg_name);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3617,9 +3725,9 @@
       }
       Ok(())
     }
-    transactions::GetInterfaceArray => {
+    transactions::r#GetInterfaceArray => {
       let _arg_names: Vec<String> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.GetInterfaceArray(&_arg_names);
+      let _aidl_return = _aidl_service.r#GetInterfaceArray(&_arg_names);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3629,10 +3737,10 @@
       }
       Ok(())
     }
-    transactions::VerifyNamesWithInterfaceArray => {
+    transactions::r#VerifyNamesWithInterfaceArray => {
       let _arg_services: Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>> = _aidl_data.read()?;
       let _arg_names: Vec<String> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.VerifyNamesWithInterfaceArray(&_arg_services, &_arg_names);
+      let _aidl_return = _aidl_service.r#VerifyNamesWithInterfaceArray(&_arg_services, &_arg_names);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3642,9 +3750,9 @@
       }
       Ok(())
     }
-    transactions::GetNullableInterfaceArray => {
+    transactions::r#GetNullableInterfaceArray => {
       let _arg_names: Option<Vec<Option<String>>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.GetNullableInterfaceArray(_arg_names.as_deref());
+      let _aidl_return = _aidl_service.r#GetNullableInterfaceArray(_arg_names.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3654,10 +3762,10 @@
       }
       Ok(())
     }
-    transactions::VerifyNamesWithNullableInterfaceArray => {
+    transactions::r#VerifyNamesWithNullableInterfaceArray => {
       let _arg_services: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>> = _aidl_data.read()?;
       let _arg_names: Option<Vec<Option<String>>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.VerifyNamesWithNullableInterfaceArray(_arg_services.as_deref(), _arg_names.as_deref());
+      let _aidl_return = _aidl_service.r#VerifyNamesWithNullableInterfaceArray(_arg_services.as_deref(), _arg_names.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3667,9 +3775,9 @@
       }
       Ok(())
     }
-    transactions::GetInterfaceList => {
+    transactions::r#GetInterfaceList => {
       let _arg_names: Option<Vec<Option<String>>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.GetInterfaceList(_arg_names.as_deref());
+      let _aidl_return = _aidl_service.r#GetInterfaceList(_arg_names.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3679,10 +3787,10 @@
       }
       Ok(())
     }
-    transactions::VerifyNamesWithInterfaceList => {
+    transactions::r#VerifyNamesWithInterfaceList => {
       let _arg_services: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_14_INamedCallback>>>> = _aidl_data.read()?;
       let _arg_names: Option<Vec<Option<String>>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.VerifyNamesWithInterfaceList(_arg_services.as_deref(), _arg_names.as_deref());
+      let _aidl_return = _aidl_service.r#VerifyNamesWithInterfaceList(_arg_services.as_deref(), _arg_names.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3692,10 +3800,10 @@
       }
       Ok(())
     }
-    transactions::ReverseStringList => {
+    transactions::r#ReverseStringList => {
       let _arg_input: Vec<String> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<String> = Default::default();
-      let _aidl_return = _aidl_service.ReverseStringList(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseStringList(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3706,9 +3814,9 @@
       }
       Ok(())
     }
-    transactions::RepeatParcelFileDescriptor => {
+    transactions::r#RepeatParcelFileDescriptor => {
       let _arg_read: binder::ParcelFileDescriptor = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatParcelFileDescriptor(&_arg_read);
+      let _aidl_return = _aidl_service.r#RepeatParcelFileDescriptor(&_arg_read);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3718,11 +3826,11 @@
       }
       Ok(())
     }
-    transactions::ReverseParcelFileDescriptorArray => {
+    transactions::r#ReverseParcelFileDescriptorArray => {
       let _arg_input: Vec<binder::ParcelFileDescriptor> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<Option<binder::ParcelFileDescriptor>> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseParcelFileDescriptorArray(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseParcelFileDescriptorArray(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3734,9 +3842,9 @@
       }
       Ok(())
     }
-    transactions::ThrowServiceException => {
+    transactions::r#ThrowServiceException => {
       let _arg_code: i32 = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.ThrowServiceException(_arg_code);
+      let _aidl_return = _aidl_service.r#ThrowServiceException(_arg_code);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3745,9 +3853,9 @@
       }
       Ok(())
     }
-    transactions::RepeatNullableIntArray => {
+    transactions::r#RepeatNullableIntArray => {
       let _arg_input: Option<Vec<i32>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatNullableIntArray(_arg_input.as_deref());
+      let _aidl_return = _aidl_service.r#RepeatNullableIntArray(_arg_input.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3757,9 +3865,9 @@
       }
       Ok(())
     }
-    transactions::RepeatNullableByteEnumArray => {
+    transactions::r#RepeatNullableByteEnumArray => {
       let _arg_input: Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatNullableByteEnumArray(_arg_input.as_deref());
+      let _aidl_return = _aidl_service.r#RepeatNullableByteEnumArray(_arg_input.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3769,9 +3877,9 @@
       }
       Ok(())
     }
-    transactions::RepeatNullableIntEnumArray => {
+    transactions::r#RepeatNullableIntEnumArray => {
       let _arg_input: Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatNullableIntEnumArray(_arg_input.as_deref());
+      let _aidl_return = _aidl_service.r#RepeatNullableIntEnumArray(_arg_input.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3781,9 +3889,9 @@
       }
       Ok(())
     }
-    transactions::RepeatNullableLongEnumArray => {
+    transactions::r#RepeatNullableLongEnumArray => {
       let _arg_input: Option<Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatNullableLongEnumArray(_arg_input.as_deref());
+      let _aidl_return = _aidl_service.r#RepeatNullableLongEnumArray(_arg_input.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3793,9 +3901,9 @@
       }
       Ok(())
     }
-    transactions::RepeatNullableString => {
+    transactions::r#RepeatNullableString => {
       let _arg_input: Option<String> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatNullableString(_arg_input.as_deref());
+      let _aidl_return = _aidl_service.r#RepeatNullableString(_arg_input.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3805,9 +3913,9 @@
       }
       Ok(())
     }
-    transactions::RepeatNullableStringList => {
+    transactions::r#RepeatNullableStringList => {
       let _arg_input: Option<Vec<Option<String>>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatNullableStringList(_arg_input.as_deref());
+      let _aidl_return = _aidl_service.r#RepeatNullableStringList(_arg_input.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3817,9 +3925,9 @@
       }
       Ok(())
     }
-    transactions::RepeatNullableParcelable => {
+    transactions::r#RepeatNullableParcelable => {
       let _arg_input: Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatNullableParcelable(_arg_input.as_ref());
+      let _aidl_return = _aidl_service.r#RepeatNullableParcelable(_arg_input.as_ref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3829,9 +3937,9 @@
       }
       Ok(())
     }
-    transactions::RepeatNullableParcelableArray => {
+    transactions::r#RepeatNullableParcelableArray => {
       let _arg_input: Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatNullableParcelableArray(_arg_input.as_deref());
+      let _aidl_return = _aidl_service.r#RepeatNullableParcelableArray(_arg_input.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3841,9 +3949,9 @@
       }
       Ok(())
     }
-    transactions::RepeatNullableParcelableList => {
+    transactions::r#RepeatNullableParcelableList => {
       let _arg_input: Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatNullableParcelableList(_arg_input.as_deref());
+      let _aidl_return = _aidl_service.r#RepeatNullableParcelableList(_arg_input.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3853,9 +3961,9 @@
       }
       Ok(())
     }
-    transactions::TakesAnIBinder => {
+    transactions::r#TakesAnIBinder => {
       let _arg_input: binder::SpIBinder = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.TakesAnIBinder(&_arg_input);
+      let _aidl_return = _aidl_service.r#TakesAnIBinder(&_arg_input);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3864,9 +3972,9 @@
       }
       Ok(())
     }
-    transactions::TakesANullableIBinder => {
+    transactions::r#TakesANullableIBinder => {
       let _arg_input: Option<binder::SpIBinder> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.TakesANullableIBinder(_arg_input.as_ref());
+      let _aidl_return = _aidl_service.r#TakesANullableIBinder(_arg_input.as_ref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3875,9 +3983,9 @@
       }
       Ok(())
     }
-    transactions::TakesAnIBinderList => {
+    transactions::r#TakesAnIBinderList => {
       let _arg_input: Vec<binder::SpIBinder> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.TakesAnIBinderList(&_arg_input);
+      let _aidl_return = _aidl_service.r#TakesAnIBinderList(&_arg_input);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3886,9 +3994,9 @@
       }
       Ok(())
     }
-    transactions::TakesANullableIBinderList => {
+    transactions::r#TakesANullableIBinderList => {
       let _arg_input: Option<Vec<Option<binder::SpIBinder>>> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.TakesANullableIBinderList(_arg_input.as_deref());
+      let _aidl_return = _aidl_service.r#TakesANullableIBinderList(_arg_input.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3897,9 +4005,9 @@
       }
       Ok(())
     }
-    transactions::RepeatUtf8CppString => {
+    transactions::r#RepeatUtf8CppString => {
       let _arg_token: String = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatUtf8CppString(&_arg_token);
+      let _aidl_return = _aidl_service.r#RepeatUtf8CppString(&_arg_token);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3909,9 +4017,9 @@
       }
       Ok(())
     }
-    transactions::RepeatNullableUtf8CppString => {
+    transactions::r#RepeatNullableUtf8CppString => {
       let _arg_token: Option<String> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.RepeatNullableUtf8CppString(_arg_token.as_deref());
+      let _aidl_return = _aidl_service.r#RepeatNullableUtf8CppString(_arg_token.as_deref());
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3921,11 +4029,11 @@
       }
       Ok(())
     }
-    transactions::ReverseUtf8CppString => {
+    transactions::r#ReverseUtf8CppString => {
       let _arg_input: Vec<String> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<String> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseUtf8CppString(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseUtf8CppString(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3936,11 +4044,11 @@
       }
       Ok(())
     }
-    transactions::ReverseNullableUtf8CppString => {
+    transactions::r#ReverseNullableUtf8CppString => {
       let _arg_input: Option<Vec<Option<String>>> = _aidl_data.read()?;
       let mut _arg_repeated: Option<Vec<Option<String>>> = Default::default();
       _aidl_data.resize_nullable_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseNullableUtf8CppString(_arg_input.as_deref(), &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseNullableUtf8CppString(_arg_input.as_deref(), &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3951,10 +4059,10 @@
       }
       Ok(())
     }
-    transactions::ReverseUtf8CppStringList => {
+    transactions::r#ReverseUtf8CppStringList => {
       let _arg_input: Option<Vec<Option<String>>> = _aidl_data.read()?;
       let mut _arg_repeated: Option<Vec<Option<String>>> = Default::default();
-      let _aidl_return = _aidl_service.ReverseUtf8CppStringList(_arg_input.as_deref(), &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseUtf8CppStringList(_arg_input.as_deref(), &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3965,9 +4073,9 @@
       }
       Ok(())
     }
-    transactions::GetCallback => {
+    transactions::r#GetCallback => {
       let _arg_return_null: bool = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.GetCallback(_arg_return_null);
+      let _aidl_return = _aidl_service.r#GetCallback(_arg_return_null);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3977,9 +4085,9 @@
       }
       Ok(())
     }
-    transactions::FillOutStructuredParcelable => {
+    transactions::r#FillOutStructuredParcelable => {
       let mut _arg_parcel: crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.FillOutStructuredParcelable(&mut _arg_parcel);
+      let _aidl_return = _aidl_service.r#FillOutStructuredParcelable(&mut _arg_parcel);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -3989,10 +4097,10 @@
       }
       Ok(())
     }
-    transactions::RepeatExtendableParcelable => {
+    transactions::r#RepeatExtendableParcelable => {
       let _arg_ep: crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable = _aidl_data.read()?;
       let mut _arg_ep2: crate::mangled::_7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable = Default::default();
-      let _aidl_return = _aidl_service.RepeatExtendableParcelable(&_arg_ep, &mut _arg_ep2);
+      let _aidl_return = _aidl_service.r#RepeatExtendableParcelable(&_arg_ep, &mut _arg_ep2);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -4002,9 +4110,9 @@
       }
       Ok(())
     }
-    transactions::ReverseList => {
+    transactions::r#ReverseList => {
       let _arg_list: crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.ReverseList(&_arg_list);
+      let _aidl_return = _aidl_service.r#ReverseList(&_arg_list);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -4014,11 +4122,11 @@
       }
       Ok(())
     }
-    transactions::ReverseIBinderArray => {
+    transactions::r#ReverseIBinderArray => {
       let _arg_input: Vec<binder::SpIBinder> = _aidl_data.read()?;
       let mut _arg_repeated: Vec<Option<binder::SpIBinder>> = Default::default();
       _aidl_data.resize_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseIBinderArray(&_arg_input, &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseIBinderArray(&_arg_input, &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -4029,11 +4137,11 @@
       }
       Ok(())
     }
-    transactions::ReverseNullableIBinderArray => {
+    transactions::r#ReverseNullableIBinderArray => {
       let _arg_input: Option<Vec<Option<binder::SpIBinder>>> = _aidl_data.read()?;
       let mut _arg_repeated: Option<Vec<Option<binder::SpIBinder>>> = Default::default();
       _aidl_data.resize_nullable_out_vec(&mut _arg_repeated)?;
-      let _aidl_return = _aidl_service.ReverseNullableIBinderArray(_arg_input.as_deref(), &mut _arg_repeated);
+      let _aidl_return = _aidl_service.r#ReverseNullableIBinderArray(_arg_input.as_deref(), &mut _arg_repeated);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -4044,8 +4152,8 @@
       }
       Ok(())
     }
-    transactions::GetOldNameInterface => {
-      let _aidl_return = _aidl_service.GetOldNameInterface();
+    transactions::r#GetOldNameInterface => {
+      let _aidl_return = _aidl_service.r#GetOldNameInterface();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -4055,8 +4163,8 @@
       }
       Ok(())
     }
-    transactions::GetNewNameInterface => {
-      let _aidl_return = _aidl_service.GetNewNameInterface();
+    transactions::r#GetNewNameInterface => {
+      let _aidl_return = _aidl_service.r#GetNewNameInterface();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -4066,9 +4174,9 @@
       }
       Ok(())
     }
-    transactions::GetUnionTags => {
+    transactions::r#GetUnionTags => {
       let _arg_input: Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.GetUnionTags(&_arg_input);
+      let _aidl_return = _aidl_service.r#GetUnionTags(&_arg_input);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -4078,8 +4186,8 @@
       }
       Ok(())
     }
-    transactions::GetCppJavaTests => {
-      let _aidl_return = _aidl_service.GetCppJavaTests();
+    transactions::r#GetCppJavaTests => {
+      let _aidl_return = _aidl_service.r#GetCppJavaTests();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -4089,8 +4197,8 @@
       }
       Ok(())
     }
-    transactions::getBackendType => {
-      let _aidl_return = _aidl_service.getBackendType();
+    transactions::r#getBackendType => {
+      let _aidl_return = _aidl_service.r#getBackendType();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -4100,20 +4208,33 @@
       }
       Ok(())
     }
+    transactions::r#GetCircular => {
+      let mut _arg_cp: crate::mangled::_7_android_4_aidl_5_tests_18_CircularParcelable = Default::default();
+      let _aidl_return = _aidl_service.r#GetCircular(&mut _arg_cp);
+      match &_aidl_return {
+        Ok(_aidl_return) => {
+          _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
+          _aidl_reply.write(_aidl_return)?;
+          _aidl_reply.write(&_arg_cp)?;
+        }
+        Err(_aidl_status) => _aidl_reply.write(_aidl_status)?
+      }
+      Ok(())
+    }
     _ => Err(binder::StatusCode::UNKNOWN_TRANSACTION)
   }
 }
-pub mod Empty {
+pub mod r#Empty {
   #[derive(Debug, Clone, PartialEq)]
-  pub struct Empty {
+  pub struct r#Empty {
   }
-  impl Default for Empty {
+  impl Default for r#Empty {
     fn default() -> Self {
       Self {
       }
     }
   }
-  impl binder::Parcelable for Empty {
+  impl binder::Parcelable for r#Empty {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_write(|subparcel| {
         Ok(())
@@ -4125,152 +4246,327 @@
       })
     }
   }
-  binder::impl_serialize_for_parcelable!(Empty);
-  binder::impl_deserialize_for_parcelable!(Empty);
-  impl binder::binder_impl::ParcelableMetadata for Empty {
+  binder::impl_serialize_for_parcelable!(r#Empty);
+  binder::impl_deserialize_for_parcelable!(r#Empty);
+  impl binder::binder_impl::ParcelableMetadata for r#Empty {
     fn get_descriptor() -> &'static str { "android.aidl.tests.ITestService.Empty" }
   }
 }
-pub mod CompilerChecks {
+pub mod r#CompilerChecks {
   #[derive(Debug)]
-  pub struct CompilerChecks {
-    pub binder: Option<binder::SpIBinder>,
-    pub nullable_binder: Option<binder::SpIBinder>,
-    pub binder_array: Vec<binder::SpIBinder>,
-    pub nullable_binder_array: Option<Vec<Option<binder::SpIBinder>>>,
-    pub binder_list: Vec<binder::SpIBinder>,
-    pub nullable_binder_list: Option<Vec<Option<binder::SpIBinder>>>,
-    pub pfd: Option<binder::ParcelFileDescriptor>,
-    pub nullable_pfd: Option<binder::ParcelFileDescriptor>,
-    pub pfd_array: Vec<binder::ParcelFileDescriptor>,
-    pub nullable_pfd_array: Option<Vec<Option<binder::ParcelFileDescriptor>>>,
-    pub pfd_list: Vec<binder::ParcelFileDescriptor>,
-    pub nullable_pfd_list: Option<Vec<Option<binder::ParcelFileDescriptor>>>,
-    pub parcel: crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty,
-    pub nullable_parcel: Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>,
-    pub parcel_array: Vec<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>,
-    pub nullable_parcel_array: Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>,
-    pub parcel_list: Vec<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>,
-    pub nullable_parcel_list: Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>,
+  pub struct r#CompilerChecks {
+    pub r#binder: Option<binder::SpIBinder>,
+    pub r#nullable_binder: Option<binder::SpIBinder>,
+    pub r#binder_array: Vec<binder::SpIBinder>,
+    pub r#nullable_binder_array: Option<Vec<Option<binder::SpIBinder>>>,
+    pub r#binder_list: Vec<binder::SpIBinder>,
+    pub r#nullable_binder_list: Option<Vec<Option<binder::SpIBinder>>>,
+    pub r#pfd: Option<binder::ParcelFileDescriptor>,
+    pub r#nullable_pfd: Option<binder::ParcelFileDescriptor>,
+    pub r#pfd_array: Vec<binder::ParcelFileDescriptor>,
+    pub r#nullable_pfd_array: Option<Vec<Option<binder::ParcelFileDescriptor>>>,
+    pub r#pfd_list: Vec<binder::ParcelFileDescriptor>,
+    pub r#nullable_pfd_list: Option<Vec<Option<binder::ParcelFileDescriptor>>>,
+    pub r#parcel: crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty,
+    pub r#nullable_parcel: Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>,
+    pub r#parcel_array: Vec<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>,
+    pub r#nullable_parcel_array: Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>,
+    pub r#parcel_list: Vec<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>,
+    pub r#nullable_parcel_list: Option<Vec<Option<crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_5_Empty>>>,
   }
-  impl Default for CompilerChecks {
+  impl Default for r#CompilerChecks {
     fn default() -> Self {
       Self {
-        binder: Default::default(),
-        nullable_binder: Default::default(),
-        binder_array: Default::default(),
-        nullable_binder_array: Default::default(),
-        binder_list: Default::default(),
-        nullable_binder_list: Default::default(),
-        pfd: Default::default(),
-        nullable_pfd: Default::default(),
-        pfd_array: Default::default(),
-        nullable_pfd_array: Default::default(),
-        pfd_list: Default::default(),
-        nullable_pfd_list: Default::default(),
-        parcel: Default::default(),
-        nullable_parcel: Default::default(),
-        parcel_array: Default::default(),
-        nullable_parcel_array: Default::default(),
-        parcel_list: Default::default(),
-        nullable_parcel_list: Default::default(),
+        r#binder: Default::default(),
+        r#nullable_binder: Default::default(),
+        r#binder_array: Default::default(),
+        r#nullable_binder_array: Default::default(),
+        r#binder_list: Default::default(),
+        r#nullable_binder_list: Default::default(),
+        r#pfd: Default::default(),
+        r#nullable_pfd: Default::default(),
+        r#pfd_array: Default::default(),
+        r#nullable_pfd_array: Default::default(),
+        r#pfd_list: Default::default(),
+        r#nullable_pfd_list: Default::default(),
+        r#parcel: Default::default(),
+        r#nullable_parcel: Default::default(),
+        r#parcel_array: Default::default(),
+        r#nullable_parcel_array: Default::default(),
+        r#parcel_list: Default::default(),
+        r#nullable_parcel_list: Default::default(),
       }
     }
   }
-  impl binder::Parcelable for CompilerChecks {
+  impl binder::Parcelable for r#CompilerChecks {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_write(|subparcel| {
-        let __field_ref = self.binder.as_ref().ok_or(binder::StatusCode::UNEXPECTED_NULL)?;
+        let __field_ref = self.r#binder.as_ref().ok_or(binder::StatusCode::UNEXPECTED_NULL)?;
         subparcel.write(__field_ref)?;
-        subparcel.write(&self.nullable_binder)?;
-        subparcel.write(&self.binder_array)?;
-        subparcel.write(&self.nullable_binder_array)?;
-        subparcel.write(&self.binder_list)?;
-        subparcel.write(&self.nullable_binder_list)?;
-        let __field_ref = self.pfd.as_ref().ok_or(binder::StatusCode::UNEXPECTED_NULL)?;
+        subparcel.write(&self.r#nullable_binder)?;
+        subparcel.write(&self.r#binder_array)?;
+        subparcel.write(&self.r#nullable_binder_array)?;
+        subparcel.write(&self.r#binder_list)?;
+        subparcel.write(&self.r#nullable_binder_list)?;
+        let __field_ref = self.r#pfd.as_ref().ok_or(binder::StatusCode::UNEXPECTED_NULL)?;
         subparcel.write(__field_ref)?;
-        subparcel.write(&self.nullable_pfd)?;
-        subparcel.write(&self.pfd_array)?;
-        subparcel.write(&self.nullable_pfd_array)?;
-        subparcel.write(&self.pfd_list)?;
-        subparcel.write(&self.nullable_pfd_list)?;
-        subparcel.write(&self.parcel)?;
-        subparcel.write(&self.nullable_parcel)?;
-        subparcel.write(&self.parcel_array)?;
-        subparcel.write(&self.nullable_parcel_array)?;
-        subparcel.write(&self.parcel_list)?;
-        subparcel.write(&self.nullable_parcel_list)?;
+        subparcel.write(&self.r#nullable_pfd)?;
+        subparcel.write(&self.r#pfd_array)?;
+        subparcel.write(&self.r#nullable_pfd_array)?;
+        subparcel.write(&self.r#pfd_list)?;
+        subparcel.write(&self.r#nullable_pfd_list)?;
+        subparcel.write(&self.r#parcel)?;
+        subparcel.write(&self.r#nullable_parcel)?;
+        subparcel.write(&self.r#parcel_array)?;
+        subparcel.write(&self.r#nullable_parcel_array)?;
+        subparcel.write(&self.r#parcel_list)?;
+        subparcel.write(&self.r#nullable_parcel_list)?;
         Ok(())
       })
     }
     fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_read(|subparcel| {
         if subparcel.has_more_data() {
-          self.binder = Some(subparcel.read()?);
+          self.r#binder = Some(subparcel.read()?);
         }
         if subparcel.has_more_data() {
-          self.nullable_binder = subparcel.read()?;
+          self.r#nullable_binder = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.binder_array = subparcel.read()?;
+          self.r#binder_array = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.nullable_binder_array = subparcel.read()?;
+          self.r#nullable_binder_array = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.binder_list = subparcel.read()?;
+          self.r#binder_list = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.nullable_binder_list = subparcel.read()?;
+          self.r#nullable_binder_list = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.pfd = Some(subparcel.read()?);
+          self.r#pfd = Some(subparcel.read()?);
         }
         if subparcel.has_more_data() {
-          self.nullable_pfd = subparcel.read()?;
+          self.r#nullable_pfd = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.pfd_array = subparcel.read()?;
+          self.r#pfd_array = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.nullable_pfd_array = subparcel.read()?;
+          self.r#nullable_pfd_array = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.pfd_list = subparcel.read()?;
+          self.r#pfd_list = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.nullable_pfd_list = subparcel.read()?;
+          self.r#nullable_pfd_list = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.parcel = subparcel.read()?;
+          self.r#parcel = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.nullable_parcel = subparcel.read()?;
+          self.r#nullable_parcel = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.parcel_array = subparcel.read()?;
+          self.r#parcel_array = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.nullable_parcel_array = subparcel.read()?;
+          self.r#nullable_parcel_array = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.parcel_list = subparcel.read()?;
+          self.r#parcel_list = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.nullable_parcel_list = subparcel.read()?;
+          self.r#nullable_parcel_list = subparcel.read()?;
         }
         Ok(())
       })
     }
   }
-  binder::impl_serialize_for_parcelable!(CompilerChecks);
-  binder::impl_deserialize_for_parcelable!(CompilerChecks);
-  impl binder::binder_impl::ParcelableMetadata for CompilerChecks {
+  binder::impl_serialize_for_parcelable!(r#CompilerChecks);
+  binder::impl_deserialize_for_parcelable!(r#CompilerChecks);
+  impl binder::binder_impl::ParcelableMetadata for r#CompilerChecks {
     fn get_descriptor() -> &'static str { "android.aidl.tests.ITestService.CompilerChecks" }
   }
+  pub mod r#Foo {
+    #![allow(non_upper_case_globals)]
+    #![allow(non_snake_case)]
+    #[allow(unused_imports)] use binder::binder_impl::IBinderInternal;
+    use binder::declare_binder_interface;
+    declare_binder_interface! {
+      IFoo["android.aidl.tests.ITestService.CompilerChecks.Foo"] {
+        native: BnFoo(on_transact),
+        proxy: BpFoo {
+        },
+        async: IFooAsync,
+      }
+    }
+    pub trait IFoo: binder::Interface + Send {
+      fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ITestService.CompilerChecks.Foo" }
+      fn getDefaultImpl() -> IFooDefaultRef where Self: Sized {
+        DEFAULT_IMPL.lock().unwrap().clone()
+      }
+      fn setDefaultImpl(d: IFooDefaultRef) -> IFooDefaultRef where Self: Sized {
+        std::mem::replace(&mut *DEFAULT_IMPL.lock().unwrap(), d)
+      }
+    }
+    pub trait IFooAsync<P>: binder::Interface + Send {
+      fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ITestService.CompilerChecks.Foo" }
+    }
+    #[::async_trait::async_trait]
+    pub trait IFooAsyncServer: binder::Interface + Send {
+      fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ITestService.CompilerChecks.Foo" }
+    }
+    impl BnFoo {
+      /// Create a new async binder service.
+      pub fn new_async_binder<T, R>(inner: T, rt: R, features: binder::BinderFeatures) -> binder::Strong<dyn IFoo>
+      where
+        T: IFooAsyncServer + binder::Interface + Send + Sync + 'static,
+        R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
+      {
+        struct Wrapper<T, R> {
+          _inner: T,
+          _rt: R,
+        }
+        impl<T, R> binder::Interface for Wrapper<T, R> where T: binder::Interface, R: Send + Sync {
+          fn as_binder(&self) -> binder::SpIBinder { self._inner.as_binder() }
+          fn dump(&self, _file: &std::fs::File, _args: &[&std::ffi::CStr]) -> std::result::Result<(), binder::StatusCode> { self._inner.dump(_file, _args) }
+        }
+        impl<T, R> IFoo for Wrapper<T, R>
+        where
+          T: IFooAsyncServer + Send + Sync + 'static,
+          R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
+        {
+        }
+        let wrapped = Wrapper { _inner: inner, _rt: rt };
+        Self::new_binder(wrapped, features)
+      }
+    }
+    pub trait IFooDefault: Send + Sync {
+    }
+    pub mod transactions {
+    }
+    pub type IFooDefaultRef = Option<std::sync::Arc<dyn IFooDefault>>;
+    use lazy_static::lazy_static;
+    lazy_static! {
+      static ref DEFAULT_IMPL: std::sync::Mutex<IFooDefaultRef> = std::sync::Mutex::new(None);
+    }
+    impl BpFoo {
+    }
+    impl IFoo for BpFoo {
+    }
+    impl<P: binder::BinderAsyncPool> IFooAsync<P> for BpFoo {
+    }
+    impl IFoo for binder::binder_impl::Binder<BnFoo> {
+    }
+    fn on_transact(_aidl_service: &dyn IFoo, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
+      match _aidl_code {
+        _ => Err(binder::StatusCode::UNKNOWN_TRANSACTION)
+      }
+    }
+  }
+  pub mod r#HasDeprecated {
+    #[derive(Debug)]
+    pub struct r#HasDeprecated {
+      #[deprecated = "field"]
+      pub r#deprecated: i32,
+    }
+    impl Default for r#HasDeprecated {
+      fn default() -> Self {
+        Self {
+          r#deprecated: 0,
+        }
+      }
+    }
+    impl binder::Parcelable for r#HasDeprecated {
+      fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
+        parcel.sized_write(|subparcel| {
+          subparcel.write(&self.r#deprecated)?;
+          Ok(())
+        })
+      }
+      fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
+        parcel.sized_read(|subparcel| {
+          if subparcel.has_more_data() {
+            self.r#deprecated = subparcel.read()?;
+          }
+          Ok(())
+        })
+      }
+    }
+    binder::impl_serialize_for_parcelable!(r#HasDeprecated);
+    binder::impl_deserialize_for_parcelable!(r#HasDeprecated);
+    impl binder::binder_impl::ParcelableMetadata for r#HasDeprecated {
+      fn get_descriptor() -> &'static str { "android.aidl.tests.ITestService.CompilerChecks.HasDeprecated" }
+    }
+  }
+  pub mod r#UsingHasDeprecated {
+    #[derive(Debug)]
+    pub enum r#UsingHasDeprecated {
+      N(i32),
+      M(crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_14_CompilerChecks_13_HasDeprecated),
+    }
+    impl Default for r#UsingHasDeprecated {
+      fn default() -> Self {
+        Self::N(0)
+      }
+    }
+    impl binder::Parcelable for r#UsingHasDeprecated {
+      fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
+        match self {
+          Self::N(v) => {
+            parcel.write(&0i32)?;
+            parcel.write(v)
+          }
+          Self::M(v) => {
+            parcel.write(&1i32)?;
+            parcel.write(v)
+          }
+        }
+      }
+      fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
+        let tag: i32 = parcel.read()?;
+        match tag {
+          0 => {
+            let value: i32 = parcel.read()?;
+            *self = Self::N(value);
+            Ok(())
+          }
+          1 => {
+            let value: crate::mangled::_7_android_4_aidl_5_tests_12_ITestService_14_CompilerChecks_13_HasDeprecated = parcel.read()?;
+            *self = Self::M(value);
+            Ok(())
+          }
+          _ => {
+            Err(binder::StatusCode::BAD_VALUE)
+          }
+        }
+      }
+    }
+    binder::impl_serialize_for_parcelable!(r#UsingHasDeprecated);
+    binder::impl_deserialize_for_parcelable!(r#UsingHasDeprecated);
+    impl binder::binder_impl::ParcelableMetadata for r#UsingHasDeprecated {
+      fn get_descriptor() -> &'static str { "android.aidl.tests.ITestService.CompilerChecks.UsingHasDeprecated" }
+    }
+    pub mod r#Tag {
+      #![allow(non_upper_case_globals)]
+      use binder::declare_binder_enum;
+      declare_binder_enum! {
+        r#Tag : [i32; 2] {
+          r#n = 0,
+          r#m = 1,
+        }
+      }
+    }
+  }
 }
 pub(crate) mod mangled {
- pub use super::ITestService as _7_android_4_aidl_5_tests_12_ITestService;
- pub use super::Empty::Empty as _7_android_4_aidl_5_tests_12_ITestService_5_Empty;
- pub use super::CompilerChecks::CompilerChecks as _7_android_4_aidl_5_tests_12_ITestService_14_CompilerChecks;
+ pub use super::r#ITestService as _7_android_4_aidl_5_tests_12_ITestService;
+ pub use super::r#Empty::r#Empty as _7_android_4_aidl_5_tests_12_ITestService_5_Empty;
+ pub use super::r#CompilerChecks::r#CompilerChecks as _7_android_4_aidl_5_tests_12_ITestService_14_CompilerChecks;
+ pub use super::r#CompilerChecks::r#Foo::r#IFoo as _7_android_4_aidl_5_tests_12_ITestService_14_CompilerChecks_3_Foo;
+ pub use super::r#CompilerChecks::r#HasDeprecated::r#HasDeprecated as _7_android_4_aidl_5_tests_12_ITestService_14_CompilerChecks_13_HasDeprecated;
+ pub use super::r#CompilerChecks::r#UsingHasDeprecated::r#UsingHasDeprecated as _7_android_4_aidl_5_tests_12_ITestService_14_CompilerChecks_18_UsingHasDeprecated;
+ pub use super::r#CompilerChecks::r#UsingHasDeprecated::r#Tag::r#Tag as _7_android_4_aidl_5_tests_12_ITestService_14_CompilerChecks_18_UsingHasDeprecated_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs.d b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs.d
index 9786dc1..80d694b 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs.d
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs.d
@@ -2,6 +2,8 @@
   system/tools/aidl/tests/android/aidl/tests/ITestService.aidl \
   system/tools/aidl/tests/android/aidl/tests/BackendType.aidl \
   system/tools/aidl/tests/android/aidl/tests/ByteEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/CircularParcelable.aidl \
+  system/tools/aidl/tests/android/aidl/tests/ICircular.aidl \
   system/tools/aidl/tests/android/aidl/tests/INamedCallback.aidl \
   system/tools/aidl/tests/android/aidl/tests/INewName.aidl \
   system/tools/aidl/tests/android/aidl/tests/IOldName.aidl \
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IntEnum.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IntEnum.rs
index 70e71dd..a2bf3cc 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IntEnum.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/IntEnum.rs
@@ -3,14 +3,14 @@
 #![allow(non_upper_case_globals)]
 use binder::declare_binder_enum;
 declare_binder_enum! {
-  IntEnum : [i32; 4] {
-    FOO = 1000,
-    BAR = 2000,
-    BAZ = 2001,
+  r#IntEnum : [i32; 4] {
+    r#FOO = 1000,
+    r#BAR = 2000,
+    r#BAZ = 2001,
     #[deprecated = "do not use this"]
-    QUX = 2002,
+    r#QUX = 2002,
   }
 }
 pub(crate) mod mangled {
- pub use super::IntEnum as _7_android_4_aidl_5_tests_7_IntEnum;
+ pub use super::r#IntEnum as _7_android_4_aidl_5_tests_7_IntEnum;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ListOfInterfaces.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ListOfInterfaces.rs
index 4f5d5c6..7f426ce 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ListOfInterfaces.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ListOfInterfaces.rs
@@ -1,15 +1,15 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct ListOfInterfaces {
+pub struct r#ListOfInterfaces {
 }
-impl Default for ListOfInterfaces {
+impl Default for r#ListOfInterfaces {
   fn default() -> Self {
     Self {
     }
   }
 }
-impl binder::Parcelable for ListOfInterfaces {
+impl binder::Parcelable for r#ListOfInterfaces {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
       Ok(())
@@ -21,12 +21,12 @@
     })
   }
 }
-binder::impl_serialize_for_parcelable!(ListOfInterfaces);
-binder::impl_deserialize_for_parcelable!(ListOfInterfaces);
-impl binder::binder_impl::ParcelableMetadata for ListOfInterfaces {
+binder::impl_serialize_for_parcelable!(r#ListOfInterfaces);
+binder::impl_deserialize_for_parcelable!(r#ListOfInterfaces);
+impl binder::binder_impl::ParcelableMetadata for r#ListOfInterfaces {
   fn get_descriptor() -> &'static str { "android.aidl.tests.ListOfInterfaces" }
 }
-pub mod IEmptyInterface {
+pub mod r#IEmptyInterface {
   #![allow(non_upper_case_globals)]
   #![allow(non_snake_case)]
   #[allow(unused_imports)] use binder::binder_impl::IBinderInternal;
@@ -103,7 +103,7 @@
     }
   }
 }
-pub mod IMyInterface {
+pub mod r#IMyInterface {
   #![allow(non_upper_case_globals)]
   #![allow(non_snake_case)]
   #[allow(unused_imports)] use binder::binder_impl::IBinderInternal;
@@ -118,7 +118,7 @@
   }
   pub trait IMyInterface: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ListOfInterfaces.IMyInterface" }
-    fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>>;
+    fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>>;
     fn getDefaultImpl() -> IMyInterfaceDefaultRef where Self: Sized {
       DEFAULT_IMPL.lock().unwrap().clone()
     }
@@ -128,12 +128,12 @@
   }
   pub trait IMyInterfaceAsync<P>: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ListOfInterfaces.IMyInterface" }
-    fn methodWithInterfaces<'a>(&'a self, _arg_iface: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &'a mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &'a mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>>>;
+    fn r#methodWithInterfaces<'a>(&'a self, _arg_iface: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &'a mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &'a mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>>>;
   }
   #[::async_trait::async_trait]
   pub trait IMyInterfaceAsyncServer: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.ListOfInterfaces.IMyInterface" }
-    async fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>>;
+    async fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>>;
   }
   impl BnMyInterface {
     /// Create a new async binder service.
@@ -155,8 +155,8 @@
         T: IMyInterfaceAsyncServer + Send + Sync + 'static,
         R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
       {
-        fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>> {
-          self._rt.block_on(self._inner.methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_list_in, _arg_iface_list_out, _arg_iface_list_inout, _arg_nullable_iface_list_in, _arg_nullable_iface_list_out, _arg_nullable_iface_list_inout))
+        fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>> {
+          self._rt.block_on(self._inner.r#methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_list_in, _arg_iface_list_out, _arg_iface_list_inout, _arg_nullable_iface_list_in, _arg_nullable_iface_list_out, _arg_nullable_iface_list_inout))
         }
       }
       let wrapped = Wrapper { _inner: inner, _rt: rt };
@@ -164,12 +164,12 @@
     }
   }
   pub trait IMyInterfaceDefault: Send + Sync {
-    fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>> {
+    fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
   }
   pub mod transactions {
-    pub const methodWithInterfaces: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+    pub const r#methodWithInterfaces: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
   }
   pub type IMyInterfaceDefaultRef = Option<std::sync::Arc<dyn IMyInterfaceDefault>>;
   use lazy_static::lazy_static;
@@ -190,7 +190,7 @@
     fn read_response_methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as IMyInterface>::getDefaultImpl() {
-          return _aidl_default_impl.methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_list_in, _arg_iface_list_out, _arg_iface_list_inout, _arg_nullable_iface_list_in, _arg_nullable_iface_list_out, _arg_nullable_iface_list_inout);
+          return _aidl_default_impl.r#methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_list_in, _arg_iface_list_out, _arg_iface_list_inout, _arg_nullable_iface_list_in, _arg_nullable_iface_list_out, _arg_nullable_iface_list_inout);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -205,21 +205,21 @@
     }
   }
   impl IMyInterface for BpMyInterface {
-    fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>> {
+    fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>> {
       let _aidl_data = self.build_parcel_methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_list_in, _arg_iface_list_out, _arg_iface_list_inout, _arg_nullable_iface_list_in, _arg_nullable_iface_list_out, _arg_nullable_iface_list_inout)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::methodWithInterfaces, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#methodWithInterfaces, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_list_in, _arg_iface_list_out, _arg_iface_list_inout, _arg_nullable_iface_list_in, _arg_nullable_iface_list_out, _arg_nullable_iface_list_inout, _aidl_reply)
     }
   }
   impl<P: binder::BinderAsyncPool> IMyInterfaceAsync<P> for BpMyInterface {
-    fn methodWithInterfaces<'a>(&'a self, _arg_iface: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &'a mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &'a mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>>> {
+    fn r#methodWithInterfaces<'a>(&'a self, _arg_iface: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &'a [binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &'a mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &'a mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&'a [Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &'a mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>>> {
       let _aidl_data = match self.build_parcel_methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_list_in, _arg_iface_list_out, _arg_iface_list_inout, _arg_nullable_iface_list_in, _arg_nullable_iface_list_out, _arg_nullable_iface_list_inout) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::methodWithInterfaces, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#methodWithInterfaces, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_list_in, _arg_iface_list_out, _arg_iface_list_inout, _arg_nullable_iface_list_in, _arg_nullable_iface_list_out, _arg_nullable_iface_list_inout, _aidl_reply)
         }
@@ -227,11 +227,11 @@
     }
   }
   impl IMyInterface for binder::binder_impl::Binder<BnMyInterface> {
-    fn methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>> { self.0.methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_list_in, _arg_iface_list_out, _arg_iface_list_inout, _arg_nullable_iface_list_in, _arg_nullable_iface_list_out, _arg_nullable_iface_list_inout) }
+    fn r#methodWithInterfaces(&self, _arg_iface: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>, _arg_nullable_iface: Option<&binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_iface_list_in: &[binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>], _arg_iface_list_out: &mut Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>, _arg_iface_list_inout: &mut Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>, _arg_nullable_iface_list_in: Option<&[Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>]>, _arg_nullable_iface_list_out: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>, _arg_nullable_iface_list_inout: &mut Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>) -> binder::Result<Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>> { self.0.r#methodWithInterfaces(_arg_iface, _arg_nullable_iface, _arg_iface_list_in, _arg_iface_list_out, _arg_iface_list_inout, _arg_nullable_iface_list_in, _arg_nullable_iface_list_out, _arg_nullable_iface_list_inout) }
   }
   fn on_transact(_aidl_service: &dyn IMyInterface, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
     match _aidl_code {
-      transactions::methodWithInterfaces => {
+      transactions::r#methodWithInterfaces => {
         let _arg_iface: binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface> = _aidl_data.read()?;
         let _arg_nullable_iface: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>> = _aidl_data.read()?;
         let _arg_iface_list_in: Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>> = _aidl_data.read()?;
@@ -240,7 +240,7 @@
         let _arg_nullable_iface_list_in: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>> = _aidl_data.read()?;
         let mut _arg_nullable_iface_list_out: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>> = Default::default();
         let mut _arg_nullable_iface_list_inout: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>> = _aidl_data.read()?;
-        let _aidl_return = _aidl_service.methodWithInterfaces(&_arg_iface, _arg_nullable_iface.as_ref(), &_arg_iface_list_in, &mut _arg_iface_list_out, &mut _arg_iface_list_inout, _arg_nullable_iface_list_in.as_deref(), &mut _arg_nullable_iface_list_out, &mut _arg_nullable_iface_list_inout);
+        let _aidl_return = _aidl_service.r#methodWithInterfaces(&_arg_iface, _arg_nullable_iface.as_ref(), &_arg_iface_list_in, &mut _arg_iface_list_out, &mut _arg_iface_list_inout, _arg_nullable_iface_list_in.as_deref(), &mut _arg_nullable_iface_list_out, &mut _arg_nullable_iface_list_inout);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -258,73 +258,73 @@
     }
   }
 }
-pub mod MyParcelable {
+pub mod r#MyParcelable {
   #[derive(Debug)]
-  pub struct MyParcelable {
-    pub iface: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>,
-    pub nullable_iface: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>,
-    pub iface_list: Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>,
-    pub nullable_iface_list: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>,
+  pub struct r#MyParcelable {
+    pub r#iface: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>,
+    pub r#nullable_iface: Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>,
+    pub r#iface_list: Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>,
+    pub r#nullable_iface_list: Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>,
   }
-  impl Default for MyParcelable {
+  impl Default for r#MyParcelable {
     fn default() -> Self {
       Self {
-        iface: Default::default(),
-        nullable_iface: Default::default(),
-        iface_list: Default::default(),
-        nullable_iface_list: Default::default(),
+        r#iface: Default::default(),
+        r#nullable_iface: Default::default(),
+        r#iface_list: Default::default(),
+        r#nullable_iface_list: Default::default(),
       }
     }
   }
-  impl binder::Parcelable for MyParcelable {
+  impl binder::Parcelable for r#MyParcelable {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_write(|subparcel| {
-        let __field_ref = self.iface.as_ref().ok_or(binder::StatusCode::UNEXPECTED_NULL)?;
+        let __field_ref = self.r#iface.as_ref().ok_or(binder::StatusCode::UNEXPECTED_NULL)?;
         subparcel.write(__field_ref)?;
-        subparcel.write(&self.nullable_iface)?;
-        subparcel.write(&self.iface_list)?;
-        subparcel.write(&self.nullable_iface_list)?;
+        subparcel.write(&self.r#nullable_iface)?;
+        subparcel.write(&self.r#iface_list)?;
+        subparcel.write(&self.r#nullable_iface_list)?;
         Ok(())
       })
     }
     fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_read(|subparcel| {
         if subparcel.has_more_data() {
-          self.iface = Some(subparcel.read()?);
+          self.r#iface = Some(subparcel.read()?);
         }
         if subparcel.has_more_data() {
-          self.nullable_iface = subparcel.read()?;
+          self.r#nullable_iface = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.iface_list = subparcel.read()?;
+          self.r#iface_list = subparcel.read()?;
         }
         if subparcel.has_more_data() {
-          self.nullable_iface_list = subparcel.read()?;
+          self.r#nullable_iface_list = subparcel.read()?;
         }
         Ok(())
       })
     }
   }
-  binder::impl_serialize_for_parcelable!(MyParcelable);
-  binder::impl_deserialize_for_parcelable!(MyParcelable);
-  impl binder::binder_impl::ParcelableMetadata for MyParcelable {
+  binder::impl_serialize_for_parcelable!(r#MyParcelable);
+  binder::impl_deserialize_for_parcelable!(r#MyParcelable);
+  impl binder::binder_impl::ParcelableMetadata for r#MyParcelable {
     fn get_descriptor() -> &'static str { "android.aidl.tests.ListOfInterfaces.MyParcelable" }
   }
 }
-pub mod MyUnion {
+pub mod r#MyUnion {
   #[derive(Debug)]
-  pub enum MyUnion {
+  pub enum r#MyUnion {
     Iface(Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>),
     Nullable_iface(Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>),
     Iface_list(Vec<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>),
     Nullable_iface_list(Option<Vec<Option<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface>>>>),
   }
-  impl Default for MyUnion {
+  impl Default for r#MyUnion {
     fn default() -> Self {
       Self::Iface(Default::default())
     }
   }
-  impl binder::Parcelable for MyUnion {
+  impl binder::Parcelable for r#MyUnion {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       match self {
         Self::Iface(v) => {
@@ -375,29 +375,29 @@
       }
     }
   }
-  binder::impl_serialize_for_parcelable!(MyUnion);
-  binder::impl_deserialize_for_parcelable!(MyUnion);
-  impl binder::binder_impl::ParcelableMetadata for MyUnion {
+  binder::impl_serialize_for_parcelable!(r#MyUnion);
+  binder::impl_deserialize_for_parcelable!(r#MyUnion);
+  impl binder::binder_impl::ParcelableMetadata for r#MyUnion {
     fn get_descriptor() -> &'static str { "android.aidl.tests.ListOfInterfaces.MyUnion" }
   }
-  pub mod Tag {
+  pub mod r#Tag {
     #![allow(non_upper_case_globals)]
     use binder::declare_binder_enum;
     declare_binder_enum! {
-      Tag : [i32; 4] {
-        iface = 0,
-        nullable_iface = 1,
-        iface_list = 2,
-        nullable_iface_list = 3,
+      r#Tag : [i32; 4] {
+        r#iface = 0,
+        r#nullable_iface = 1,
+        r#iface_list = 2,
+        r#nullable_iface_list = 3,
       }
     }
   }
 }
 pub(crate) mod mangled {
- pub use super::ListOfInterfaces as _7_android_4_aidl_5_tests_16_ListOfInterfaces;
- pub use super::IEmptyInterface::IEmptyInterface as _7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface;
- pub use super::IMyInterface::IMyInterface as _7_android_4_aidl_5_tests_16_ListOfInterfaces_12_IMyInterface;
- pub use super::MyParcelable::MyParcelable as _7_android_4_aidl_5_tests_16_ListOfInterfaces_12_MyParcelable;
- pub use super::MyUnion::MyUnion as _7_android_4_aidl_5_tests_16_ListOfInterfaces_7_MyUnion;
- pub use super::MyUnion::Tag::Tag as _7_android_4_aidl_5_tests_16_ListOfInterfaces_7_MyUnion_3_Tag;
+ pub use super::r#ListOfInterfaces as _7_android_4_aidl_5_tests_16_ListOfInterfaces;
+ pub use super::r#IEmptyInterface::r#IEmptyInterface as _7_android_4_aidl_5_tests_16_ListOfInterfaces_15_IEmptyInterface;
+ pub use super::r#IMyInterface::r#IMyInterface as _7_android_4_aidl_5_tests_16_ListOfInterfaces_12_IMyInterface;
+ pub use super::r#MyParcelable::r#MyParcelable as _7_android_4_aidl_5_tests_16_ListOfInterfaces_12_MyParcelable;
+ pub use super::r#MyUnion::r#MyUnion as _7_android_4_aidl_5_tests_16_ListOfInterfaces_7_MyUnion;
+ pub use super::r#MyUnion::r#Tag::r#Tag as _7_android_4_aidl_5_tests_16_ListOfInterfaces_7_MyUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/LongEnum.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/LongEnum.rs
index ae93821..75084a4 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/LongEnum.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/LongEnum.rs
@@ -3,12 +3,12 @@
 #![allow(non_upper_case_globals)]
 use binder::declare_binder_enum;
 declare_binder_enum! {
-  LongEnum : [i64; 3] {
-    FOO = 100000000000,
-    BAR = 200000000000,
-    BAZ = 200000000001,
+  r#LongEnum : [i64; 3] {
+    r#FOO = 100000000000,
+    r#BAR = 200000000000,
+    r#BAZ = 200000000001,
   }
 }
 pub(crate) mod mangled {
- pub use super::LongEnum as _7_android_4_aidl_5_tests_8_LongEnum;
+ pub use super::r#LongEnum as _7_android_4_aidl_5_tests_8_LongEnum;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/OtherParcelableForToString.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/OtherParcelableForToString.rs
index 0facb4b..6b415e0 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/OtherParcelableForToString.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/OtherParcelableForToString.rs
@@ -1,37 +1,37 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct OtherParcelableForToString {
-  pub field: String,
+pub struct r#OtherParcelableForToString {
+  pub r#field: String,
 }
-impl Default for OtherParcelableForToString {
+impl Default for r#OtherParcelableForToString {
   fn default() -> Self {
     Self {
-      field: Default::default(),
+      r#field: Default::default(),
     }
   }
 }
-impl binder::Parcelable for OtherParcelableForToString {
+impl binder::Parcelable for r#OtherParcelableForToString {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.field)?;
+      subparcel.write(&self.r#field)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.field = subparcel.read()?;
+        self.r#field = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(OtherParcelableForToString);
-binder::impl_deserialize_for_parcelable!(OtherParcelableForToString);
-impl binder::binder_impl::ParcelableMetadata for OtherParcelableForToString {
+binder::impl_serialize_for_parcelable!(r#OtherParcelableForToString);
+binder::impl_deserialize_for_parcelable!(r#OtherParcelableForToString);
+impl binder::binder_impl::ParcelableMetadata for r#OtherParcelableForToString {
   fn get_descriptor() -> &'static str { "android.aidl.tests.OtherParcelableForToString" }
 }
 pub(crate) mod mangled {
- pub use super::OtherParcelableForToString as _7_android_4_aidl_5_tests_26_OtherParcelableForToString;
+ pub use super::r#OtherParcelableForToString as _7_android_4_aidl_5_tests_26_OtherParcelableForToString;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ParcelableForToString.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ParcelableForToString.rs
index 753ba36..4283a73 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ParcelableForToString.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ParcelableForToString.rs
@@ -1,169 +1,169 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct ParcelableForToString {
-  pub intValue: i32,
-  pub intArray: Vec<i32>,
-  pub longValue: i64,
-  pub longArray: Vec<i64>,
-  pub doubleValue: f64,
-  pub doubleArray: Vec<f64>,
-  pub floatValue: f32,
-  pub floatArray: Vec<f32>,
-  pub byteValue: i8,
-  pub byteArray: Vec<u8>,
-  pub booleanValue: bool,
-  pub booleanArray: Vec<bool>,
-  pub stringValue: String,
-  pub stringArray: Vec<String>,
-  pub stringList: Vec<String>,
-  pub parcelableValue: crate::mangled::_7_android_4_aidl_5_tests_26_OtherParcelableForToString,
-  pub parcelableArray: Vec<crate::mangled::_7_android_4_aidl_5_tests_26_OtherParcelableForToString>,
-  pub enumValue: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum,
-  pub enumArray: Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>,
-  pub nullArray: Vec<String>,
-  pub nullList: Vec<String>,
-  pub parcelableGeneric: i32,
-  pub unionValue: crate::mangled::_7_android_4_aidl_5_tests_5_Union,
+pub struct r#ParcelableForToString {
+  pub r#intValue: i32,
+  pub r#intArray: Vec<i32>,
+  pub r#longValue: i64,
+  pub r#longArray: Vec<i64>,
+  pub r#doubleValue: f64,
+  pub r#doubleArray: Vec<f64>,
+  pub r#floatValue: f32,
+  pub r#floatArray: Vec<f32>,
+  pub r#byteValue: i8,
+  pub r#byteArray: Vec<u8>,
+  pub r#booleanValue: bool,
+  pub r#booleanArray: Vec<bool>,
+  pub r#stringValue: String,
+  pub r#stringArray: Vec<String>,
+  pub r#stringList: Vec<String>,
+  pub r#parcelableValue: crate::mangled::_7_android_4_aidl_5_tests_26_OtherParcelableForToString,
+  pub r#parcelableArray: Vec<crate::mangled::_7_android_4_aidl_5_tests_26_OtherParcelableForToString>,
+  pub r#enumValue: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum,
+  pub r#enumArray: Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>,
+  pub r#nullArray: Vec<String>,
+  pub r#nullList: Vec<String>,
+  pub r#parcelableGeneric: i32,
+  pub r#unionValue: crate::mangled::_7_android_4_aidl_5_tests_5_Union,
 }
-impl Default for ParcelableForToString {
+impl Default for r#ParcelableForToString {
   fn default() -> Self {
     Self {
-      intValue: 0,
-      intArray: Default::default(),
-      longValue: 0,
-      longArray: Default::default(),
-      doubleValue: 0.000000f64,
-      doubleArray: Default::default(),
-      floatValue: 0.000000f32,
-      floatArray: Default::default(),
-      byteValue: 0,
-      byteArray: Default::default(),
-      booleanValue: false,
-      booleanArray: Default::default(),
-      stringValue: Default::default(),
-      stringArray: Default::default(),
-      stringList: Default::default(),
-      parcelableValue: Default::default(),
-      parcelableArray: Default::default(),
-      enumValue: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum::FOO,
-      enumArray: Default::default(),
-      nullArray: Default::default(),
-      nullList: Default::default(),
-      parcelableGeneric: Default::default(),
-      unionValue: Default::default(),
+      r#intValue: 0,
+      r#intArray: Default::default(),
+      r#longValue: 0,
+      r#longArray: Default::default(),
+      r#doubleValue: 0.000000f64,
+      r#doubleArray: Default::default(),
+      r#floatValue: 0.000000f32,
+      r#floatArray: Default::default(),
+      r#byteValue: 0,
+      r#byteArray: Default::default(),
+      r#booleanValue: false,
+      r#booleanArray: Default::default(),
+      r#stringValue: Default::default(),
+      r#stringArray: Default::default(),
+      r#stringList: Default::default(),
+      r#parcelableValue: Default::default(),
+      r#parcelableArray: Default::default(),
+      r#enumValue: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum::FOO,
+      r#enumArray: Default::default(),
+      r#nullArray: Default::default(),
+      r#nullList: Default::default(),
+      r#parcelableGeneric: Default::default(),
+      r#unionValue: Default::default(),
     }
   }
 }
-impl binder::Parcelable for ParcelableForToString {
+impl binder::Parcelable for r#ParcelableForToString {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.intValue)?;
-      subparcel.write(&self.intArray)?;
-      subparcel.write(&self.longValue)?;
-      subparcel.write(&self.longArray)?;
-      subparcel.write(&self.doubleValue)?;
-      subparcel.write(&self.doubleArray)?;
-      subparcel.write(&self.floatValue)?;
-      subparcel.write(&self.floatArray)?;
-      subparcel.write(&self.byteValue)?;
-      subparcel.write(&self.byteArray)?;
-      subparcel.write(&self.booleanValue)?;
-      subparcel.write(&self.booleanArray)?;
-      subparcel.write(&self.stringValue)?;
-      subparcel.write(&self.stringArray)?;
-      subparcel.write(&self.stringList)?;
-      subparcel.write(&self.parcelableValue)?;
-      subparcel.write(&self.parcelableArray)?;
-      subparcel.write(&self.enumValue)?;
-      subparcel.write(&self.enumArray)?;
-      subparcel.write(&self.nullArray)?;
-      subparcel.write(&self.nullList)?;
-      subparcel.write(&self.parcelableGeneric)?;
-      subparcel.write(&self.unionValue)?;
+      subparcel.write(&self.r#intValue)?;
+      subparcel.write(&self.r#intArray)?;
+      subparcel.write(&self.r#longValue)?;
+      subparcel.write(&self.r#longArray)?;
+      subparcel.write(&self.r#doubleValue)?;
+      subparcel.write(&self.r#doubleArray)?;
+      subparcel.write(&self.r#floatValue)?;
+      subparcel.write(&self.r#floatArray)?;
+      subparcel.write(&self.r#byteValue)?;
+      subparcel.write(&self.r#byteArray)?;
+      subparcel.write(&self.r#booleanValue)?;
+      subparcel.write(&self.r#booleanArray)?;
+      subparcel.write(&self.r#stringValue)?;
+      subparcel.write(&self.r#stringArray)?;
+      subparcel.write(&self.r#stringList)?;
+      subparcel.write(&self.r#parcelableValue)?;
+      subparcel.write(&self.r#parcelableArray)?;
+      subparcel.write(&self.r#enumValue)?;
+      subparcel.write(&self.r#enumArray)?;
+      subparcel.write(&self.r#nullArray)?;
+      subparcel.write(&self.r#nullList)?;
+      subparcel.write(&self.r#parcelableGeneric)?;
+      subparcel.write(&self.r#unionValue)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.intValue = subparcel.read()?;
+        self.r#intValue = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intArray = subparcel.read()?;
+        self.r#intArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longValue = subparcel.read()?;
+        self.r#longValue = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longArray = subparcel.read()?;
+        self.r#longArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.doubleValue = subparcel.read()?;
+        self.r#doubleValue = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.doubleArray = subparcel.read()?;
+        self.r#doubleArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.floatValue = subparcel.read()?;
+        self.r#floatValue = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.floatArray = subparcel.read()?;
+        self.r#floatArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteValue = subparcel.read()?;
+        self.r#byteValue = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteArray = subparcel.read()?;
+        self.r#byteArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.booleanValue = subparcel.read()?;
+        self.r#booleanValue = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.booleanArray = subparcel.read()?;
+        self.r#booleanArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.stringValue = subparcel.read()?;
+        self.r#stringValue = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.stringArray = subparcel.read()?;
+        self.r#stringArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.stringList = subparcel.read()?;
+        self.r#stringList = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.parcelableValue = subparcel.read()?;
+        self.r#parcelableValue = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.parcelableArray = subparcel.read()?;
+        self.r#parcelableArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.enumValue = subparcel.read()?;
+        self.r#enumValue = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.enumArray = subparcel.read()?;
+        self.r#enumArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.nullArray = subparcel.read()?;
+        self.r#nullArray = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.nullList = subparcel.read()?;
+        self.r#nullList = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.parcelableGeneric = subparcel.read()?;
+        self.r#parcelableGeneric = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.unionValue = subparcel.read()?;
+        self.r#unionValue = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(ParcelableForToString);
-binder::impl_deserialize_for_parcelable!(ParcelableForToString);
-impl binder::binder_impl::ParcelableMetadata for ParcelableForToString {
+binder::impl_serialize_for_parcelable!(r#ParcelableForToString);
+binder::impl_deserialize_for_parcelable!(r#ParcelableForToString);
+impl binder::binder_impl::ParcelableMetadata for r#ParcelableForToString {
   fn get_descriptor() -> &'static str { "android.aidl.tests.ParcelableForToString" }
 }
 pub(crate) mod mangled {
- pub use super::ParcelableForToString as _7_android_4_aidl_5_tests_21_ParcelableForToString;
+ pub use super::r#ParcelableForToString as _7_android_4_aidl_5_tests_21_ParcelableForToString;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/RecursiveList.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/RecursiveList.rs
index d03f48e..f439d5f 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/RecursiveList.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/RecursiveList.rs
@@ -1,43 +1,43 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct RecursiveList {
-  pub value: i32,
-  pub next: Option<Box<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList>>,
+pub struct r#RecursiveList {
+  pub r#value: i32,
+  pub r#next: Option<Box<crate::mangled::_7_android_4_aidl_5_tests_13_RecursiveList>>,
 }
-impl Default for RecursiveList {
+impl Default for r#RecursiveList {
   fn default() -> Self {
     Self {
-      value: 0,
-      next: Default::default(),
+      r#value: 0,
+      r#next: Default::default(),
     }
   }
 }
-impl binder::Parcelable for RecursiveList {
+impl binder::Parcelable for r#RecursiveList {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.value)?;
-      subparcel.write(&self.next)?;
+      subparcel.write(&self.r#value)?;
+      subparcel.write(&self.r#next)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.value = subparcel.read()?;
+        self.r#value = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.next = subparcel.read()?;
+        self.r#next = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(RecursiveList);
-binder::impl_deserialize_for_parcelable!(RecursiveList);
-impl binder::binder_impl::ParcelableMetadata for RecursiveList {
+binder::impl_serialize_for_parcelable!(r#RecursiveList);
+binder::impl_deserialize_for_parcelable!(r#RecursiveList);
+impl binder::binder_impl::ParcelableMetadata for r#RecursiveList {
   fn get_descriptor() -> &'static str { "android.aidl.tests.RecursiveList" }
 }
 pub(crate) mod mangled {
- pub use super::RecursiveList as _7_android_4_aidl_5_tests_13_RecursiveList;
+ pub use super::r#RecursiveList as _7_android_4_aidl_5_tests_13_RecursiveList;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/StructuredParcelable.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/StructuredParcelable.rs
index df666b3..1c7c016 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/StructuredParcelable.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/StructuredParcelable.rs
@@ -1,375 +1,375 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug, Clone, PartialEq)]
-pub struct StructuredParcelable {
-  pub shouldContainThreeFs: Vec<i32>,
-  pub f: i32,
-  pub shouldBeJerry: String,
-  pub shouldBeByteBar: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum,
-  pub shouldBeIntBar: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum,
-  pub shouldBeLongBar: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum,
-  pub shouldContainTwoByteFoos: Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>,
-  pub shouldContainTwoIntFoos: Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>,
-  pub shouldContainTwoLongFoos: Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>,
-  pub stringDefaultsToFoo: String,
-  pub byteDefaultsToFour: i8,
-  pub intDefaultsToFive: i32,
-  pub longDefaultsToNegativeSeven: i64,
-  pub booleanDefaultsToTrue: bool,
-  pub charDefaultsToC: u16,
-  pub floatDefaultsToPi: f32,
-  pub doubleWithDefault: f64,
-  pub arrayDefaultsTo123: Vec<i32>,
-  pub arrayDefaultsToEmpty: Vec<i32>,
-  pub boolDefault: bool,
-  pub byteDefault: i8,
-  pub intDefault: i32,
-  pub longDefault: i64,
-  pub floatDefault: f32,
-  pub doubleDefault: f64,
-  pub checkDoubleFromFloat: f64,
-  pub checkStringArray1: Vec<String>,
-  pub checkStringArray2: Vec<String>,
-  pub int32_min: i32,
-  pub int32_max: i32,
-  pub int64_max: i64,
-  pub hexInt32_neg_1: i32,
-  pub ibinder: Option<binder::SpIBinder>,
-  pub empty: crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable_5_Empty,
-  pub int8_1: Vec<u8>,
-  pub int32_1: Vec<i32>,
-  pub int64_1: Vec<i64>,
-  pub hexInt32_pos_1: i32,
-  pub hexInt64_pos_1: i32,
-  pub const_exprs_1: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
-  pub const_exprs_2: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
-  pub const_exprs_3: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
-  pub const_exprs_4: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
-  pub const_exprs_5: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
-  pub const_exprs_6: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
-  pub const_exprs_7: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
-  pub const_exprs_8: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
-  pub const_exprs_9: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
-  pub const_exprs_10: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
-  pub addString1: String,
-  pub addString2: String,
-  pub shouldSetBit0AndBit2: i32,
-  pub u: Option<crate::mangled::_7_android_4_aidl_5_tests_5_Union>,
-  pub shouldBeConstS1: Option<crate::mangled::_7_android_4_aidl_5_tests_5_Union>,
-  pub defaultWithFoo: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum,
+pub struct r#StructuredParcelable {
+  pub r#shouldContainThreeFs: Vec<i32>,
+  pub r#f: i32,
+  pub r#shouldBeJerry: String,
+  pub r#shouldBeByteBar: crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum,
+  pub r#shouldBeIntBar: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum,
+  pub r#shouldBeLongBar: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum,
+  pub r#shouldContainTwoByteFoos: Vec<crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum>,
+  pub r#shouldContainTwoIntFoos: Vec<crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum>,
+  pub r#shouldContainTwoLongFoos: Vec<crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum>,
+  pub r#stringDefaultsToFoo: String,
+  pub r#byteDefaultsToFour: i8,
+  pub r#intDefaultsToFive: i32,
+  pub r#longDefaultsToNegativeSeven: i64,
+  pub r#booleanDefaultsToTrue: bool,
+  pub r#charDefaultsToC: u16,
+  pub r#floatDefaultsToPi: f32,
+  pub r#doubleWithDefault: f64,
+  pub r#arrayDefaultsTo123: Vec<i32>,
+  pub r#arrayDefaultsToEmpty: Vec<i32>,
+  pub r#boolDefault: bool,
+  pub r#byteDefault: i8,
+  pub r#intDefault: i32,
+  pub r#longDefault: i64,
+  pub r#floatDefault: f32,
+  pub r#doubleDefault: f64,
+  pub r#checkDoubleFromFloat: f64,
+  pub r#checkStringArray1: Vec<String>,
+  pub r#checkStringArray2: Vec<String>,
+  pub r#int32_min: i32,
+  pub r#int32_max: i32,
+  pub r#int64_max: i64,
+  pub r#hexInt32_neg_1: i32,
+  pub r#ibinder: Option<binder::SpIBinder>,
+  pub r#empty: crate::mangled::_7_android_4_aidl_5_tests_20_StructuredParcelable_5_Empty,
+  pub r#int8_1: Vec<u8>,
+  pub r#int32_1: Vec<i32>,
+  pub r#int64_1: Vec<i64>,
+  pub r#hexInt32_pos_1: i32,
+  pub r#hexInt64_pos_1: i32,
+  pub r#const_exprs_1: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
+  pub r#const_exprs_2: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
+  pub r#const_exprs_3: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
+  pub r#const_exprs_4: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
+  pub r#const_exprs_5: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
+  pub r#const_exprs_6: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
+  pub r#const_exprs_7: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
+  pub r#const_exprs_8: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
+  pub r#const_exprs_9: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
+  pub r#const_exprs_10: crate::mangled::_7_android_4_aidl_5_tests_22_ConstantExpressionEnum,
+  pub r#addString1: String,
+  pub r#addString2: String,
+  pub r#shouldSetBit0AndBit2: i32,
+  pub r#u: Option<crate::mangled::_7_android_4_aidl_5_tests_5_Union>,
+  pub r#shouldBeConstS1: Option<crate::mangled::_7_android_4_aidl_5_tests_5_Union>,
+  pub r#defaultWithFoo: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum,
 }
-pub const BIT0: i32 = 1;
-pub const BIT1: i32 = 2;
-pub const BIT2: i32 = 4;
-impl Default for StructuredParcelable {
+pub const r#BIT0: i32 = 1;
+pub const r#BIT1: i32 = 2;
+pub const r#BIT2: i32 = 4;
+impl Default for r#StructuredParcelable {
   fn default() -> Self {
     Self {
-      shouldContainThreeFs: Default::default(),
-      f: 0,
-      shouldBeJerry: Default::default(),
-      shouldBeByteBar: Default::default(),
-      shouldBeIntBar: Default::default(),
-      shouldBeLongBar: Default::default(),
-      shouldContainTwoByteFoos: Default::default(),
-      shouldContainTwoIntFoos: Default::default(),
-      shouldContainTwoLongFoos: Default::default(),
-      stringDefaultsToFoo: "foo".into(),
-      byteDefaultsToFour: 4,
-      intDefaultsToFive: 5,
-      longDefaultsToNegativeSeven: -7,
-      booleanDefaultsToTrue: true,
-      charDefaultsToC: 'C' as u16,
-      floatDefaultsToPi: 3.140000f32,
-      doubleWithDefault: -314000000000000000.000000f64,
-      arrayDefaultsTo123: vec![1, 2, 3],
-      arrayDefaultsToEmpty: vec![],
-      boolDefault: false,
-      byteDefault: 0,
-      intDefault: 0,
-      longDefault: 0,
-      floatDefault: 0.000000f32,
-      doubleDefault: 0.000000f64,
-      checkDoubleFromFloat: 3.140000f64,
-      checkStringArray1: vec!["a".into(), "b".into()],
-      checkStringArray2: vec!["a".into(), "b".into()],
-      int32_min: -2147483648,
-      int32_max: 2147483647,
-      int64_max: 9223372036854775807,
-      hexInt32_neg_1: -1,
-      ibinder: Default::default(),
-      empty: Default::default(),
-      int8_1: vec![1, 1, 1, 1, 1],
-      int32_1: vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
-      int64_1: vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
-      hexInt32_pos_1: 1,
-      hexInt64_pos_1: 1,
-      const_exprs_1: Default::default(),
-      const_exprs_2: Default::default(),
-      const_exprs_3: Default::default(),
-      const_exprs_4: Default::default(),
-      const_exprs_5: Default::default(),
-      const_exprs_6: Default::default(),
-      const_exprs_7: Default::default(),
-      const_exprs_8: Default::default(),
-      const_exprs_9: Default::default(),
-      const_exprs_10: Default::default(),
-      addString1: "hello world!".into(),
-      addString2: "The quick brown fox jumps over the lazy dog.".into(),
-      shouldSetBit0AndBit2: 0,
-      u: Default::default(),
-      shouldBeConstS1: Default::default(),
-      defaultWithFoo: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum::FOO,
+      r#shouldContainThreeFs: Default::default(),
+      r#f: 0,
+      r#shouldBeJerry: Default::default(),
+      r#shouldBeByteBar: Default::default(),
+      r#shouldBeIntBar: Default::default(),
+      r#shouldBeLongBar: Default::default(),
+      r#shouldContainTwoByteFoos: Default::default(),
+      r#shouldContainTwoIntFoos: Default::default(),
+      r#shouldContainTwoLongFoos: Default::default(),
+      r#stringDefaultsToFoo: "foo".into(),
+      r#byteDefaultsToFour: 4,
+      r#intDefaultsToFive: 5,
+      r#longDefaultsToNegativeSeven: -7,
+      r#booleanDefaultsToTrue: true,
+      r#charDefaultsToC: 'C' as u16,
+      r#floatDefaultsToPi: 3.140000f32,
+      r#doubleWithDefault: -314000000000000000.000000f64,
+      r#arrayDefaultsTo123: vec![1, 2, 3],
+      r#arrayDefaultsToEmpty: vec![],
+      r#boolDefault: false,
+      r#byteDefault: 0,
+      r#intDefault: 0,
+      r#longDefault: 0,
+      r#floatDefault: 0.000000f32,
+      r#doubleDefault: 0.000000f64,
+      r#checkDoubleFromFloat: 3.140000f64,
+      r#checkStringArray1: vec!["a".into(), "b".into()],
+      r#checkStringArray2: vec!["a".into(), "b".into()],
+      r#int32_min: -2147483648,
+      r#int32_max: 2147483647,
+      r#int64_max: 9223372036854775807,
+      r#hexInt32_neg_1: -1,
+      r#ibinder: Default::default(),
+      r#empty: Default::default(),
+      r#int8_1: vec![1, 1, 1, 1, 1],
+      r#int32_1: vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+      r#int64_1: vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+      r#hexInt32_pos_1: 1,
+      r#hexInt64_pos_1: 1,
+      r#const_exprs_1: Default::default(),
+      r#const_exprs_2: Default::default(),
+      r#const_exprs_3: Default::default(),
+      r#const_exprs_4: Default::default(),
+      r#const_exprs_5: Default::default(),
+      r#const_exprs_6: Default::default(),
+      r#const_exprs_7: Default::default(),
+      r#const_exprs_8: Default::default(),
+      r#const_exprs_9: Default::default(),
+      r#const_exprs_10: Default::default(),
+      r#addString1: "hello world!".into(),
+      r#addString2: "The quick brown fox jumps over the lazy dog.".into(),
+      r#shouldSetBit0AndBit2: 0,
+      r#u: Default::default(),
+      r#shouldBeConstS1: Default::default(),
+      r#defaultWithFoo: crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum::FOO,
     }
   }
 }
-impl binder::Parcelable for StructuredParcelable {
+impl binder::Parcelable for r#StructuredParcelable {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.shouldContainThreeFs)?;
-      subparcel.write(&self.f)?;
-      subparcel.write(&self.shouldBeJerry)?;
-      subparcel.write(&self.shouldBeByteBar)?;
-      subparcel.write(&self.shouldBeIntBar)?;
-      subparcel.write(&self.shouldBeLongBar)?;
-      subparcel.write(&self.shouldContainTwoByteFoos)?;
-      subparcel.write(&self.shouldContainTwoIntFoos)?;
-      subparcel.write(&self.shouldContainTwoLongFoos)?;
-      subparcel.write(&self.stringDefaultsToFoo)?;
-      subparcel.write(&self.byteDefaultsToFour)?;
-      subparcel.write(&self.intDefaultsToFive)?;
-      subparcel.write(&self.longDefaultsToNegativeSeven)?;
-      subparcel.write(&self.booleanDefaultsToTrue)?;
-      subparcel.write(&self.charDefaultsToC)?;
-      subparcel.write(&self.floatDefaultsToPi)?;
-      subparcel.write(&self.doubleWithDefault)?;
-      subparcel.write(&self.arrayDefaultsTo123)?;
-      subparcel.write(&self.arrayDefaultsToEmpty)?;
-      subparcel.write(&self.boolDefault)?;
-      subparcel.write(&self.byteDefault)?;
-      subparcel.write(&self.intDefault)?;
-      subparcel.write(&self.longDefault)?;
-      subparcel.write(&self.floatDefault)?;
-      subparcel.write(&self.doubleDefault)?;
-      subparcel.write(&self.checkDoubleFromFloat)?;
-      subparcel.write(&self.checkStringArray1)?;
-      subparcel.write(&self.checkStringArray2)?;
-      subparcel.write(&self.int32_min)?;
-      subparcel.write(&self.int32_max)?;
-      subparcel.write(&self.int64_max)?;
-      subparcel.write(&self.hexInt32_neg_1)?;
-      subparcel.write(&self.ibinder)?;
-      subparcel.write(&self.empty)?;
-      subparcel.write(&self.int8_1)?;
-      subparcel.write(&self.int32_1)?;
-      subparcel.write(&self.int64_1)?;
-      subparcel.write(&self.hexInt32_pos_1)?;
-      subparcel.write(&self.hexInt64_pos_1)?;
-      subparcel.write(&self.const_exprs_1)?;
-      subparcel.write(&self.const_exprs_2)?;
-      subparcel.write(&self.const_exprs_3)?;
-      subparcel.write(&self.const_exprs_4)?;
-      subparcel.write(&self.const_exprs_5)?;
-      subparcel.write(&self.const_exprs_6)?;
-      subparcel.write(&self.const_exprs_7)?;
-      subparcel.write(&self.const_exprs_8)?;
-      subparcel.write(&self.const_exprs_9)?;
-      subparcel.write(&self.const_exprs_10)?;
-      subparcel.write(&self.addString1)?;
-      subparcel.write(&self.addString2)?;
-      subparcel.write(&self.shouldSetBit0AndBit2)?;
-      subparcel.write(&self.u)?;
-      subparcel.write(&self.shouldBeConstS1)?;
-      subparcel.write(&self.defaultWithFoo)?;
+      subparcel.write(&self.r#shouldContainThreeFs)?;
+      subparcel.write(&self.r#f)?;
+      subparcel.write(&self.r#shouldBeJerry)?;
+      subparcel.write(&self.r#shouldBeByteBar)?;
+      subparcel.write(&self.r#shouldBeIntBar)?;
+      subparcel.write(&self.r#shouldBeLongBar)?;
+      subparcel.write(&self.r#shouldContainTwoByteFoos)?;
+      subparcel.write(&self.r#shouldContainTwoIntFoos)?;
+      subparcel.write(&self.r#shouldContainTwoLongFoos)?;
+      subparcel.write(&self.r#stringDefaultsToFoo)?;
+      subparcel.write(&self.r#byteDefaultsToFour)?;
+      subparcel.write(&self.r#intDefaultsToFive)?;
+      subparcel.write(&self.r#longDefaultsToNegativeSeven)?;
+      subparcel.write(&self.r#booleanDefaultsToTrue)?;
+      subparcel.write(&self.r#charDefaultsToC)?;
+      subparcel.write(&self.r#floatDefaultsToPi)?;
+      subparcel.write(&self.r#doubleWithDefault)?;
+      subparcel.write(&self.r#arrayDefaultsTo123)?;
+      subparcel.write(&self.r#arrayDefaultsToEmpty)?;
+      subparcel.write(&self.r#boolDefault)?;
+      subparcel.write(&self.r#byteDefault)?;
+      subparcel.write(&self.r#intDefault)?;
+      subparcel.write(&self.r#longDefault)?;
+      subparcel.write(&self.r#floatDefault)?;
+      subparcel.write(&self.r#doubleDefault)?;
+      subparcel.write(&self.r#checkDoubleFromFloat)?;
+      subparcel.write(&self.r#checkStringArray1)?;
+      subparcel.write(&self.r#checkStringArray2)?;
+      subparcel.write(&self.r#int32_min)?;
+      subparcel.write(&self.r#int32_max)?;
+      subparcel.write(&self.r#int64_max)?;
+      subparcel.write(&self.r#hexInt32_neg_1)?;
+      subparcel.write(&self.r#ibinder)?;
+      subparcel.write(&self.r#empty)?;
+      subparcel.write(&self.r#int8_1)?;
+      subparcel.write(&self.r#int32_1)?;
+      subparcel.write(&self.r#int64_1)?;
+      subparcel.write(&self.r#hexInt32_pos_1)?;
+      subparcel.write(&self.r#hexInt64_pos_1)?;
+      subparcel.write(&self.r#const_exprs_1)?;
+      subparcel.write(&self.r#const_exprs_2)?;
+      subparcel.write(&self.r#const_exprs_3)?;
+      subparcel.write(&self.r#const_exprs_4)?;
+      subparcel.write(&self.r#const_exprs_5)?;
+      subparcel.write(&self.r#const_exprs_6)?;
+      subparcel.write(&self.r#const_exprs_7)?;
+      subparcel.write(&self.r#const_exprs_8)?;
+      subparcel.write(&self.r#const_exprs_9)?;
+      subparcel.write(&self.r#const_exprs_10)?;
+      subparcel.write(&self.r#addString1)?;
+      subparcel.write(&self.r#addString2)?;
+      subparcel.write(&self.r#shouldSetBit0AndBit2)?;
+      subparcel.write(&self.r#u)?;
+      subparcel.write(&self.r#shouldBeConstS1)?;
+      subparcel.write(&self.r#defaultWithFoo)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.shouldContainThreeFs = subparcel.read()?;
+        self.r#shouldContainThreeFs = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.f = subparcel.read()?;
+        self.r#f = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.shouldBeJerry = subparcel.read()?;
+        self.r#shouldBeJerry = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.shouldBeByteBar = subparcel.read()?;
+        self.r#shouldBeByteBar = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.shouldBeIntBar = subparcel.read()?;
+        self.r#shouldBeIntBar = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.shouldBeLongBar = subparcel.read()?;
+        self.r#shouldBeLongBar = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.shouldContainTwoByteFoos = subparcel.read()?;
+        self.r#shouldContainTwoByteFoos = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.shouldContainTwoIntFoos = subparcel.read()?;
+        self.r#shouldContainTwoIntFoos = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.shouldContainTwoLongFoos = subparcel.read()?;
+        self.r#shouldContainTwoLongFoos = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.stringDefaultsToFoo = subparcel.read()?;
+        self.r#stringDefaultsToFoo = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteDefaultsToFour = subparcel.read()?;
+        self.r#byteDefaultsToFour = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intDefaultsToFive = subparcel.read()?;
+        self.r#intDefaultsToFive = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longDefaultsToNegativeSeven = subparcel.read()?;
+        self.r#longDefaultsToNegativeSeven = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.booleanDefaultsToTrue = subparcel.read()?;
+        self.r#booleanDefaultsToTrue = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.charDefaultsToC = subparcel.read()?;
+        self.r#charDefaultsToC = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.floatDefaultsToPi = subparcel.read()?;
+        self.r#floatDefaultsToPi = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.doubleWithDefault = subparcel.read()?;
+        self.r#doubleWithDefault = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.arrayDefaultsTo123 = subparcel.read()?;
+        self.r#arrayDefaultsTo123 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.arrayDefaultsToEmpty = subparcel.read()?;
+        self.r#arrayDefaultsToEmpty = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.boolDefault = subparcel.read()?;
+        self.r#boolDefault = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.byteDefault = subparcel.read()?;
+        self.r#byteDefault = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.intDefault = subparcel.read()?;
+        self.r#intDefault = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.longDefault = subparcel.read()?;
+        self.r#longDefault = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.floatDefault = subparcel.read()?;
+        self.r#floatDefault = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.doubleDefault = subparcel.read()?;
+        self.r#doubleDefault = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.checkDoubleFromFloat = subparcel.read()?;
+        self.r#checkDoubleFromFloat = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.checkStringArray1 = subparcel.read()?;
+        self.r#checkStringArray1 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.checkStringArray2 = subparcel.read()?;
+        self.r#checkStringArray2 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.int32_min = subparcel.read()?;
+        self.r#int32_min = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.int32_max = subparcel.read()?;
+        self.r#int32_max = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.int64_max = subparcel.read()?;
+        self.r#int64_max = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.hexInt32_neg_1 = subparcel.read()?;
+        self.r#hexInt32_neg_1 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.ibinder = subparcel.read()?;
+        self.r#ibinder = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.empty = subparcel.read()?;
+        self.r#empty = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.int8_1 = subparcel.read()?;
+        self.r#int8_1 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.int32_1 = subparcel.read()?;
+        self.r#int32_1 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.int64_1 = subparcel.read()?;
+        self.r#int64_1 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.hexInt32_pos_1 = subparcel.read()?;
+        self.r#hexInt32_pos_1 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.hexInt64_pos_1 = subparcel.read()?;
+        self.r#hexInt64_pos_1 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.const_exprs_1 = subparcel.read()?;
+        self.r#const_exprs_1 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.const_exprs_2 = subparcel.read()?;
+        self.r#const_exprs_2 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.const_exprs_3 = subparcel.read()?;
+        self.r#const_exprs_3 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.const_exprs_4 = subparcel.read()?;
+        self.r#const_exprs_4 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.const_exprs_5 = subparcel.read()?;
+        self.r#const_exprs_5 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.const_exprs_6 = subparcel.read()?;
+        self.r#const_exprs_6 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.const_exprs_7 = subparcel.read()?;
+        self.r#const_exprs_7 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.const_exprs_8 = subparcel.read()?;
+        self.r#const_exprs_8 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.const_exprs_9 = subparcel.read()?;
+        self.r#const_exprs_9 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.const_exprs_10 = subparcel.read()?;
+        self.r#const_exprs_10 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.addString1 = subparcel.read()?;
+        self.r#addString1 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.addString2 = subparcel.read()?;
+        self.r#addString2 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.shouldSetBit0AndBit2 = subparcel.read()?;
+        self.r#shouldSetBit0AndBit2 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.u = subparcel.read()?;
+        self.r#u = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.shouldBeConstS1 = subparcel.read()?;
+        self.r#shouldBeConstS1 = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.defaultWithFoo = subparcel.read()?;
+        self.r#defaultWithFoo = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(StructuredParcelable);
-binder::impl_deserialize_for_parcelable!(StructuredParcelable);
-impl binder::binder_impl::ParcelableMetadata for StructuredParcelable {
+binder::impl_serialize_for_parcelable!(r#StructuredParcelable);
+binder::impl_deserialize_for_parcelable!(r#StructuredParcelable);
+impl binder::binder_impl::ParcelableMetadata for r#StructuredParcelable {
   fn get_descriptor() -> &'static str { "android.aidl.tests.StructuredParcelable" }
 }
-pub mod Empty {
+pub mod r#Empty {
   #[derive(Debug, Clone, PartialEq)]
-  pub struct Empty {
+  pub struct r#Empty {
   }
-  impl Default for Empty {
+  impl Default for r#Empty {
     fn default() -> Self {
       Self {
       }
     }
   }
-  impl binder::Parcelable for Empty {
+  impl binder::Parcelable for r#Empty {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_write(|subparcel| {
         Ok(())
@@ -381,13 +381,13 @@
       })
     }
   }
-  binder::impl_serialize_for_parcelable!(Empty);
-  binder::impl_deserialize_for_parcelable!(Empty);
-  impl binder::binder_impl::ParcelableMetadata for Empty {
+  binder::impl_serialize_for_parcelable!(r#Empty);
+  binder::impl_deserialize_for_parcelable!(r#Empty);
+  impl binder::binder_impl::ParcelableMetadata for r#Empty {
     fn get_descriptor() -> &'static str { "android.aidl.tests.StructuredParcelable.Empty" }
   }
 }
 pub(crate) mod mangled {
- pub use super::StructuredParcelable as _7_android_4_aidl_5_tests_20_StructuredParcelable;
- pub use super::Empty::Empty as _7_android_4_aidl_5_tests_20_StructuredParcelable_5_Empty;
+ pub use super::r#StructuredParcelable as _7_android_4_aidl_5_tests_20_StructuredParcelable;
+ pub use super::r#Empty::r#Empty as _7_android_4_aidl_5_tests_20_StructuredParcelable_5_Empty;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/Union.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/Union.rs
index a2f9295..ab57464 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/Union.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/Union.rs
@@ -1,7 +1,7 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug, Clone, PartialEq)]
-pub enum Union {
+pub enum r#Union {
   Ns(Vec<i32>),
   N(i32),
   M(i32),
@@ -10,13 +10,13 @@
   Ss(Vec<String>),
   Be(crate::mangled::_7_android_4_aidl_5_tests_8_ByteEnum),
 }
-pub const S1: &str = "a string constant in union";
-impl Default for Union {
+pub const r#S1: &str = "a string constant in union";
+impl Default for r#Union {
   fn default() -> Self {
     Self::Ns(vec![])
   }
 }
-impl binder::Parcelable for Union {
+impl binder::Parcelable for r#Union {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     match self {
       Self::Ns(v) => {
@@ -93,27 +93,27 @@
     }
   }
 }
-binder::impl_serialize_for_parcelable!(Union);
-binder::impl_deserialize_for_parcelable!(Union);
-impl binder::binder_impl::ParcelableMetadata for Union {
+binder::impl_serialize_for_parcelable!(r#Union);
+binder::impl_deserialize_for_parcelable!(r#Union);
+impl binder::binder_impl::ParcelableMetadata for r#Union {
   fn get_descriptor() -> &'static str { "android.aidl.tests.Union" }
 }
-pub mod Tag {
+pub mod r#Tag {
   #![allow(non_upper_case_globals)]
   use binder::declare_binder_enum;
   declare_binder_enum! {
-    Tag : [i32; 7] {
-      ns = 0,
-      n = 1,
-      m = 2,
-      s = 3,
-      ibinder = 4,
-      ss = 5,
-      be = 6,
+    r#Tag : [i32; 7] {
+      r#ns = 0,
+      r#n = 1,
+      r#m = 2,
+      r#s = 3,
+      r#ibinder = 4,
+      r#ss = 5,
+      r#be = 6,
     }
   }
 }
 pub(crate) mod mangled {
- pub use super::Union as _7_android_4_aidl_5_tests_5_Union;
- pub use super::Tag::Tag as _7_android_4_aidl_5_tests_5_Union_3_Tag;
+ pub use super::r#Union as _7_android_4_aidl_5_tests_5_Union;
+ pub use super::r#Tag::r#Tag as _7_android_4_aidl_5_tests_5_Union_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/UnionWithFd.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/UnionWithFd.rs
index 49f9f16..bce4d54 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/UnionWithFd.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/UnionWithFd.rs
@@ -1,16 +1,16 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub enum UnionWithFd {
+pub enum r#UnionWithFd {
   Num(i32),
   Pfd(Option<binder::ParcelFileDescriptor>),
 }
-impl Default for UnionWithFd {
+impl Default for r#UnionWithFd {
   fn default() -> Self {
     Self::Num(0)
   }
 }
-impl binder::Parcelable for UnionWithFd {
+impl binder::Parcelable for r#UnionWithFd {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     match self {
       Self::Num(v) => {
@@ -43,22 +43,22 @@
     }
   }
 }
-binder::impl_serialize_for_parcelable!(UnionWithFd);
-binder::impl_deserialize_for_parcelable!(UnionWithFd);
-impl binder::binder_impl::ParcelableMetadata for UnionWithFd {
+binder::impl_serialize_for_parcelable!(r#UnionWithFd);
+binder::impl_deserialize_for_parcelable!(r#UnionWithFd);
+impl binder::binder_impl::ParcelableMetadata for r#UnionWithFd {
   fn get_descriptor() -> &'static str { "android.aidl.tests.UnionWithFd" }
 }
-pub mod Tag {
+pub mod r#Tag {
   #![allow(non_upper_case_globals)]
   use binder::declare_binder_enum;
   declare_binder_enum! {
-    Tag : [i32; 2] {
-      num = 0,
-      pfd = 1,
+    r#Tag : [i32; 2] {
+      r#num = 0,
+      r#pfd = 1,
     }
   }
 }
 pub(crate) mod mangled {
- pub use super::UnionWithFd as _7_android_4_aidl_5_tests_11_UnionWithFd;
- pub use super::Tag::Tag as _7_android_4_aidl_5_tests_11_UnionWithFd_3_Tag;
+ pub use super::r#UnionWithFd as _7_android_4_aidl_5_tests_11_UnionWithFd;
+ pub use super::r#Tag::r#Tag as _7_android_4_aidl_5_tests_11_UnionWithFd_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/ExtendableParcelable.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/ExtendableParcelable.rs
index d91ea32..f99c361 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/ExtendableParcelable.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/ExtendableParcelable.rs
@@ -1,61 +1,61 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct ExtendableParcelable {
-  pub a: i32,
-  pub b: String,
-  pub ext: binder::ParcelableHolder,
-  pub c: i64,
-  pub ext2: binder::ParcelableHolder,
+pub struct r#ExtendableParcelable {
+  pub r#a: i32,
+  pub r#b: String,
+  pub r#ext: binder::ParcelableHolder,
+  pub r#c: i64,
+  pub r#ext2: binder::ParcelableHolder,
 }
-impl Default for ExtendableParcelable {
+impl Default for r#ExtendableParcelable {
   fn default() -> Self {
     Self {
-      a: 0,
-      b: Default::default(),
-      ext: binder::ParcelableHolder::new(binder::binder_impl::Stability::Local),
-      c: 0,
-      ext2: binder::ParcelableHolder::new(binder::binder_impl::Stability::Local),
+      r#a: 0,
+      r#b: Default::default(),
+      r#ext: binder::ParcelableHolder::new(binder::binder_impl::Stability::Local),
+      r#c: 0,
+      r#ext2: binder::ParcelableHolder::new(binder::binder_impl::Stability::Local),
     }
   }
 }
-impl binder::Parcelable for ExtendableParcelable {
+impl binder::Parcelable for r#ExtendableParcelable {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.a)?;
-      subparcel.write(&self.b)?;
-      subparcel.write(&self.ext)?;
-      subparcel.write(&self.c)?;
-      subparcel.write(&self.ext2)?;
+      subparcel.write(&self.r#a)?;
+      subparcel.write(&self.r#b)?;
+      subparcel.write(&self.r#ext)?;
+      subparcel.write(&self.r#c)?;
+      subparcel.write(&self.r#ext2)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.a = subparcel.read()?;
+        self.r#a = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.b = subparcel.read()?;
+        self.r#b = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.ext = subparcel.read()?;
+        self.r#ext = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.c = subparcel.read()?;
+        self.r#c = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.ext2 = subparcel.read()?;
+        self.r#ext2 = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(ExtendableParcelable);
-binder::impl_deserialize_for_parcelable!(ExtendableParcelable);
-impl binder::binder_impl::ParcelableMetadata for ExtendableParcelable {
+binder::impl_serialize_for_parcelable!(r#ExtendableParcelable);
+binder::impl_deserialize_for_parcelable!(r#ExtendableParcelable);
+impl binder::binder_impl::ParcelableMetadata for r#ExtendableParcelable {
   fn get_descriptor() -> &'static str { "android.aidl.tests.extension.ExtendableParcelable" }
 }
 pub(crate) mod mangled {
- pub use super::ExtendableParcelable as _7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable;
+ pub use super::r#ExtendableParcelable as _7_android_4_aidl_5_tests_9_extension_20_ExtendableParcelable;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExt.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExt.rs
index 939c95d..8a5dd8e 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExt.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExt.rs
@@ -1,43 +1,43 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct MyExt {
-  pub a: i32,
-  pub b: String,
+pub struct r#MyExt {
+  pub r#a: i32,
+  pub r#b: String,
 }
-impl Default for MyExt {
+impl Default for r#MyExt {
   fn default() -> Self {
     Self {
-      a: 0,
-      b: Default::default(),
+      r#a: 0,
+      r#b: Default::default(),
     }
   }
 }
-impl binder::Parcelable for MyExt {
+impl binder::Parcelable for r#MyExt {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.a)?;
-      subparcel.write(&self.b)?;
+      subparcel.write(&self.r#a)?;
+      subparcel.write(&self.r#b)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.a = subparcel.read()?;
+        self.r#a = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.b = subparcel.read()?;
+        self.r#b = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(MyExt);
-binder::impl_deserialize_for_parcelable!(MyExt);
-impl binder::binder_impl::ParcelableMetadata for MyExt {
+binder::impl_serialize_for_parcelable!(r#MyExt);
+binder::impl_deserialize_for_parcelable!(r#MyExt);
+impl binder::binder_impl::ParcelableMetadata for r#MyExt {
   fn get_descriptor() -> &'static str { "android.aidl.tests.extension.MyExt" }
 }
 pub(crate) mod mangled {
- pub use super::MyExt as _7_android_4_aidl_5_tests_9_extension_5_MyExt;
+ pub use super::r#MyExt as _7_android_4_aidl_5_tests_9_extension_5_MyExt;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExt2.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExt2.rs
index 27017b9..7b3a737 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExt2.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExt2.rs
@@ -1,49 +1,49 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct MyExt2 {
-  pub a: i32,
-  pub b: crate::mangled::_7_android_4_aidl_5_tests_9_extension_5_MyExt,
-  pub c: String,
+pub struct r#MyExt2 {
+  pub r#a: i32,
+  pub r#b: crate::mangled::_7_android_4_aidl_5_tests_9_extension_5_MyExt,
+  pub r#c: String,
 }
-impl Default for MyExt2 {
+impl Default for r#MyExt2 {
   fn default() -> Self {
     Self {
-      a: 0,
-      b: Default::default(),
-      c: Default::default(),
+      r#a: 0,
+      r#b: Default::default(),
+      r#c: Default::default(),
     }
   }
 }
-impl binder::Parcelable for MyExt2 {
+impl binder::Parcelable for r#MyExt2 {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.a)?;
-      subparcel.write(&self.b)?;
-      subparcel.write(&self.c)?;
+      subparcel.write(&self.r#a)?;
+      subparcel.write(&self.r#b)?;
+      subparcel.write(&self.r#c)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.a = subparcel.read()?;
+        self.r#a = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.b = subparcel.read()?;
+        self.r#b = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.c = subparcel.read()?;
+        self.r#c = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(MyExt2);
-binder::impl_deserialize_for_parcelable!(MyExt2);
-impl binder::binder_impl::ParcelableMetadata for MyExt2 {
+binder::impl_serialize_for_parcelable!(r#MyExt2);
+binder::impl_deserialize_for_parcelable!(r#MyExt2);
+impl binder::binder_impl::ParcelableMetadata for r#MyExt2 {
   fn get_descriptor() -> &'static str { "android.aidl.tests.extension.MyExt2" }
 }
 pub(crate) mod mangled {
- pub use super::MyExt2 as _7_android_4_aidl_5_tests_9_extension_6_MyExt2;
+ pub use super::r#MyExt2 as _7_android_4_aidl_5_tests_9_extension_6_MyExt2;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExtLike.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExtLike.rs
index c698aa3..1abcc72 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExtLike.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/extension/MyExtLike.rs
@@ -1,43 +1,43 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct MyExtLike {
-  pub a: i32,
-  pub b: String,
+pub struct r#MyExtLike {
+  pub r#a: i32,
+  pub r#b: String,
 }
-impl Default for MyExtLike {
+impl Default for r#MyExtLike {
   fn default() -> Self {
     Self {
-      a: 0,
-      b: Default::default(),
+      r#a: 0,
+      r#b: Default::default(),
     }
   }
 }
-impl binder::Parcelable for MyExtLike {
+impl binder::Parcelable for r#MyExtLike {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.a)?;
-      subparcel.write(&self.b)?;
+      subparcel.write(&self.r#a)?;
+      subparcel.write(&self.r#b)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.a = subparcel.read()?;
+        self.r#a = subparcel.read()?;
       }
       if subparcel.has_more_data() {
-        self.b = subparcel.read()?;
+        self.r#b = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(MyExtLike);
-binder::impl_deserialize_for_parcelable!(MyExtLike);
-impl binder::binder_impl::ParcelableMetadata for MyExtLike {
+binder::impl_serialize_for_parcelable!(r#MyExtLike);
+binder::impl_deserialize_for_parcelable!(r#MyExtLike);
+impl binder::binder_impl::ParcelableMetadata for r#MyExtLike {
   fn get_descriptor() -> &'static str { "android.aidl.tests.extension.MyExtLike" }
 }
 pub(crate) mod mangled {
- pub use super::MyExtLike as _7_android_4_aidl_5_tests_9_extension_9_MyExtLike;
+ pub use super::r#MyExtLike as _7_android_4_aidl_5_tests_9_extension_9_MyExtLike;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/DeeplyNested.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/DeeplyNested.rs
index 547ac18..adcd682 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/DeeplyNested.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/DeeplyNested.rs
@@ -1,15 +1,15 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct DeeplyNested {
+pub struct r#DeeplyNested {
 }
-impl Default for DeeplyNested {
+impl Default for r#DeeplyNested {
   fn default() -> Self {
     Self {
     }
   }
 }
-impl binder::Parcelable for DeeplyNested {
+impl binder::Parcelable for r#DeeplyNested {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
       Ok(())
@@ -21,56 +21,56 @@
     })
   }
 }
-binder::impl_serialize_for_parcelable!(DeeplyNested);
-binder::impl_deserialize_for_parcelable!(DeeplyNested);
-impl binder::binder_impl::ParcelableMetadata for DeeplyNested {
+binder::impl_serialize_for_parcelable!(r#DeeplyNested);
+binder::impl_deserialize_for_parcelable!(r#DeeplyNested);
+impl binder::binder_impl::ParcelableMetadata for r#DeeplyNested {
   fn get_descriptor() -> &'static str { "android.aidl.tests.nested.DeeplyNested" }
 }
-pub mod A {
+pub mod r#A {
   #[derive(Debug)]
-  pub struct A {
-    pub e: crate::mangled::_7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B_1_C_1_D_1_E,
+  pub struct r#A {
+    pub r#e: crate::mangled::_7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B_1_C_1_D_1_E,
   }
-  impl Default for A {
+  impl Default for r#A {
     fn default() -> Self {
       Self {
-        e: crate::mangled::_7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B_1_C_1_D_1_E::OK,
+        r#e: crate::mangled::_7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B_1_C_1_D_1_E::OK,
       }
     }
   }
-  impl binder::Parcelable for A {
+  impl binder::Parcelable for r#A {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_write(|subparcel| {
-        subparcel.write(&self.e)?;
+        subparcel.write(&self.r#e)?;
         Ok(())
       })
     }
     fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_read(|subparcel| {
         if subparcel.has_more_data() {
-          self.e = subparcel.read()?;
+          self.r#e = subparcel.read()?;
         }
         Ok(())
       })
     }
   }
-  binder::impl_serialize_for_parcelable!(A);
-  binder::impl_deserialize_for_parcelable!(A);
-  impl binder::binder_impl::ParcelableMetadata for A {
+  binder::impl_serialize_for_parcelable!(r#A);
+  binder::impl_deserialize_for_parcelable!(r#A);
+  impl binder::binder_impl::ParcelableMetadata for r#A {
     fn get_descriptor() -> &'static str { "android.aidl.tests.nested.DeeplyNested.A" }
   }
 }
-pub mod B {
+pub mod r#B {
   #[derive(Debug)]
-  pub struct B {
+  pub struct r#B {
   }
-  impl Default for B {
+  impl Default for r#B {
     fn default() -> Self {
       Self {
       }
     }
   }
-  impl binder::Parcelable for B {
+  impl binder::Parcelable for r#B {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_write(|subparcel| {
         Ok(())
@@ -82,22 +82,22 @@
       })
     }
   }
-  binder::impl_serialize_for_parcelable!(B);
-  binder::impl_deserialize_for_parcelable!(B);
-  impl binder::binder_impl::ParcelableMetadata for B {
+  binder::impl_serialize_for_parcelable!(r#B);
+  binder::impl_deserialize_for_parcelable!(r#B);
+  impl binder::binder_impl::ParcelableMetadata for r#B {
     fn get_descriptor() -> &'static str { "android.aidl.tests.nested.DeeplyNested.B" }
   }
-  pub mod C {
+  pub mod r#C {
     #[derive(Debug)]
-    pub struct C {
+    pub struct r#C {
     }
-    impl Default for C {
+    impl Default for r#C {
       fn default() -> Self {
         Self {
         }
       }
     }
-    impl binder::Parcelable for C {
+    impl binder::Parcelable for r#C {
       fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
         parcel.sized_write(|subparcel| {
           Ok(())
@@ -109,22 +109,22 @@
         })
       }
     }
-    binder::impl_serialize_for_parcelable!(C);
-    binder::impl_deserialize_for_parcelable!(C);
-    impl binder::binder_impl::ParcelableMetadata for C {
+    binder::impl_serialize_for_parcelable!(r#C);
+    binder::impl_deserialize_for_parcelable!(r#C);
+    impl binder::binder_impl::ParcelableMetadata for r#C {
       fn get_descriptor() -> &'static str { "android.aidl.tests.nested.DeeplyNested.B.C" }
     }
-    pub mod D {
+    pub mod r#D {
       #[derive(Debug)]
-      pub struct D {
+      pub struct r#D {
       }
-      impl Default for D {
+      impl Default for r#D {
         fn default() -> Self {
           Self {
           }
         }
       }
-      impl binder::Parcelable for D {
+      impl binder::Parcelable for r#D {
         fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
           parcel.sized_write(|subparcel| {
             Ok(())
@@ -136,17 +136,17 @@
           })
         }
       }
-      binder::impl_serialize_for_parcelable!(D);
-      binder::impl_deserialize_for_parcelable!(D);
-      impl binder::binder_impl::ParcelableMetadata for D {
+      binder::impl_serialize_for_parcelable!(r#D);
+      binder::impl_deserialize_for_parcelable!(r#D);
+      impl binder::binder_impl::ParcelableMetadata for r#D {
         fn get_descriptor() -> &'static str { "android.aidl.tests.nested.DeeplyNested.B.C.D" }
       }
-      pub mod E {
+      pub mod r#E {
         #![allow(non_upper_case_globals)]
         use binder::declare_binder_enum;
         declare_binder_enum! {
-          E : [i8; 1] {
-            OK = 0,
+          r#E : [i8; 1] {
+            r#OK = 0,
           }
         }
       }
@@ -154,10 +154,10 @@
   }
 }
 pub(crate) mod mangled {
- pub use super::DeeplyNested as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested;
- pub use super::A::A as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_A;
- pub use super::B::B as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B;
- pub use super::B::C::C as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B_1_C;
- pub use super::B::C::D::D as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B_1_C_1_D;
- pub use super::B::C::D::E::E as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B_1_C_1_D_1_E;
+ pub use super::r#DeeplyNested as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested;
+ pub use super::r#A::r#A as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_A;
+ pub use super::r#B::r#B as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B;
+ pub use super::r#B::r#C::r#C as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B_1_C;
+ pub use super::r#B::r#C::r#D::r#D as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B_1_C_1_D;
+ pub use super::r#B::r#C::r#D::r#E::r#E as _7_android_4_aidl_5_tests_6_nested_12_DeeplyNested_1_B_1_C_1_D_1_E;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/INestedService.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/INestedService.rs
index 45b76b3..aa747db 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/INestedService.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/INestedService.rs
@@ -14,8 +14,8 @@
 }
 pub trait INestedService: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.nested.INestedService" }
-  fn flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result>;
-  fn flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()>;
+  fn r#flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result>;
+  fn r#flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()>;
   fn getDefaultImpl() -> INestedServiceDefaultRef where Self: Sized {
     DEFAULT_IMPL.lock().unwrap().clone()
   }
@@ -25,14 +25,14 @@
 }
 pub trait INestedServiceAsync<P>: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.nested.INestedService" }
-  fn flipStatus<'a>(&'a self, _arg_p: &'a crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result>>;
-  fn flipStatusWithCallback<'a>(&'a self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::BoxFuture<'a, binder::Result<()>>;
+  fn r#flipStatus<'a>(&'a self, _arg_p: &'a crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result>>;
+  fn r#flipStatusWithCallback<'a>(&'a self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::BoxFuture<'a, binder::Result<()>>;
 }
 #[::async_trait::async_trait]
 pub trait INestedServiceAsyncServer: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.nested.INestedService" }
-  async fn flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result>;
-  async fn flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()>;
+  async fn r#flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result>;
+  async fn r#flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()>;
 }
 impl BnNestedService {
   /// Create a new async binder service.
@@ -54,11 +54,11 @@
       T: INestedServiceAsyncServer + Send + Sync + 'static,
       R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
     {
-      fn flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result> {
-        self._rt.block_on(self._inner.flipStatus(_arg_p))
+      fn r#flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result> {
+        self._rt.block_on(self._inner.r#flipStatus(_arg_p))
       }
-      fn flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()> {
-        self._rt.block_on(self._inner.flipStatusWithCallback(_arg_status, _arg_cb))
+      fn r#flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#flipStatusWithCallback(_arg_status, _arg_cb))
       }
     }
     let wrapped = Wrapper { _inner: inner, _rt: rt };
@@ -66,16 +66,16 @@
   }
 }
 pub trait INestedServiceDefault: Send + Sync {
-  fn flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result> {
+  fn r#flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()> {
+  fn r#flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
 }
 pub mod transactions {
-  pub const flipStatus: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
-  pub const flipStatusWithCallback: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 1;
+  pub const r#flipStatus: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+  pub const r#flipStatusWithCallback: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 1;
 }
 pub type INestedServiceDefaultRef = Option<std::sync::Arc<dyn INestedServiceDefault>>;
 use lazy_static::lazy_static;
@@ -91,7 +91,7 @@
   fn read_response_flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as INestedService>::getDefaultImpl() {
-        return _aidl_default_impl.flipStatus(_arg_p);
+        return _aidl_default_impl.r#flipStatus(_arg_p);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -109,7 +109,7 @@
   fn read_response_flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as INestedService>::getDefaultImpl() {
-        return _aidl_default_impl.flipStatusWithCallback(_arg_status, _arg_cb);
+        return _aidl_default_impl.r#flipStatusWithCallback(_arg_status, _arg_cb);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -119,39 +119,39 @@
   }
 }
 impl INestedService for BpNestedService {
-  fn flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result> {
+  fn r#flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result> {
     let _aidl_data = self.build_parcel_flipStatus(_arg_p)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::flipStatus, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#flipStatus, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_flipStatus(_arg_p, _aidl_reply)
   }
-  fn flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()> {
+  fn r#flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_flipStatusWithCallback(_arg_status, _arg_cb)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::flipStatusWithCallback, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#flipStatusWithCallback, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_flipStatusWithCallback(_arg_status, _arg_cb, _aidl_reply)
   }
 }
 impl<P: binder::BinderAsyncPool> INestedServiceAsync<P> for BpNestedService {
-  fn flipStatus<'a>(&'a self, _arg_p: &'a crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result>> {
+  fn r#flipStatus<'a>(&'a self, _arg_p: &'a crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result>> {
     let _aidl_data = match self.build_parcel_flipStatus(_arg_p) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::flipStatus, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#flipStatus, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_flipStatus(_arg_p, _aidl_reply)
       }
     )
   }
-  fn flipStatusWithCallback<'a>(&'a self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::BoxFuture<'a, binder::Result<()>> {
+  fn r#flipStatusWithCallback<'a>(&'a self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &'a binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::BoxFuture<'a, binder::Result<()>> {
     let _aidl_data = match self.build_parcel_flipStatusWithCallback(_arg_status, _arg_cb) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::flipStatusWithCallback, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#flipStatusWithCallback, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_flipStatusWithCallback(_arg_status, _arg_cb, _aidl_reply)
       }
@@ -159,14 +159,14 @@
   }
 }
 impl INestedService for binder::binder_impl::Binder<BnNestedService> {
-  fn flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result> { self.0.flipStatus(_arg_p) }
-  fn flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()> { self.0.flipStatusWithCallback(_arg_status, _arg_cb) }
+  fn r#flipStatus(&self, _arg_p: &crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result> { self.0.r#flipStatus(_arg_p) }
+  fn r#flipStatusWithCallback(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _arg_cb: &binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback>) -> binder::Result<()> { self.0.r#flipStatusWithCallback(_arg_status, _arg_cb) }
 }
 fn on_transact(_aidl_service: &dyn INestedService, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
   match _aidl_code {
-    transactions::flipStatus => {
+    transactions::r#flipStatus => {
       let _arg_p: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.flipStatus(&_arg_p);
+      let _aidl_return = _aidl_service.r#flipStatus(&_arg_p);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -176,10 +176,10 @@
       }
       Ok(())
     }
-    transactions::flipStatusWithCallback => {
+    transactions::r#flipStatusWithCallback => {
       let _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status = _aidl_data.read()?;
       let _arg_cb: binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.flipStatusWithCallback(_arg_status, &_arg_cb);
+      let _aidl_return = _aidl_service.r#flipStatusWithCallback(_arg_status, &_arg_cb);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -191,41 +191,41 @@
     _ => Err(binder::StatusCode::UNKNOWN_TRANSACTION)
   }
 }
-pub mod Result {
+pub mod r#Result {
   #[derive(Debug, PartialEq)]
-  pub struct Result {
-    pub status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status,
+  pub struct r#Result {
+    pub r#status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status,
   }
-  impl Default for Result {
+  impl Default for r#Result {
     fn default() -> Self {
       Self {
-        status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status::OK,
+        r#status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status::OK,
       }
     }
   }
-  impl binder::Parcelable for Result {
+  impl binder::Parcelable for r#Result {
     fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_write(|subparcel| {
-        subparcel.write(&self.status)?;
+        subparcel.write(&self.r#status)?;
         Ok(())
       })
     }
     fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
       parcel.sized_read(|subparcel| {
         if subparcel.has_more_data() {
-          self.status = subparcel.read()?;
+          self.r#status = subparcel.read()?;
         }
         Ok(())
       })
     }
   }
-  binder::impl_serialize_for_parcelable!(Result);
-  binder::impl_deserialize_for_parcelable!(Result);
-  impl binder::binder_impl::ParcelableMetadata for Result {
+  binder::impl_serialize_for_parcelable!(r#Result);
+  binder::impl_deserialize_for_parcelable!(r#Result);
+  impl binder::binder_impl::ParcelableMetadata for r#Result {
     fn get_descriptor() -> &'static str { "android.aidl.tests.nested.INestedService.Result" }
   }
 }
-pub mod ICallback {
+pub mod r#ICallback {
   #![allow(non_upper_case_globals)]
   #![allow(non_snake_case)]
   #[allow(unused_imports)] use binder::binder_impl::IBinderInternal;
@@ -240,7 +240,7 @@
   }
   pub trait ICallback: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.nested.INestedService.ICallback" }
-    fn done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()>;
+    fn r#done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()>;
     fn getDefaultImpl() -> ICallbackDefaultRef where Self: Sized {
       DEFAULT_IMPL.lock().unwrap().clone()
     }
@@ -250,12 +250,12 @@
   }
   pub trait ICallbackAsync<P>: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.nested.INestedService.ICallback" }
-    fn done<'a>(&'a self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::BoxFuture<'a, binder::Result<()>>;
+    fn r#done<'a>(&'a self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::BoxFuture<'a, binder::Result<()>>;
   }
   #[::async_trait::async_trait]
   pub trait ICallbackAsyncServer: binder::Interface + Send {
     fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.tests.nested.INestedService.ICallback" }
-    async fn done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()>;
+    async fn r#done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()>;
   }
   impl BnCallback {
     /// Create a new async binder service.
@@ -277,8 +277,8 @@
         T: ICallbackAsyncServer + Send + Sync + 'static,
         R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
       {
-        fn done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()> {
-          self._rt.block_on(self._inner.done(_arg_status))
+        fn r#done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()> {
+          self._rt.block_on(self._inner.r#done(_arg_status))
         }
       }
       let wrapped = Wrapper { _inner: inner, _rt: rt };
@@ -286,12 +286,12 @@
     }
   }
   pub trait ICallbackDefault: Send + Sync {
-    fn done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()> {
+    fn r#done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()> {
       Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
     }
   }
   pub mod transactions {
-    pub const done: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+    pub const r#done: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
   }
   pub type ICallbackDefaultRef = Option<std::sync::Arc<dyn ICallbackDefault>>;
   use lazy_static::lazy_static;
@@ -307,7 +307,7 @@
     fn read_response_done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
       if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
         if let Some(_aidl_default_impl) = <Self as ICallback>::getDefaultImpl() {
-          return _aidl_default_impl.done(_arg_status);
+          return _aidl_default_impl.r#done(_arg_status);
         }
       }
       let _aidl_reply = _aidl_reply?;
@@ -317,21 +317,21 @@
     }
   }
   impl ICallback for BpCallback {
-    fn done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()> {
+    fn r#done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()> {
       let _aidl_data = self.build_parcel_done(_arg_status)?;
-      let _aidl_reply = self.binder.submit_transact(transactions::done, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+      let _aidl_reply = self.binder.submit_transact(transactions::r#done, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
       self.read_response_done(_arg_status, _aidl_reply)
     }
   }
   impl<P: binder::BinderAsyncPool> ICallbackAsync<P> for BpCallback {
-    fn done<'a>(&'a self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::BoxFuture<'a, binder::Result<()>> {
+    fn r#done<'a>(&'a self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::BoxFuture<'a, binder::Result<()>> {
       let _aidl_data = match self.build_parcel_done(_arg_status) {
         Ok(_aidl_data) => _aidl_data,
         Err(err) => return Box::pin(std::future::ready(Err(err))),
       };
       let binder = self.binder.clone();
       P::spawn(
-        move || binder.submit_transact(transactions::done, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+        move || binder.submit_transact(transactions::r#done, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
         move |_aidl_reply| async move {
           self.read_response_done(_arg_status, _aidl_reply)
         }
@@ -339,13 +339,13 @@
     }
   }
   impl ICallback for binder::binder_impl::Binder<BnCallback> {
-    fn done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()> { self.0.done(_arg_status) }
+    fn r#done(&self, _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status) -> binder::Result<()> { self.0.r#done(_arg_status) }
   }
   fn on_transact(_aidl_service: &dyn ICallback, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
     match _aidl_code {
-      transactions::done => {
+      transactions::r#done => {
         let _arg_status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status = _aidl_data.read()?;
-        let _aidl_return = _aidl_service.done(_arg_status);
+        let _aidl_return = _aidl_service.r#done(_arg_status);
         match &_aidl_return {
           Ok(_aidl_return) => {
             _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -359,7 +359,7 @@
   }
 }
 pub(crate) mod mangled {
- pub use super::INestedService as _7_android_4_aidl_5_tests_6_nested_14_INestedService;
- pub use super::Result::Result as _7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result;
- pub use super::ICallback::ICallback as _7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback;
+ pub use super::r#INestedService as _7_android_4_aidl_5_tests_6_nested_14_INestedService;
+ pub use super::r#Result::r#Result as _7_android_4_aidl_5_tests_6_nested_14_INestedService_6_Result;
+ pub use super::r#ICallback::r#ICallback as _7_android_4_aidl_5_tests_6_nested_14_INestedService_9_ICallback;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/ParcelableWithNested.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/ParcelableWithNested.rs
index d160d8b..4cff721 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/ParcelableWithNested.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/nested/ParcelableWithNested.rs
@@ -1,48 +1,48 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct ParcelableWithNested {
-  pub status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status,
+pub struct r#ParcelableWithNested {
+  pub r#status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status,
 }
-impl Default for ParcelableWithNested {
+impl Default for r#ParcelableWithNested {
   fn default() -> Self {
     Self {
-      status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status::OK,
+      r#status: crate::mangled::_7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status::OK,
     }
   }
 }
-impl binder::Parcelable for ParcelableWithNested {
+impl binder::Parcelable for r#ParcelableWithNested {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
-      subparcel.write(&self.status)?;
+      subparcel.write(&self.r#status)?;
       Ok(())
     })
   }
   fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_read(|subparcel| {
       if subparcel.has_more_data() {
-        self.status = subparcel.read()?;
+        self.r#status = subparcel.read()?;
       }
       Ok(())
     })
   }
 }
-binder::impl_serialize_for_parcelable!(ParcelableWithNested);
-binder::impl_deserialize_for_parcelable!(ParcelableWithNested);
-impl binder::binder_impl::ParcelableMetadata for ParcelableWithNested {
+binder::impl_serialize_for_parcelable!(r#ParcelableWithNested);
+binder::impl_deserialize_for_parcelable!(r#ParcelableWithNested);
+impl binder::binder_impl::ParcelableMetadata for r#ParcelableWithNested {
   fn get_descriptor() -> &'static str { "android.aidl.tests.nested.ParcelableWithNested" }
 }
-pub mod Status {
+pub mod r#Status {
   #![allow(non_upper_case_globals)]
   use binder::declare_binder_enum;
   declare_binder_enum! {
-    Status : [i8; 2] {
-      OK = 0,
-      NOT_OK = 1,
+    r#Status : [i8; 2] {
+      r#OK = 0,
+      r#NOT_OK = 1,
     }
   }
 }
 pub(crate) mod mangled {
- pub use super::ParcelableWithNested as _7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested;
- pub use super::Status::Status as _7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status;
+ pub use super::r#ParcelableWithNested as _7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested;
+ pub use super::r#Status::r#Status as _7_android_4_aidl_5_tests_6_nested_20_ParcelableWithNested_6_Status;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs
index 6f26dcc..dbec338 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs
@@ -1,18 +1,18 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug, Clone, PartialEq)]
-pub enum EnumUnion {
+pub enum r#EnumUnion {
   IntEnum(crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum),
   LongEnum(crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum),
   #[deprecated = "do not use this"]
   DeprecatedField(i32),
 }
-impl Default for EnumUnion {
+impl Default for r#EnumUnion {
   fn default() -> Self {
     Self::IntEnum(crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum::FOO)
   }
 }
-impl binder::Parcelable for EnumUnion {
+impl binder::Parcelable for r#EnumUnion {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     match self {
       Self::IntEnum(v) => {
@@ -53,24 +53,24 @@
     }
   }
 }
-binder::impl_serialize_for_parcelable!(EnumUnion);
-binder::impl_deserialize_for_parcelable!(EnumUnion);
-impl binder::binder_impl::ParcelableMetadata for EnumUnion {
+binder::impl_serialize_for_parcelable!(r#EnumUnion);
+binder::impl_deserialize_for_parcelable!(r#EnumUnion);
+impl binder::binder_impl::ParcelableMetadata for r#EnumUnion {
   fn get_descriptor() -> &'static str { "android.aidl.tests.unions.EnumUnion" }
 }
-pub mod Tag {
+pub mod r#Tag {
   #![allow(non_upper_case_globals)]
   use binder::declare_binder_enum;
   declare_binder_enum! {
-    Tag : [i32; 3] {
-      intEnum = 0,
-      longEnum = 1,
+    r#Tag : [i32; 3] {
+      r#intEnum = 0,
+      r#longEnum = 1,
       #[deprecated = "do not use this"]
-      deprecatedField = 2,
+      r#deprecatedField = 2,
     }
   }
 }
 pub(crate) mod mangled {
- pub use super::EnumUnion as _7_android_4_aidl_5_tests_6_unions_9_EnumUnion;
- pub use super::Tag::Tag as _7_android_4_aidl_5_tests_6_unions_9_EnumUnion_3_Tag;
+ pub use super::r#EnumUnion as _7_android_4_aidl_5_tests_6_unions_9_EnumUnion;
+ pub use super::r#Tag::r#Tag as _7_android_4_aidl_5_tests_6_unions_9_EnumUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/UnionInUnion.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/UnionInUnion.rs
index 511f44c..cfc7372 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/UnionInUnion.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/UnionInUnion.rs
@@ -1,16 +1,16 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug, Clone, PartialEq)]
-pub enum UnionInUnion {
+pub enum r#UnionInUnion {
   First(crate::mangled::_7_android_4_aidl_5_tests_6_unions_9_EnumUnion),
   Second(i32),
 }
-impl Default for UnionInUnion {
+impl Default for r#UnionInUnion {
   fn default() -> Self {
     Self::First(Default::default())
   }
 }
-impl binder::Parcelable for UnionInUnion {
+impl binder::Parcelable for r#UnionInUnion {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     match self {
       Self::First(v) => {
@@ -42,22 +42,22 @@
     }
   }
 }
-binder::impl_serialize_for_parcelable!(UnionInUnion);
-binder::impl_deserialize_for_parcelable!(UnionInUnion);
-impl binder::binder_impl::ParcelableMetadata for UnionInUnion {
+binder::impl_serialize_for_parcelable!(r#UnionInUnion);
+binder::impl_deserialize_for_parcelable!(r#UnionInUnion);
+impl binder::binder_impl::ParcelableMetadata for r#UnionInUnion {
   fn get_descriptor() -> &'static str { "android.aidl.tests.unions.UnionInUnion" }
 }
-pub mod Tag {
+pub mod r#Tag {
   #![allow(non_upper_case_globals)]
   use binder::declare_binder_enum;
   declare_binder_enum! {
-    Tag : [i32; 2] {
-      first = 0,
-      second = 1,
+    r#Tag : [i32; 2] {
+      r#first = 0,
+      r#second = 1,
     }
   }
 }
 pub(crate) mod mangled {
- pub use super::UnionInUnion as _7_android_4_aidl_5_tests_6_unions_12_UnionInUnion;
- pub use super::Tag::Tag as _7_android_4_aidl_5_tests_6_unions_12_UnionInUnion_3_Tag;
+ pub use super::r#UnionInUnion as _7_android_4_aidl_5_tests_6_unions_12_UnionInUnion;
+ pub use super::r#Tag::r#Tag as _7_android_4_aidl_5_tests_6_unions_12_UnionInUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/android/aidl/versioned/tests/IFooInterface.cpp b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/android/aidl/versioned/tests/IFooInterface.cpp
index a3aea73..b53f6b5 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/android/aidl/versioned/tests/IFooInterface.cpp
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/android/aidl/versioned/tests/IFooInterface.cpp
@@ -29,6 +29,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IFooInterface::originalApi::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -58,6 +59,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IFooInterface::acceptUnionAndReturnString::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -95,6 +97,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IFooInterface::ignoreParcelablesAndRepeatInt::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -148,6 +151,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IFooInterface::returnsLengthOfFooArray::cppClient");
   _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
   if (((_aidl_ret_status) != (::android::OK))) {
     goto _aidl_error;
@@ -242,6 +246,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IFooInterface::originalApi::cppServer");
     ::android::binder::Status _aidl_status(originalApi());
     _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
     if (((_aidl_ret_status) != (::android::OK))) {
@@ -260,6 +265,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IFooInterface::acceptUnionAndReturnString::cppServer");
     _aidl_ret_status = _aidl_data.readParcelable(&in_u);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -293,6 +299,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IFooInterface::ignoreParcelablesAndRepeatInt::cppServer");
     _aidl_ret_status = _aidl_data.readParcelable(&in_inFoo);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -339,6 +346,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::IFooInterface::returnsLengthOfFooArray::cppServer");
     _aidl_ret_status = _aidl_data.readParcelableVector(&in_foos);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BazUnion.h b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BazUnion.h
index 25e0d16..6d14f9c 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BazUnion.h
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BazUnion.h
@@ -96,8 +96,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.versioned.tests.BazUnion");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.versioned.tests.BazUnion");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BnFooInterface.h b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BnFooInterface.h
index fd65571..606866b 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BnFooInterface.h
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BnFooInterface.h
@@ -2,6 +2,9 @@
 
 #include <binder/IInterface.h>
 #include <android/aidl/versioned/tests/IFooInterface.h>
+#include <android/aidl/versioned/tests/BnFooInterface.h>
+#include <binder/Delegate.h>
+
 
 namespace android {
 namespace aidl {
@@ -25,6 +28,7 @@
 public:
   explicit IFooInterfaceDelegator(const ::android::sp<IFooInterface> &impl) : _aidl_delegate(impl) {}
 
+  ::android::sp<IFooInterface> getImpl() { return _aidl_delegate; }
   ::android::binder::Status originalApi() override {
     return _aidl_delegate->originalApi();
   }
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/Foo.h b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/Foo.h
index 951277e..983dd7f 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/Foo.h
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/Foo.h
@@ -34,8 +34,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.versioned.tests.Foo");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.versioned.tests.Foo");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/IFooInterface.h b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/IFooInterface.h
index c9c1799..0ed26cb 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/IFooInterface.h
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/IFooInterface.h
@@ -5,12 +5,16 @@
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
 #include <cstdint>
 #include <string>
 #include <utils/String16.h>
 #include <utils/StrongPointer.h>
 #include <vector>
 
+namespace android::aidl::versioned::tests {
+class Foo;
+}  // namespace android::aidl::versioned::tests
 namespace android {
 namespace aidl {
 namespace versioned {
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-ndk-source/gen/include/aidl/android/aidl/versioned/tests/IFooInterface.h b/tests/golden_output/aidl-test-versioned-interface-V1-ndk-source/gen/include/aidl/android/aidl/versioned/tests/IFooInterface.h
index 7f366cf..6e42688 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-ndk-source/gen/include/aidl/android/aidl/versioned/tests/IFooInterface.h
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-ndk-source/gen/include/aidl/android/aidl/versioned/tests/IFooInterface.h
@@ -12,6 +12,9 @@
 #include <android/binder_stability.h>
 #endif  // BINDER_STABILITY_SUPPORT
 
+namespace aidl::android::aidl::versioned::tests {
+class Foo;
+}  // namespace aidl::android::aidl::versioned::tests
 namespace aidl {
 namespace android {
 namespace aidl {
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/BazUnion.rs b/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/BazUnion.rs
index b60ff88..267922b 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/BazUnion.rs
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/BazUnion.rs
@@ -1,15 +1,15 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub enum BazUnion {
+pub enum r#BazUnion {
   IntNum(i32),
 }
-impl Default for BazUnion {
+impl Default for r#BazUnion {
   fn default() -> Self {
     Self::IntNum(0)
   }
 }
-impl binder::Parcelable for BazUnion {
+impl binder::Parcelable for r#BazUnion {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     match self {
       Self::IntNum(v) => {
@@ -32,21 +32,21 @@
     }
   }
 }
-binder::impl_serialize_for_parcelable!(BazUnion);
-binder::impl_deserialize_for_parcelable!(BazUnion);
-impl binder::binder_impl::ParcelableMetadata for BazUnion {
+binder::impl_serialize_for_parcelable!(r#BazUnion);
+binder::impl_deserialize_for_parcelable!(r#BazUnion);
+impl binder::binder_impl::ParcelableMetadata for r#BazUnion {
   fn get_descriptor() -> &'static str { "android.aidl.versioned.tests.BazUnion" }
 }
-pub mod Tag {
+pub mod r#Tag {
   #![allow(non_upper_case_globals)]
   use binder::declare_binder_enum;
   declare_binder_enum! {
-    Tag : [i32; 1] {
-      intNum = 0,
+    r#Tag : [i32; 1] {
+      r#intNum = 0,
     }
   }
 }
 pub(crate) mod mangled {
- pub use super::BazUnion as _7_android_4_aidl_9_versioned_5_tests_8_BazUnion;
- pub use super::Tag::Tag as _7_android_4_aidl_9_versioned_5_tests_8_BazUnion_3_Tag;
+ pub use super::r#BazUnion as _7_android_4_aidl_9_versioned_5_tests_8_BazUnion;
+ pub use super::r#Tag::r#Tag as _7_android_4_aidl_9_versioned_5_tests_8_BazUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/Foo.rs b/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/Foo.rs
index 30926b7..4c5e493 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/Foo.rs
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/Foo.rs
@@ -1,15 +1,15 @@
 #![forbid(unsafe_code)]
 #![rustfmt::skip]
 #[derive(Debug)]
-pub struct Foo {
+pub struct r#Foo {
 }
-impl Default for Foo {
+impl Default for r#Foo {
   fn default() -> Self {
     Self {
     }
   }
 }
-impl binder::Parcelable for Foo {
+impl binder::Parcelable for r#Foo {
   fn write_to_parcel(&self, parcel: &mut binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
     parcel.sized_write(|subparcel| {
       Ok(())
@@ -21,11 +21,11 @@
     })
   }
 }
-binder::impl_serialize_for_parcelable!(Foo);
-binder::impl_deserialize_for_parcelable!(Foo);
-impl binder::binder_impl::ParcelableMetadata for Foo {
+binder::impl_serialize_for_parcelable!(r#Foo);
+binder::impl_deserialize_for_parcelable!(r#Foo);
+impl binder::binder_impl::ParcelableMetadata for r#Foo {
   fn get_descriptor() -> &'static str { "android.aidl.versioned.tests.Foo" }
 }
 pub(crate) mod mangled {
- pub use super::Foo as _7_android_4_aidl_9_versioned_5_tests_3_Foo;
+ pub use super::r#Foo as _7_android_4_aidl_9_versioned_5_tests_3_Foo;
 }
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/IFooInterface.rs b/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/IFooInterface.rs
index 9898f1e..1395a77 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/IFooInterface.rs
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/IFooInterface.rs
@@ -16,14 +16,14 @@
 }
 pub trait IFooInterface: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.versioned.tests.IFooInterface" }
-  fn originalApi(&self) -> binder::Result<()>;
-  fn acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String>;
-  fn ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32>;
-  fn returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32>;
-  fn getInterfaceVersion(&self) -> binder::Result<i32> {
+  fn r#originalApi(&self) -> binder::Result<()>;
+  fn r#acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String>;
+  fn r#ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32>;
+  fn r#returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32>;
+  fn r#getInterfaceVersion(&self) -> binder::Result<i32> {
     Ok(VERSION)
   }
-  fn getInterfaceHash(&self) -> binder::Result<String> {
+  fn r#getInterfaceHash(&self) -> binder::Result<String> {
     Ok(HASH.into())
   }
   fn getDefaultImpl() -> IFooInterfaceDefaultRef where Self: Sized {
@@ -35,24 +35,24 @@
 }
 pub trait IFooInterfaceAsync<P>: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.versioned.tests.IFooInterface" }
-  fn originalApi<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<()>>;
-  fn acceptUnionAndReturnString<'a>(&'a self, _arg_u: &'a crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::BoxFuture<'a, binder::Result<String>>;
-  fn ignoreParcelablesAndRepeatInt<'a>(&'a self, _arg_inFoo: &'a crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &'a mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &'a mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::BoxFuture<'a, binder::Result<i32>>;
-  fn returnsLengthOfFooArray<'a>(&'a self, _arg_foos: &'a [crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::BoxFuture<'a, binder::Result<i32>>;
-  fn getInterfaceVersion<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<i32>> {
+  fn r#originalApi<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<()>>;
+  fn r#acceptUnionAndReturnString<'a>(&'a self, _arg_u: &'a crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::BoxFuture<'a, binder::Result<String>>;
+  fn r#ignoreParcelablesAndRepeatInt<'a>(&'a self, _arg_inFoo: &'a crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &'a mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &'a mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::BoxFuture<'a, binder::Result<i32>>;
+  fn r#returnsLengthOfFooArray<'a>(&'a self, _arg_foos: &'a [crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::BoxFuture<'a, binder::Result<i32>>;
+  fn r#getInterfaceVersion<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<i32>> {
     Box::pin(async move { Ok(VERSION) })
   }
-  fn getInterfaceHash<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>> {
+  fn r#getInterfaceHash<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>> {
     Box::pin(async move { Ok(HASH.into()) })
   }
 }
 #[::async_trait::async_trait]
 pub trait IFooInterfaceAsyncServer: binder::Interface + Send {
   fn get_descriptor() -> &'static str where Self: Sized { "android.aidl.versioned.tests.IFooInterface" }
-  async fn originalApi(&self) -> binder::Result<()>;
-  async fn acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String>;
-  async fn ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32>;
-  async fn returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32>;
+  async fn r#originalApi(&self) -> binder::Result<()>;
+  async fn r#acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String>;
+  async fn r#ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32>;
+  async fn r#returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32>;
 }
 impl BnFooInterface {
   /// Create a new async binder service.
@@ -74,17 +74,17 @@
       T: IFooInterfaceAsyncServer + Send + Sync + 'static,
       R: binder::binder_impl::BinderAsyncRuntime + Send + Sync + 'static,
     {
-      fn originalApi(&self) -> binder::Result<()> {
-        self._rt.block_on(self._inner.originalApi())
+      fn r#originalApi(&self) -> binder::Result<()> {
+        self._rt.block_on(self._inner.r#originalApi())
       }
-      fn acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String> {
-        self._rt.block_on(self._inner.acceptUnionAndReturnString(_arg_u))
+      fn r#acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String> {
+        self._rt.block_on(self._inner.r#acceptUnionAndReturnString(_arg_u))
       }
-      fn ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32> {
-        self._rt.block_on(self._inner.ignoreParcelablesAndRepeatInt(_arg_inFoo, _arg_inoutFoo, _arg_outFoo, _arg_value))
+      fn r#ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32> {
+        self._rt.block_on(self._inner.r#ignoreParcelablesAndRepeatInt(_arg_inFoo, _arg_inoutFoo, _arg_outFoo, _arg_value))
       }
-      fn returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32> {
-        self._rt.block_on(self._inner.returnsLengthOfFooArray(_arg_foos))
+      fn r#returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32> {
+        self._rt.block_on(self._inner.r#returnsLengthOfFooArray(_arg_foos))
       }
     }
     let wrapped = Wrapper { _inner: inner, _rt: rt };
@@ -92,26 +92,26 @@
   }
 }
 pub trait IFooInterfaceDefault: Send + Sync {
-  fn originalApi(&self) -> binder::Result<()> {
+  fn r#originalApi(&self) -> binder::Result<()> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String> {
+  fn r#acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32> {
+  fn r#ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32> {
+  fn r#returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
 }
 pub mod transactions {
-  pub const originalApi: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
-  pub const acceptUnionAndReturnString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 1;
-  pub const ignoreParcelablesAndRepeatInt: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 2;
-  pub const returnsLengthOfFooArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 3;
-  pub const getInterfaceVersion: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 16777214;
-  pub const getInterfaceHash: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 16777213;
+  pub const r#originalApi: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 0;
+  pub const r#acceptUnionAndReturnString: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 1;
+  pub const r#ignoreParcelablesAndRepeatInt: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 2;
+  pub const r#returnsLengthOfFooArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 3;
+  pub const r#getInterfaceVersion: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 16777214;
+  pub const r#getInterfaceHash: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 16777213;
 }
 pub type IFooInterfaceDefaultRef = Option<std::sync::Arc<dyn IFooInterfaceDefault>>;
 use lazy_static::lazy_static;
@@ -128,7 +128,7 @@
   fn read_response_originalApi(&self, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<()> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as IFooInterface>::getDefaultImpl() {
-        return _aidl_default_impl.originalApi();
+        return _aidl_default_impl.r#originalApi();
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -144,7 +144,7 @@
   fn read_response_acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<String> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as IFooInterface>::getDefaultImpl() {
-        return _aidl_default_impl.acceptUnionAndReturnString(_arg_u);
+        return _aidl_default_impl.r#acceptUnionAndReturnString(_arg_u);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -163,7 +163,7 @@
   fn read_response_ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32, _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<i32> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as IFooInterface>::getDefaultImpl() {
-        return _aidl_default_impl.ignoreParcelablesAndRepeatInt(_arg_inFoo, _arg_inoutFoo, _arg_outFoo, _arg_value);
+        return _aidl_default_impl.r#ignoreParcelablesAndRepeatInt(_arg_inFoo, _arg_inoutFoo, _arg_outFoo, _arg_value);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -182,7 +182,7 @@
   fn read_response_returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<i32> {
     if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
       if let Some(_aidl_default_impl) = <Self as IFooInterface>::getDefaultImpl() {
-        return _aidl_default_impl.returnsLengthOfFooArray(_arg_foos);
+        return _aidl_default_impl.r#returnsLengthOfFooArray(_arg_foos);
       }
     }
     let _aidl_reply = _aidl_reply?;
@@ -217,34 +217,34 @@
   }
 }
 impl IFooInterface for BpFooInterface {
-  fn originalApi(&self) -> binder::Result<()> {
+  fn r#originalApi(&self) -> binder::Result<()> {
     let _aidl_data = self.build_parcel_originalApi()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::originalApi, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#originalApi, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_originalApi(_aidl_reply)
   }
-  fn acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String> {
+  fn r#acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String> {
     let _aidl_data = self.build_parcel_acceptUnionAndReturnString(_arg_u)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::acceptUnionAndReturnString, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#acceptUnionAndReturnString, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_acceptUnionAndReturnString(_arg_u, _aidl_reply)
   }
-  fn ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32> {
+  fn r#ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32> {
     let _aidl_data = self.build_parcel_ignoreParcelablesAndRepeatInt(_arg_inFoo, _arg_inoutFoo, _arg_outFoo, _arg_value)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::ignoreParcelablesAndRepeatInt, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#ignoreParcelablesAndRepeatInt, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_ignoreParcelablesAndRepeatInt(_arg_inFoo, _arg_inoutFoo, _arg_outFoo, _arg_value, _aidl_reply)
   }
-  fn returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32> {
+  fn r#returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32> {
     let _aidl_data = self.build_parcel_returnsLengthOfFooArray(_arg_foos)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::returnsLengthOfFooArray, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#returnsLengthOfFooArray, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_returnsLengthOfFooArray(_arg_foos, _aidl_reply)
   }
-  fn getInterfaceVersion(&self) -> binder::Result<i32> {
+  fn r#getInterfaceVersion(&self) -> binder::Result<i32> {
     let _aidl_version = self.cached_version.load(std::sync::atomic::Ordering::Relaxed);
     if _aidl_version != -1 { return Ok(_aidl_version); }
     let _aidl_data = self.build_parcel_getInterfaceVersion()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::getInterfaceVersion, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#getInterfaceVersion, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_getInterfaceVersion(_aidl_reply)
   }
-  fn getInterfaceHash(&self) -> binder::Result<String> {
+  fn r#getInterfaceHash(&self) -> binder::Result<String> {
     {
       let _aidl_hash_lock = self.cached_hash.lock().unwrap();
       if let Some(ref _aidl_hash) = *_aidl_hash_lock {
@@ -252,64 +252,64 @@
       }
     }
     let _aidl_data = self.build_parcel_getInterfaceHash()?;
-    let _aidl_reply = self.binder.submit_transact(transactions::getInterfaceHash, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
+    let _aidl_reply = self.binder.submit_transact(transactions::r#getInterfaceHash, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_getInterfaceHash(_aidl_reply)
   }
 }
 impl<P: binder::BinderAsyncPool> IFooInterfaceAsync<P> for BpFooInterface {
-  fn originalApi<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<()>> {
+  fn r#originalApi<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<()>> {
     let _aidl_data = match self.build_parcel_originalApi() {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::originalApi, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#originalApi, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_originalApi(_aidl_reply)
       }
     )
   }
-  fn acceptUnionAndReturnString<'a>(&'a self, _arg_u: &'a crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::BoxFuture<'a, binder::Result<String>> {
+  fn r#acceptUnionAndReturnString<'a>(&'a self, _arg_u: &'a crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::BoxFuture<'a, binder::Result<String>> {
     let _aidl_data = match self.build_parcel_acceptUnionAndReturnString(_arg_u) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::acceptUnionAndReturnString, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#acceptUnionAndReturnString, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_acceptUnionAndReturnString(_arg_u, _aidl_reply)
       }
     )
   }
-  fn ignoreParcelablesAndRepeatInt<'a>(&'a self, _arg_inFoo: &'a crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &'a mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &'a mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::BoxFuture<'a, binder::Result<i32>> {
+  fn r#ignoreParcelablesAndRepeatInt<'a>(&'a self, _arg_inFoo: &'a crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &'a mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &'a mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::BoxFuture<'a, binder::Result<i32>> {
     let _aidl_data = match self.build_parcel_ignoreParcelablesAndRepeatInt(_arg_inFoo, _arg_inoutFoo, _arg_outFoo, _arg_value) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::ignoreParcelablesAndRepeatInt, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#ignoreParcelablesAndRepeatInt, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_ignoreParcelablesAndRepeatInt(_arg_inFoo, _arg_inoutFoo, _arg_outFoo, _arg_value, _aidl_reply)
       }
     )
   }
-  fn returnsLengthOfFooArray<'a>(&'a self, _arg_foos: &'a [crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::BoxFuture<'a, binder::Result<i32>> {
+  fn r#returnsLengthOfFooArray<'a>(&'a self, _arg_foos: &'a [crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::BoxFuture<'a, binder::Result<i32>> {
     let _aidl_data = match self.build_parcel_returnsLengthOfFooArray(_arg_foos) {
       Ok(_aidl_data) => _aidl_data,
       Err(err) => return Box::pin(std::future::ready(Err(err))),
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::returnsLengthOfFooArray, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#returnsLengthOfFooArray, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_returnsLengthOfFooArray(_arg_foos, _aidl_reply)
       }
     )
   }
-  fn getInterfaceVersion<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<i32>> {
+  fn r#getInterfaceVersion<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<i32>> {
     let _aidl_version = self.cached_version.load(std::sync::atomic::Ordering::Relaxed);
     if _aidl_version != -1 { return Box::pin(std::future::ready(Ok(_aidl_version))); }
     let _aidl_data = match self.build_parcel_getInterfaceVersion() {
@@ -318,13 +318,13 @@
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::getInterfaceVersion, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#getInterfaceVersion, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_getInterfaceVersion(_aidl_reply)
       }
     )
   }
-  fn getInterfaceHash<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>> {
+  fn r#getInterfaceHash<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<String>> {
     {
       let _aidl_hash_lock = self.cached_hash.lock().unwrap();
       if let Some(ref _aidl_hash) = *_aidl_hash_lock {
@@ -337,7 +337,7 @@
     };
     let binder = self.binder.clone();
     P::spawn(
-      move || binder.submit_transact(transactions::getInterfaceHash, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
+      move || binder.submit_transact(transactions::r#getInterfaceHash, _aidl_data, binder::binder_impl::FLAG_PRIVATE_LOCAL),
       move |_aidl_reply| async move {
         self.read_response_getInterfaceHash(_aidl_reply)
       }
@@ -345,17 +345,17 @@
   }
 }
 impl IFooInterface for binder::binder_impl::Binder<BnFooInterface> {
-  fn originalApi(&self) -> binder::Result<()> { self.0.originalApi() }
-  fn acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String> { self.0.acceptUnionAndReturnString(_arg_u) }
-  fn ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32> { self.0.ignoreParcelablesAndRepeatInt(_arg_inFoo, _arg_inoutFoo, _arg_outFoo, _arg_value) }
-  fn returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32> { self.0.returnsLengthOfFooArray(_arg_foos) }
-  fn getInterfaceVersion(&self) -> binder::Result<i32> { self.0.getInterfaceVersion() }
-  fn getInterfaceHash(&self) -> binder::Result<String> { self.0.getInterfaceHash() }
+  fn r#originalApi(&self) -> binder::Result<()> { self.0.r#originalApi() }
+  fn r#acceptUnionAndReturnString(&self, _arg_u: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion) -> binder::Result<String> { self.0.r#acceptUnionAndReturnString(_arg_u) }
+  fn r#ignoreParcelablesAndRepeatInt(&self, _arg_inFoo: &crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_inoutFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_outFoo: &mut crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo, _arg_value: i32) -> binder::Result<i32> { self.0.r#ignoreParcelablesAndRepeatInt(_arg_inFoo, _arg_inoutFoo, _arg_outFoo, _arg_value) }
+  fn r#returnsLengthOfFooArray(&self, _arg_foos: &[crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo]) -> binder::Result<i32> { self.0.r#returnsLengthOfFooArray(_arg_foos) }
+  fn r#getInterfaceVersion(&self) -> binder::Result<i32> { self.0.r#getInterfaceVersion() }
+  fn r#getInterfaceHash(&self) -> binder::Result<String> { self.0.r#getInterfaceHash() }
 }
 fn on_transact(_aidl_service: &dyn IFooInterface, _aidl_code: binder::binder_impl::TransactionCode, _aidl_data: &binder::binder_impl::BorrowedParcel<'_>, _aidl_reply: &mut binder::binder_impl::BorrowedParcel<'_>) -> std::result::Result<(), binder::StatusCode> {
   match _aidl_code {
-    transactions::originalApi => {
-      let _aidl_return = _aidl_service.originalApi();
+    transactions::r#originalApi => {
+      let _aidl_return = _aidl_service.r#originalApi();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -364,9 +364,9 @@
       }
       Ok(())
     }
-    transactions::acceptUnionAndReturnString => {
+    transactions::r#acceptUnionAndReturnString => {
       let _arg_u: crate::mangled::_7_android_4_aidl_9_versioned_5_tests_8_BazUnion = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.acceptUnionAndReturnString(&_arg_u);
+      let _aidl_return = _aidl_service.r#acceptUnionAndReturnString(&_arg_u);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -376,12 +376,12 @@
       }
       Ok(())
     }
-    transactions::ignoreParcelablesAndRepeatInt => {
+    transactions::r#ignoreParcelablesAndRepeatInt => {
       let _arg_inFoo: crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo = _aidl_data.read()?;
       let mut _arg_inoutFoo: crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo = _aidl_data.read()?;
       let mut _arg_outFoo: crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo = Default::default();
       let _arg_value: i32 = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.ignoreParcelablesAndRepeatInt(&_arg_inFoo, &mut _arg_inoutFoo, &mut _arg_outFoo, _arg_value);
+      let _aidl_return = _aidl_service.r#ignoreParcelablesAndRepeatInt(&_arg_inFoo, &mut _arg_inoutFoo, &mut _arg_outFoo, _arg_value);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -393,9 +393,9 @@
       }
       Ok(())
     }
-    transactions::returnsLengthOfFooArray => {
+    transactions::r#returnsLengthOfFooArray => {
       let _arg_foos: Vec<crate::mangled::_7_android_4_aidl_9_versioned_5_tests_3_Foo> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.returnsLengthOfFooArray(&_arg_foos);
+      let _aidl_return = _aidl_service.r#returnsLengthOfFooArray(&_arg_foos);
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -405,8 +405,8 @@
       }
       Ok(())
     }
-    transactions::getInterfaceVersion => {
-      let _aidl_return = _aidl_service.getInterfaceVersion();
+    transactions::r#getInterfaceVersion => {
+      let _aidl_return = _aidl_service.r#getInterfaceVersion();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -416,8 +416,8 @@
       }
       Ok(())
     }
-    transactions::getInterfaceHash => {
-      let _aidl_return = _aidl_service.getInterfaceHash();
+    transactions::r#getInterfaceHash => {
+      let _aidl_return = _aidl_service.r#getInterfaceHash();
       match &_aidl_return {
         Ok(_aidl_return) => {
           _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
@@ -431,5 +431,5 @@
   }
 }
 pub(crate) mod mangled {
- pub use super::IFooInterface as _7_android_4_aidl_9_versioned_5_tests_13_IFooInterface;
+ pub use super::r#IFooInterface as _7_android_4_aidl_9_versioned_5_tests_13_IFooInterface;
 }
diff --git a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/android/aidl/loggable/ILoggableInterface.cpp b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/android/aidl/loggable/ILoggableInterface.cpp
index 676d78a..01113bf 100644
--- a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/android/aidl/loggable/ILoggableInterface.cpp
+++ b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/android/aidl/loggable/ILoggableInterface.cpp
@@ -30,7 +30,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
-  ::android::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ILoggableInterface::LogThis::cppClient");
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ILoggableInterface::LogThis::cppClient");
   BpLoggableInterface::TransactionLog _transaction_log;
   if (BpLoggableInterface::logFunc != nullptr) {
     _transaction_log.input_args.emplace_back("boolValue", ::android::internal::ToString(boolValue));
@@ -285,7 +285,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
-    ::android::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ILoggableInterface::LogThis::cppServer");
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ILoggableInterface::LogThis::cppServer");
     _aidl_ret_status = _aidl_data.readBool(&in_boolValue);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
@@ -530,7 +530,7 @@
   ::android::Parcel _aidl_reply;
   ::android::status_t _aidl_ret_status = ::android::OK;
   ::android::binder::Status _aidl_status;
-  ::android::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ISub::Log::cppClient");
+  ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ISub::Log::cppClient");
   ILoggableInterface::BpSub::TransactionLog _transaction_log;
   if (ILoggableInterface::BpSub::logFunc != nullptr) {
     _transaction_log.input_args.emplace_back("value", ::android::internal::ToString(value));
@@ -604,7 +604,7 @@
       _aidl_ret_status = ::android::BAD_TYPE;
       break;
     }
-    ::android::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ISub::Log::cppServer");
+    ::android::binder::ScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "AIDL::cpp::ISub::Log::cppServer");
     _aidl_ret_status = _aidl_data.readInt32(&in_value);
     if (((_aidl_ret_status) != (::android::OK))) {
       break;
diff --git a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/BnLoggableInterface.h b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/BnLoggableInterface.h
index e075951..46df081 100644
--- a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/BnLoggableInterface.h
+++ b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/BnLoggableInterface.h
@@ -4,6 +4,10 @@
 #include <android/aidl/loggable/ILoggableInterface.h>
 #include <functional>
 #include <android/binder_to_string.h>
+#include <android/aidl/loggable/BnLoggableInterface.h>
+#include <android/aidl/loggable/ILoggableInterface.h>
+#include <binder/Delegate.h>
+
 
 namespace android {
 namespace aidl {
@@ -34,6 +38,7 @@
 public:
   explicit ILoggableInterfaceDelegator(const ::android::sp<ILoggableInterface> &impl) : _aidl_delegate(impl) {}
 
+  ::android::sp<ILoggableInterface> getImpl() { return _aidl_delegate; }
   ::android::binder::Status LogThis(bool boolValue, ::std::vector<bool>* boolArray, int8_t byteValue, ::std::vector<uint8_t>* byteArray, char16_t charValue, ::std::vector<char16_t>* charArray, int32_t intValue, ::std::vector<int32_t>* intArray, int64_t longValue, ::std::vector<int64_t>* longArray, float floatValue, ::std::vector<float>* floatArray, double doubleValue, ::std::vector<double>* doubleArray, const ::android::String16& stringValue, ::std::vector<::android::String16>* stringArray, ::std::vector<::android::String16>* listValue, const ::android::aidl::loggable::Data& dataValue, const ::android::sp<::android::IBinder>& binderValue, ::std::optional<::android::os::ParcelFileDescriptor>* pfdValue, ::std::vector<::android::os::ParcelFileDescriptor>* pfdArray, ::std::vector<::android::String16>* _aidl_return) override {
     return _aidl_delegate->LogThis(boolValue, boolArray, byteValue, byteArray, charValue, charArray, intValue, intArray, longValue, longArray, floatValue, floatArray, doubleValue, doubleArray, stringValue, stringArray, listValue, dataValue, binderValue, pfdValue, pfdArray, _aidl_return);
   }
diff --git a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Data.h b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Data.h
index 61b590e..61d71e0 100644
--- a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Data.h
+++ b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Data.h
@@ -41,8 +41,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.loggable.Data");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.loggable.Data");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/ILoggableInterface.h b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/ILoggableInterface.h
index 350b2d2..98527e5 100644
--- a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/ILoggableInterface.h
+++ b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/ILoggableInterface.h
@@ -2,18 +2,22 @@
 
 #include <android/aidl/loggable/Data.h>
 #include <android/binder_to_string.h>
+#include <binder/Delegate.h>
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/ParcelFileDescriptor.h>
 #include <binder/Status.h>
+#include <binder/Trace.h>
 #include <cstdint>
 #include <functional>
 #include <optional>
 #include <utils/String16.h>
 #include <utils/StrongPointer.h>
-#include <utils/Trace.h>
 #include <vector>
 
+namespace android::aidl::loggable {
+class Data;
+}  // namespace android::aidl::loggable
 namespace android {
 namespace aidl {
 namespace loggable {
@@ -88,6 +92,7 @@
   public:
     explicit ISubDelegator(const ::android::sp<ISub> &impl) : _aidl_delegate(impl) {}
 
+    ::android::sp<ISub> getImpl() { return _aidl_delegate; }
     ::android::binder::Status Log(int32_t value) override {
       return _aidl_delegate->Log(value);
     }
diff --git a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Union.h b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Union.h
index 9b67e56..903dfb4 100644
--- a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Union.h
+++ b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Union.h
@@ -97,8 +97,8 @@
   ::android::status_t readFromParcel(const ::android::Parcel* _aidl_parcel) final;
   ::android::status_t writeToParcel(::android::Parcel* _aidl_parcel) const final;
   static const ::android::String16& getParcelableDescriptor() {
-    static const ::android::StaticString16 DESCIPTOR (u"android.aidl.loggable.Union");
-    return DESCIPTOR;
+    static const ::android::StaticString16 DESCRIPTOR (u"android.aidl.loggable.Union");
+    return DESCRIPTOR;
   }
   inline std::string toString() const {
     std::ostringstream os;
diff --git a/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java b/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java
index ee02a61..c8ab851 100644
--- a/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java
+++ b/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java
@@ -43,6 +43,26 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_LogThis:
+        {
+          return "LogThis";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -61,69 +81,63 @@
       {
         case TRANSACTION_LogThis:
         {
-          try {
-            android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, "AIDL::java::ILoggableInterface::LogThis::server");
-            boolean _arg0;
-            _arg0 = data.readBoolean();
-            boolean[] _arg1;
-            _arg1 = data.createBooleanArray();
-            byte _arg2;
-            _arg2 = data.readByte();
-            byte[] _arg3;
-            _arg3 = data.createByteArray();
-            char _arg4;
-            _arg4 = (char)data.readInt();
-            char[] _arg5;
-            _arg5 = data.createCharArray();
-            int _arg6;
-            _arg6 = data.readInt();
-            int[] _arg7;
-            _arg7 = data.createIntArray();
-            long _arg8;
-            _arg8 = data.readLong();
-            long[] _arg9;
-            _arg9 = data.createLongArray();
-            float _arg10;
-            _arg10 = data.readFloat();
-            float[] _arg11;
-            _arg11 = data.createFloatArray();
-            double _arg12;
-            _arg12 = data.readDouble();
-            double[] _arg13;
-            _arg13 = data.createDoubleArray();
-            java.lang.String _arg14;
-            _arg14 = data.readString();
-            java.lang.String[] _arg15;
-            _arg15 = data.createStringArray();
-            java.util.List<java.lang.String> _arg16;
-            _arg16 = data.createStringArrayList();
-            android.aidl.loggable.Data _arg17;
-            _arg17 = data.readTypedObject(android.aidl.loggable.Data.CREATOR);
-            android.os.IBinder _arg18;
-            _arg18 = data.readStrongBinder();
-            android.os.ParcelFileDescriptor _arg19;
-            _arg19 = data.readTypedObject(android.os.ParcelFileDescriptor.CREATOR);
-            android.os.ParcelFileDescriptor[] _arg20;
-            _arg20 = data.createTypedArray(android.os.ParcelFileDescriptor.CREATOR);
-            data.enforceNoDataAvail();
-            java.lang.String[] _result = this.LogThis(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11, _arg12, _arg13, _arg14, _arg15, _arg16, _arg17, _arg18, _arg19, _arg20);
-            reply.writeNoException();
-            reply.writeStringArray(_result);
-            reply.writeBooleanArray(_arg1);
-            reply.writeByteArray(_arg3);
-            reply.writeCharArray(_arg5);
-            reply.writeIntArray(_arg7);
-            reply.writeLongArray(_arg9);
-            reply.writeFloatArray(_arg11);
-            reply.writeDoubleArray(_arg13);
-            reply.writeStringArray(_arg15);
-            reply.writeStringList(_arg16);
-            reply.writeTypedObject(_arg19, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
-            reply.writeTypedArray(_arg20, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
-          }
-          finally {
-            android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL);
-          }
+          boolean _arg0;
+          _arg0 = data.readBoolean();
+          boolean[] _arg1;
+          _arg1 = data.createBooleanArray();
+          byte _arg2;
+          _arg2 = data.readByte();
+          byte[] _arg3;
+          _arg3 = data.createByteArray();
+          char _arg4;
+          _arg4 = (char)data.readInt();
+          char[] _arg5;
+          _arg5 = data.createCharArray();
+          int _arg6;
+          _arg6 = data.readInt();
+          int[] _arg7;
+          _arg7 = data.createIntArray();
+          long _arg8;
+          _arg8 = data.readLong();
+          long[] _arg9;
+          _arg9 = data.createLongArray();
+          float _arg10;
+          _arg10 = data.readFloat();
+          float[] _arg11;
+          _arg11 = data.createFloatArray();
+          double _arg12;
+          _arg12 = data.readDouble();
+          double[] _arg13;
+          _arg13 = data.createDoubleArray();
+          java.lang.String _arg14;
+          _arg14 = data.readString();
+          java.lang.String[] _arg15;
+          _arg15 = data.createStringArray();
+          java.util.List<java.lang.String> _arg16;
+          _arg16 = data.createStringArrayList();
+          android.aidl.loggable.Data _arg17;
+          _arg17 = data.readTypedObject(android.aidl.loggable.Data.CREATOR);
+          android.os.IBinder _arg18;
+          _arg18 = data.readStrongBinder();
+          android.os.ParcelFileDescriptor _arg19;
+          _arg19 = data.readTypedObject(android.os.ParcelFileDescriptor.CREATOR);
+          android.os.ParcelFileDescriptor[] _arg20;
+          _arg20 = data.createTypedArray(android.os.ParcelFileDescriptor.CREATOR);
+          data.enforceNoDataAvail();
+          java.lang.String[] _result = this.LogThis(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11, _arg12, _arg13, _arg14, _arg15, _arg16, _arg17, _arg18, _arg19, _arg20);
+          reply.writeNoException();
+          reply.writeStringArray(_result);
+          reply.writeBooleanArray(_arg1);
+          reply.writeByteArray(_arg3);
+          reply.writeCharArray(_arg5);
+          reply.writeIntArray(_arg7);
+          reply.writeLongArray(_arg9);
+          reply.writeFloatArray(_arg11);
+          reply.writeDoubleArray(_arg13);
+          reply.writeStringArray(_arg15);
+          reply.writeStringList(_arg16);
+          reply.writeTypedObject(_arg19, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+          reply.writeTypedArray(_arg20, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
           break;
         }
         default:
@@ -150,11 +164,10 @@
       }
       @Override public java.lang.String[] LogThis(boolean boolValue, boolean[] boolArray, byte byteValue, byte[] byteArray, char charValue, char[] charArray, int intValue, int[] intArray, long longValue, long[] longArray, float floatValue, float[] floatArray, double doubleValue, double[] doubleArray, java.lang.String stringValue, java.lang.String[] stringArray, java.util.List<java.lang.String> listValue, android.aidl.loggable.Data dataValue, android.os.IBinder binderValue, android.os.ParcelFileDescriptor pfdValue, android.os.ParcelFileDescriptor[] pfdArray) throws android.os.RemoteException
       {
-        android.os.Parcel _data = android.os.Parcel.obtain();
+        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
         android.os.Parcel _reply = android.os.Parcel.obtain();
         java.lang.String[] _result;
         try {
-          android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, "AIDL::java::ILoggableInterface::LogThis::client");
           _data.writeInterfaceToken(DESCRIPTOR);
           _data.writeBoolean(boolValue);
           _data.writeBooleanArray(boolArray);
@@ -197,12 +210,16 @@
         finally {
           _reply.recycle();
           _data.recycle();
-          android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL);
         }
         return _result;
       }
     }
     static final int TRANSACTION_LogThis = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 0;
+    }
   }
   public static final java.lang.String DESCRIPTOR = "android$aidl$loggable$ILoggableInterface".replace('$', '.');
   public java.lang.String[] LogThis(boolean boolValue, boolean[] boolArray, byte byteValue, byte[] byteArray, char charValue, char[] charArray, int intValue, int[] intArray, long longValue, long[] longArray, float floatValue, float[] floatArray, double doubleValue, double[] doubleArray, java.lang.String stringValue, java.lang.String[] stringArray, java.util.List<java.lang.String> listValue, android.aidl.loggable.Data dataValue, android.os.IBinder binderValue, android.os.ParcelFileDescriptor pfdValue, android.os.ParcelFileDescriptor[] pfdArray) throws android.os.RemoteException;
@@ -246,6 +263,26 @@
       {
         return this;
       }
+      /** @hide */
+      public static java.lang.String getDefaultTransactionName(int transactionCode)
+      {
+        switch (transactionCode)
+        {
+          case TRANSACTION_Log:
+          {
+            return "Log";
+          }
+          default:
+          {
+            return null;
+          }
+        }
+      }
+      /** @hide */
+      public java.lang.String getTransactionName(int transactionCode)
+      {
+        return this.getDefaultTransactionName(transactionCode);
+      }
       @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
       {
         java.lang.String descriptor = DESCRIPTOR;
@@ -264,17 +301,11 @@
         {
           case TRANSACTION_Log:
           {
-            try {
-              android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, "AIDL::java::ISub::Log::server");
-              int _arg0;
-              _arg0 = data.readInt();
-              data.enforceNoDataAvail();
-              this.Log(_arg0);
-              reply.writeNoException();
-            }
-            finally {
-              android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL);
-            }
+            int _arg0;
+            _arg0 = data.readInt();
+            data.enforceNoDataAvail();
+            this.Log(_arg0);
+            reply.writeNoException();
             break;
           }
           default:
@@ -301,10 +332,9 @@
         }
         @Override public void Log(int value) throws android.os.RemoteException
         {
-          android.os.Parcel _data = android.os.Parcel.obtain();
+          android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
           android.os.Parcel _reply = android.os.Parcel.obtain();
           try {
-            android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, "AIDL::java::ISub::Log::client");
             _data.writeInterfaceToken(DESCRIPTOR);
             _data.writeInt(value);
             boolean _status = mRemote.transact(Stub.TRANSACTION_Log, _data, _reply, 0);
@@ -313,11 +343,15 @@
           finally {
             _reply.recycle();
             _data.recycle();
-            android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL);
           }
         }
       }
       static final int TRANSACTION_Log = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+      /** @hide */
+      public int getMaxTransactionId()
+      {
+        return 0;
+      }
     }
     public static final java.lang.String DESCRIPTOR = "android$aidl$loggable$ILoggableInterface$ISub".replace('$', '.');
     public void Log(int value) throws android.os.RemoteException;
diff --git a/tests/golden_output/aidl_test_loggable_interface-ndk-source/gen/include/aidl/android/aidl/loggable/ILoggableInterface.h b/tests/golden_output/aidl_test_loggable_interface-ndk-source/gen/include/aidl/android/aidl/loggable/ILoggableInterface.h
index e2ecef2..e533317 100644
--- a/tests/golden_output/aidl_test_loggable_interface-ndk-source/gen/include/aidl/android/aidl/loggable/ILoggableInterface.h
+++ b/tests/golden_output/aidl_test_loggable_interface-ndk-source/gen/include/aidl/android/aidl/loggable/ILoggableInterface.h
@@ -16,6 +16,9 @@
 #include <android/binder_stability.h>
 #endif  // BINDER_STABILITY_SUPPORT
 
+namespace aidl::android::aidl::loggable {
+class Data;
+}  // namespace aidl::android::aidl::loggable
 namespace aidl {
 namespace android {
 namespace aidl {
diff --git a/tests/golden_test.sh b/tests/golden_test.sh
index 86a5d1a..32f5404 100755
--- a/tests/golden_test.sh
+++ b/tests/golden_test.sh
@@ -53,6 +53,7 @@
     "aidl-test-fixedsizearray-java-source"
     "aidl-test-fixedsizearray-ndk-source"
     "aidl-test-fixedsizearray-rust-source"
+    "aidl-test-interface-cpp-analyzer-source"
   )
 
   local root="."
@@ -77,7 +78,7 @@
       mkdir -p "$golden"
       cp -r "$built/gen" "$golden"
     else
-      diff -r "$built/gen" "$golden/gen" || e=1
+      diff -rN "$built/gen" "$golden/gen" || e=1
     fi
   done
 
diff --git a/tests/java/src/android/aidl/permission/service/FakePermissionEnforcer.java b/tests/java/src/android/aidl/permission/service/FakePermissionEnforcer.java
new file mode 100644
index 0000000..92ec830
--- /dev/null
+++ b/tests/java/src/android/aidl/permission/service/FakePermissionEnforcer.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.aidl.permission.service;
+
+import static android.permission.PermissionManager.PERMISSION_GRANTED;
+import static android.permission.PermissionManager.PERMISSION_HARD_DENIED;
+
+import android.annotation.NonNull;
+import android.content.AttributionSource;
+import java.util.List;
+
+/* Fake for android.os.PermissionEnforcer
+ */
+public class FakePermissionEnforcer extends android.os.PermissionEnforcer {
+  private List<String> mGranted;
+
+  public void setGranted(List<String> granted) { mGranted = granted; }
+
+  @Override
+  protected int checkPermission(@NonNull String permission, @NonNull AttributionSource source) {
+    if (mGranted != null && mGranted.contains(permission)) {
+      return PERMISSION_GRANTED;
+    }
+    return PERMISSION_HARD_DENIED;
+  }
+}
diff --git a/tests/java/src/android/aidl/permission/service/PermissionTestService.java b/tests/java/src/android/aidl/permission/service/PermissionTestService.java
new file mode 100644
index 0000000..b65b5df
--- /dev/null
+++ b/tests/java/src/android/aidl/permission/service/PermissionTestService.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2022, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.aidl.permission.service;
+
+import android.aidl.tests.permission.IProtected;
+import android.annotation.EnforcePermission;
+import android.os.Binder;
+import android.os.ServiceManager;
+import java.util.List;
+
+public class PermissionTestService extends IProtected.Stub {
+  private FakePermissionEnforcer mPermissionEnforcer;
+
+  public static void main(String[] args) {
+    PermissionTestService myServer = new PermissionTestService(new FakePermissionEnforcer());
+    ServiceManager.addService(IProtected.class.getName(), myServer);
+
+    Binder.joinThreadPool();
+  }
+
+  public PermissionTestService(FakePermissionEnforcer permissionEnforcer) {
+    super(permissionEnforcer);
+    mPermissionEnforcer = permissionEnforcer;
+  }
+
+  @Override
+  @EnforcePermission("READ_PHONE_STATE")
+  public void PermissionProtected() {
+    PermissionProtected_enforcePermission();
+  }
+
+  @Override
+  @EnforcePermission(allOf = {"INTERNET", "VIBRATE"})
+  public void MultiplePermissionsAll() {
+    MultiplePermissionsAll_enforcePermission();
+  }
+
+  @Override
+  @EnforcePermission(anyOf = {"INTERNET", "VIBRATE"})
+  public void MultiplePermissionsAny() {
+    MultiplePermissionsAny_enforcePermission();
+  }
+
+  @Override
+  @EnforcePermission("android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK")
+  public void NonManifestPermission() {
+    NonManifestPermission_enforcePermission();
+  }
+
+  @Override
+  public void SetGranted(List<String> permissions) {
+    mPermissionEnforcer.setGranted(permissions);
+  }
+}
diff --git a/tests/java/src/android/aidl/permission/tests/PermissionTests.java b/tests/java/src/android/aidl/permission/tests/PermissionTests.java
new file mode 100644
index 0000000..91a9f42
--- /dev/null
+++ b/tests/java/src/android/aidl/permission/tests/PermissionTests.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2022, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.aidl.permission.tests;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
+
+import android.aidl.tests.permission.IProtected;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import java.util.List;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.internal.TextListener;
+import org.junit.runner.JUnitCore;
+import org.junit.runner.Result;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public abstract class PermissionTests {
+  protected IProtected service;
+
+  @Test
+  public void testProtected() throws Exception {
+    // Requires READ_PHONE_STATE.
+    service.SetGranted(List.of());
+    assertThrows(SecurityException.class, () -> service.PermissionProtected());
+    service.SetGranted(List.of("android.permission.READ_PHONE_STATE"));
+    service.PermissionProtected();
+  }
+
+  @Test
+  public void testMultiplePermissionsAll() throws Exception {
+    // Requires INTERNET and VIBRATE.
+    service.SetGranted(List.of());
+    assertThrows(SecurityException.class, () -> service.MultiplePermissionsAll());
+    service.SetGranted(List.of("android.permission.INTERNET"));
+    assertThrows(SecurityException.class, () -> service.MultiplePermissionsAll());
+    service.SetGranted(List.of("android.permission.VIBRATE"));
+    assertThrows(SecurityException.class, () -> service.MultiplePermissionsAll());
+    service.SetGranted(List.of("android.permission.INTERNET", "android.permission.VIBRATE"));
+    service.MultiplePermissionsAll();
+  }
+
+  @Test
+  public void testMultiplePermissionsAny() throws Exception {
+    // Requires INTERNET or VIBRATE.
+    service.SetGranted(List.of());
+    assertThrows(SecurityException.class, () -> service.MultiplePermissionsAny());
+    service.SetGranted(List.of("android.permission.INTERNET"));
+    service.MultiplePermissionsAny();
+    service.SetGranted(List.of("android.permission.VIBRATE"));
+    service.MultiplePermissionsAny();
+  }
+
+  @Test
+  public void testNonManifestPermission() throws Exception {
+    // Requires android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK
+    service.SetGranted(List.of());
+    assertThrows(SecurityException.class, () -> service.NonManifestPermission());
+    service.SetGranted(List.of("android.permission.MAINLINE_NETWORK_STACK"));
+    service.NonManifestPermission();
+  }
+
+  public static void main(String[] args) {
+    JUnitCore junit = new JUnitCore();
+    junit.addListener(new TextListener(System.out));
+    Result result = junit.run(PermissionTestsRemote.class, PermissionTestsLocal.class);
+    System.out.println(result.wasSuccessful() ? "TEST SUCCESS" : "TEST FAILURE");
+  }
+}
diff --git a/tests/java/src/android/aidl/permission/tests/PermissionTestsLocal.java b/tests/java/src/android/aidl/permission/tests/PermissionTestsLocal.java
new file mode 100644
index 0000000..3e3146e
--- /dev/null
+++ b/tests/java/src/android/aidl/permission/tests/PermissionTestsLocal.java
@@ -0,0 +1,38 @@
+
+/*
+ * Copyright (C) 2022, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.aidl.permission.tests;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
+
+import android.aidl.permission.service.FakePermissionEnforcer;
+import android.aidl.permission.service.PermissionTestService;
+import android.aidl.tests.permission.IProtected;
+import android.os.RemoteException;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class PermissionTestsLocal extends PermissionTests {
+  @Before
+  public void setUp() throws RemoteException {
+    service = new PermissionTestService(new FakePermissionEnforcer());
+    assertNotNull(service);
+  }
+}
diff --git a/tests/java/src/android/aidl/permission/tests/PermissionTestsRemote.java b/tests/java/src/android/aidl/permission/tests/PermissionTestsRemote.java
new file mode 100644
index 0000000..5602fe8
--- /dev/null
+++ b/tests/java/src/android/aidl/permission/tests/PermissionTestsRemote.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2022, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.aidl.permission.tests;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
+
+import android.aidl.tests.permission.IProtected;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class PermissionTestsRemote extends PermissionTests {
+  @Before
+  public void setUp() throws RemoteException {
+    IBinder binder = ServiceManager.waitForService(IProtected.class.getName());
+    assertNotNull(binder);
+    service = IProtected.Stub.asInterface(binder);
+    assertNotNull(service);
+  }
+}
diff --git a/tests/java/src/android/aidl/service/TestServiceServer.java b/tests/java/src/android/aidl/service/TestServiceServer.java
index bc516a8..7843d9c 100644
--- a/tests/java/src/android/aidl/service/TestServiceServer.java
+++ b/tests/java/src/android/aidl/service/TestServiceServer.java
@@ -21,8 +21,10 @@
 import android.aidl.tests.BackendType;
 import android.aidl.tests.BadParcelable;
 import android.aidl.tests.ByteEnum;
+import android.aidl.tests.CircularParcelable;
 import android.aidl.tests.ConstantExpressionEnum;
 import android.aidl.tests.GenericStructuredParcelable;
+import android.aidl.tests.ICircular;
 import android.aidl.tests.ICppJavaTests;
 import android.aidl.tests.INamedCallback;
 import android.aidl.tests.INewName;
@@ -101,11 +103,11 @@
     }
     @Override
     public final int getInterfaceVersion() {
-      return IFooInterface.VERSION;
+      return super.VERSION;
     }
     @Override
     public final String getInterfaceHash() {
-      return IFooInterface.HASH;
+      return super.HASH;
     }
   }
 
@@ -305,10 +307,27 @@
 
   @Override
   public INamedCallback GetOtherTestService(String name) throws RemoteException {
-    if (!mNamedCallbacks.containsKey(name)) {
-      mNamedCallbacks.put(name, new MyNamedCallback(name));
+    synchronized (mNamedCallbacks) {
+      if (!mNamedCallbacks.containsKey(name)) {
+        mNamedCallbacks.put(name, new MyNamedCallback(name));
+      }
+      return mNamedCallbacks.get(name);
     }
-    return mNamedCallbacks.get(name);
+  }
+  @Override
+  public boolean SetOtherTestService(String name, INamedCallback service) throws RemoteException {
+    synchronized (mNamedCallbacks) {
+      if (mNamedCallbacks.containsKey(name) && mNamedCallbacks.get(name) == service) {
+        return true;
+      }
+      try {
+        // This restricts the client to only setting services that it gets from this server.
+        mNamedCallbacks.put(name, (MyNamedCallback) service);
+      } catch (Exception e) {
+        Log.i("TestServiceServer", "Failed to cast service");
+      }
+      return false;
+    }
   }
   @Override
   public boolean VerifyName(INamedCallback service, String name) throws RemoteException {
@@ -765,4 +784,21 @@
   public byte getBackendType() throws RemoteException {
     return BackendType.JAVA;
   }
+
+  private static class MyCircular extends ICircular.Stub {
+    private ITestService mSrv;
+
+    MyCircular(ITestService srv) { mSrv = srv; }
+
+    @Override
+    public ITestService GetTestService() {
+      return mSrv;
+    }
+  }
+
+  @Override
+  public ICircular GetCircular(CircularParcelable cp) throws RemoteException {
+    cp.testService = this;
+    return new MyCircular(this);
+  }
 }
diff --git a/tests/lazy_test/main.cpp b/tests/lazy_test/main.cpp
index 0a8393f..222d809 100644
--- a/tests/lazy_test/main.cpp
+++ b/tests/lazy_test/main.cpp
@@ -42,8 +42,8 @@
 using ::android::os::ParcelFileDescriptor;
 
 std::vector<String16> gServiceNames;
-static constexpr size_t SHUTDOWN_WAIT_TIME = 10;
-static constexpr size_t CALLBACK_SHUTDOWN_WAIT_TIME = 5;
+static constexpr size_t SHUTDOWN_WAIT_MS = 10000;
+static constexpr size_t CALLBACK_SHUTDOWN_WAIT_MS = 5000;
 
 sp<IBinder> waitForService(const String16& name) {
   sp<IServiceManager> manager;
@@ -78,10 +78,10 @@
   }
 
   void TearDown() override {
-    std::cout << "Waiting " << SHUTDOWN_WAIT_TIME << " seconds before checking that the "
+    std::cout << "Waiting " << SHUTDOWN_WAIT_MS << " milliseconds before checking that the "
               << "service has shut down." << std::endl;
     IPCThreadState::self()->flushCommands();
-    sleep(SHUTDOWN_WAIT_TIME);
+    usleep(SHUTDOWN_WAIT_MS * 1000);
     for (size_t i = 0; i < gServiceNames.size(); i++) {
       ASSERT_FALSE(isServiceRunning(gServiceNames.at(i))) << "Service failed to shut down.";
     }
@@ -100,7 +100,7 @@
   }
 }
 
-static std::vector<size_t> waitTimes(size_t numTimes, size_t maxWait) {
+static std::vector<size_t> waitMs(size_t numTimes, size_t maxWait) {
   std::vector<size_t> times(numTimes);
   for (size_t i = 0; i < numTimes; i++) {
     times.at(i) = (size_t)(rand() % (maxWait + 1));
@@ -108,21 +108,20 @@
   return times;
 }
 
-static void testWithTimes(const std::vector<size_t>& waitTimes, bool beforeGet) {
+static void testWithTimes(const std::vector<size_t>& waitMs, bool beforeGet) {
   size_t nServices = gServiceNames.size();
-  for (size_t i = 0; i < waitTimes.size(); i++) {
+  for (size_t i = 0; i < waitMs.size(); i++) {
     IPCThreadState::self()->flushCommands();
     if (beforeGet) {
-      std::cout << "Thread waiting " << waitTimes.at(i) << " while not holding service."
-                << std::endl;
-      sleep(waitTimes.at(i));
+      std::cout << "Thread waiting " << waitMs.at(i) << " while not holding service." << std::endl;
+      usleep(waitMs.at(i) * 1000);
     }
 
     sp<IBinder> service = waitForService(gServiceNames.at(i % nServices));
 
     if (!beforeGet) {
-      std::cout << "Thread waiting " << waitTimes.at(i) << " while holding service." << std::endl;
-      sleep(waitTimes.at(i));
+      std::cout << "Thread waiting " << waitMs.at(i) << " while holding service." << std::endl;
+      usleep(waitMs.at(i) * 1000);
     }
 
     ASSERT_NE(service.get(), nullptr);
@@ -131,18 +130,19 @@
 }
 
 static constexpr size_t NUM_TIMES_GET_RELEASE = 5;
-static constexpr size_t MAX_WAITING_DURATION = 10;
+static constexpr size_t MAX_WAITING_DURATION_MS = 10000;
 static constexpr size_t NUM_CONCURRENT_THREADS = 3;
 static void testConcurrentThreadsWithDelays(bool delayBeforeGet) {
   size_t nServices = gServiceNames.size();
   std::vector<std::vector<size_t>> threadWaitTimes(NUM_CONCURRENT_THREADS);
   int maxWait = 0;
   for (size_t i = 0; i < threadWaitTimes.size(); i++) {
-    threadWaitTimes.at(i) = waitTimes(NUM_TIMES_GET_RELEASE * nServices, MAX_WAITING_DURATION);
+    threadWaitTimes.at(i) = waitMs(NUM_TIMES_GET_RELEASE * nServices, MAX_WAITING_DURATION_MS);
     int totalWait = std::accumulate(threadWaitTimes.at(i).begin(), threadWaitTimes.at(i).end(), 0);
     maxWait = std::max(maxWait, totalWait);
   }
-  std::cout << "Additional runtime expected from sleeps: " << maxWait << " second(s)." << std::endl;
+  std::cout << "Additional runtime expected from sleeps: " << maxWait << " millisecond(s)."
+            << std::endl;
 
   std::vector<std::thread> threads(NUM_CONCURRENT_THREADS);
   for (size_t i = 0; i < threads.size(); i++) {
@@ -186,10 +186,10 @@
     EXPECT_TRUE(service->forcePersist(i == 0).isOk());
     service = nullptr;
 
-    std::cout << "Waiting " << SHUTDOWN_WAIT_TIME << " seconds before checking whether the "
+    std::cout << "Waiting " << SHUTDOWN_WAIT_MS << " milliseconds before checking whether the "
               << "service is still running." << std::endl;
     IPCThreadState::self()->flushCommands();
-    sleep(SHUTDOWN_WAIT_TIME);
+    usleep(SHUTDOWN_WAIT_MS * 1000);
 
     if (i == 0) {
       ASSERT_TRUE(isServiceRunning(serviceName)) << "Service shut down when it shouldn't have.";
@@ -215,7 +215,7 @@
 
   IPCThreadState::self()->flushCommands();
 
-  std::cout << "Waiting " << SHUTDOWN_WAIT_TIME << " seconds for callback completion "
+  std::cout << "Waiting " << SHUTDOWN_WAIT_MS << " milliseconds for callback completion "
             << "notification." << std::endl;
 
   int epollFd = epoll_create1(EPOLL_CLOEXEC);
@@ -230,7 +230,7 @@
   int rc = epoll_ctl(epollFd, EPOLL_CTL_ADD, efd, &event);
   ASSERT_GE(rc, 0) << "Failed to add fd to epoll";
 
-  rc = TEMP_FAILURE_RETRY(epoll_wait(epollFd, events, EPOLL_MAX_EVENTS, SHUTDOWN_WAIT_TIME * 1000));
+  rc = TEMP_FAILURE_RETRY(epoll_wait(epollFd, events, EPOLL_MAX_EVENTS, SHUTDOWN_WAIT_MS));
   ASSERT_NE(rc, 0) << "Service shutdown timeout";
   ASSERT_GT(rc, 0) << "Error waiting for service shutdown notification";
 
@@ -239,10 +239,11 @@
   ASSERT_GE(rc, 0) << "Failed to get callback completion notification from service";
   ASSERT_EQ(counter, 1);
 
-  std::cout << "Waiting " << CALLBACK_SHUTDOWN_WAIT_TIME << " seconds before checking whether the "
+  std::cout << "Waiting " << CALLBACK_SHUTDOWN_WAIT_MS
+            << " milliseconds before checking whether the "
             << "service is still running." << std::endl;
 
-  sleep(CALLBACK_SHUTDOWN_WAIT_TIME);
+  usleep(CALLBACK_SHUTDOWN_WAIT_MS * 1000);
 
   ASSERT_FALSE(isServiceRunning(serviceName)) << "Service failed to shut down.";
 }
diff --git a/tests/rust/test_service.rs b/tests/rust/test_service.rs
index 3a5c09c..3cff4f8 100644
--- a/tests/rust/test_service.rs
+++ b/tests/rust/test_service.rs
@@ -27,9 +27,10 @@
 };
 use aidl_test_interface::aidl::android::aidl::tests::{
     extension::ExtendableParcelable::ExtendableParcelable, extension::MyExt::MyExt,
-    BackendType::BackendType, ByteEnum::ByteEnum, ConstantExpressionEnum::ConstantExpressionEnum,
-    INamedCallback, INewName, IOldName, IntEnum::IntEnum, LongEnum::LongEnum,
-    RecursiveList::RecursiveList, StructuredParcelable, Union,
+    BackendType::BackendType, ByteEnum::ByteEnum, CircularParcelable::CircularParcelable,
+    ConstantExpressionEnum::ConstantExpressionEnum, ICircular, INamedCallback, INewName, IOldName,
+    IntEnum::IntEnum, LongEnum::LongEnum, RecursiveList::RecursiveList, StructuredParcelable,
+    Union,
 };
 use aidl_test_interface::binder::{
     self, BinderFeatures, Interface, ParcelFileDescriptor, SpIBinder,
@@ -76,6 +77,19 @@
     }
 }
 
+#[derive(Debug, Default)]
+struct Circular;
+
+impl Interface for Circular {}
+
+impl ICircular::ICircular for Circular {
+    fn GetTestService(
+        &self,
+    ) -> binder::Result<Option<binder::Strong<dyn ITestService::ITestService>>> {
+        Ok(None)
+    }
+}
+
 #[derive(Default)]
 struct TestService {
     service_map: Mutex<HashMap<String, binder::Strong<dyn INamedCallback::INamedCallback>>>,
@@ -173,6 +187,21 @@
         Ok(other_service.to_owned())
     }
 
+    fn SetOtherTestService(
+        &self,
+        name: &str,
+        service: &binder::Strong<dyn INamedCallback::INamedCallback>,
+    ) -> binder::Result<bool> {
+        let mut service_map = self.service_map.lock().unwrap();
+        if let Some(existing_service) = service_map.get(name) {
+            if existing_service == service {
+                return Ok(true);
+            }
+        }
+        service_map.insert(name.into(), service.clone());
+        Ok(false)
+    }
+
     fn VerifyName(
         &self,
         service: &binder::Strong<dyn INamedCallback::INamedCallback>,
@@ -463,6 +492,13 @@
     fn getBackendType(&self) -> binder::Result<BackendType> {
         Ok(BackendType::RUST)
     }
+
+    fn GetCircular(
+        &self,
+        _: &mut CircularParcelable,
+    ) -> binder::Result<binder::Strong<dyn ICircular::ICircular>> {
+        Ok(ICircular::BnCircular::new_binder(Circular, BinderFeatures::default()))
+    }
 }
 
 struct FooInterface;
diff --git a/tests/rust/test_service_async.rs b/tests/rust/test_service_async.rs
index cfc0f28..8ae3906 100644
--- a/tests/rust/test_service_async.rs
+++ b/tests/rust/test_service_async.rs
@@ -24,9 +24,10 @@
 };
 use aidl_test_interface::aidl::android::aidl::tests::{
     extension::ExtendableParcelable::ExtendableParcelable, extension::MyExt::MyExt,
-    BackendType::BackendType, ByteEnum::ByteEnum, ConstantExpressionEnum::ConstantExpressionEnum,
-    INamedCallback, INewName, IOldName, IntEnum::IntEnum, LongEnum::LongEnum,
-    RecursiveList::RecursiveList, StructuredParcelable, Union,
+    BackendType::BackendType, ByteEnum::ByteEnum, CircularParcelable::CircularParcelable,
+    ConstantExpressionEnum::ConstantExpressionEnum, ICircular, INamedCallback, INewName, IOldName,
+    IntEnum::IntEnum, LongEnum::LongEnum, RecursiveList::RecursiveList, StructuredParcelable,
+    Union,
 };
 use aidl_test_interface::binder::{
     self, BinderFeatures, Interface, ParcelFileDescriptor, SpIBinder,
@@ -78,6 +79,20 @@
     }
 }
 
+#[derive(Debug, Default)]
+struct Circular;
+
+impl Interface for Circular {}
+
+#[async_trait]
+impl ICircular::ICircularAsyncServer for Circular {
+    async fn GetTestService(
+        &self,
+    ) -> binder::Result<Option<binder::Strong<dyn ITestService::ITestService>>> {
+        Ok(None)
+    }
+}
+
 #[derive(Default)]
 struct TestService {
     service_map: Mutex<HashMap<String, binder::Strong<dyn INamedCallback::INamedCallback>>>,
@@ -202,6 +217,21 @@
         Ok(other_service.to_owned())
     }
 
+    async fn SetOtherTestService(
+        &self,
+        name: &str,
+        service: &binder::Strong<dyn INamedCallback::INamedCallback>,
+    ) -> binder::Result<bool> {
+        let mut service_map = self.service_map.lock().unwrap();
+        if let Some(existing_service) = service_map.get(name) {
+            if existing_service == service {
+                return Ok(true);
+            }
+        }
+        service_map.insert(name.into(), service.clone());
+        Ok(false)
+    }
+
     async fn VerifyName(
         &self,
         service: &binder::Strong<dyn INamedCallback::INamedCallback>,
@@ -505,6 +535,13 @@
     async fn getBackendType(&self) -> binder::Result<BackendType> {
         Ok(BackendType::RUST)
     }
+
+    async fn GetCircular(
+        &self,
+        _: &mut CircularParcelable,
+    ) -> binder::Result<binder::Strong<dyn ICircular::ICircular>> {
+        Ok(ICircular::BnCircular::new_async_binder(Circular, rt(), BinderFeatures::default()))
+    }
 }
 
 struct FooInterface;