From 94d3c0c503ad14f23ad1dce4bfd8020e031657a4 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Fri, 25 Mar 2022 22:03:56 +0900 Subject: Add automatic default value for primitive type fields Primitive type fields are auto-initialized with '\0' when not specified. Bug: 206718630 Bug: 206718630 Test: aidl --lang cpp -o out -h out \ tests/android/aidl/tests/StructuredParcelable.aidl Test: aidl --lang ndk -o out -h out \ tests/android/aidl/tests/StructuredParcelable.aidl Merged-In: I15cfe2a90c0c9adca1692d9a9c997901b90bbbb6 Change-Id: I15cfe2a90c0c9adca1692d9a9c997901b90bbbb6 --- generate_cpp.cpp | 3 +++ generate_ndk.cpp | 3 +++ tests/android/aidl/tests/StructuredParcelable.aidl | 11 +++++++++++ 3 files changed, 17 insertions(+) diff --git a/generate_cpp.cpp b/generate_cpp.cpp index 9d2a1fb6..fb7f5f13 100644 --- a/generate_cpp.cpp +++ b/generate_cpp.cpp @@ -1021,6 +1021,9 @@ std::unique_ptr BuildParcelHeader(const TypeNamespace& /*types*/, if (variable->GetDefaultValue()) { out << " = " << type->CppType().c_str() << "(" << variable->ValueString(ConstantValueDecorator) << ")"; + } else if (AidlTypenames::IsPrimitiveTypename(variable->GetType().GetName()) && + !variable->GetType().IsArray()) { + out << " = {}"; } out << ";\n"; diff --git a/generate_ndk.cpp b/generate_ndk.cpp index f0445f7a..f3828613 100644 --- a/generate_ndk.cpp +++ b/generate_ndk.cpp @@ -774,6 +774,9 @@ void GenerateParcelHeader(CodeWriter& out, const AidlTypenames& types, out << NdkNameOf(types, variable->GetType(), StorageMode::STACK) << " " << variable->GetName(); if (variable->GetDefaultValue()) { out << " = " << variable->ValueString(AidlConstantValueDecorator); + } else if (AidlTypenames::IsPrimitiveTypename(variable->GetType().GetName()) && + !variable->GetType().IsArray()) { + out << " = {}"; } out << ";\n"; } diff --git a/tests/android/aidl/tests/StructuredParcelable.aidl b/tests/android/aidl/tests/StructuredParcelable.aidl index 2ced1e86..34d3e6c8 100644 --- a/tests/android/aidl/tests/StructuredParcelable.aidl +++ b/tests/android/aidl/tests/StructuredParcelable.aidl @@ -36,4 +36,15 @@ parcelable StructuredParcelable { double checkDoubleFromFloat = 3.14f; String[] checkStringArray1 = { "a", "b" }; @utf8InCpp String[] checkStringArray2 = { "a", "b" }; + + // primitive types will be initialized with {}. + boolean aBoolean; + byte aByte; + char aChar; + int anInt; + long aLong; + float aFloat; + double aDouble; + // arrays are not primitive type. + int[] anIntArray; } -- cgit v1.2.3