1a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin/*
2a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * Copyright (C) 2015, The Android Open Source Project
3a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *
4a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * Licensed under the Apache License, Version 2.0 (the "License");
5a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * you may not use this file except in compliance with the License.
6a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * You may obtain a copy of the License at
7a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *
8a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *     http://www.apache.org/licenses/LICENSE-2.0
9a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *
10a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * Unless required by applicable law or agreed to in writing, software
11a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * distributed under the License is distributed on an "AS IS" BASIS,
12a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * See the License for the specific language governing permissions and
14a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * limitations under the License.
15a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin */
16a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
17a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <string>
18a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
190a62067f35e957493bc37c4b42dfdcfc16353831Elliott Hughes#include <android-base/stringprintf.h>
20a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <gtest/gtest.h>
21a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
222cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin#include "aidl.h"
23a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "aidl_language.h"
24a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "ast_cpp.h"
25a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "code_writer.h"
26ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley#include "generate_cpp.h"
279d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley#include "os.h"
284a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley#include "tests/fake_io_delegate.h"
2980ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin#include "tests/test_util.h"
30e3550c6679939d2bf5f35c540cd83198ab156fb7Christopher Wiley#include "type_cpp.h"
31a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
32b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinusing ::android::aidl::test::FakeIoDelegate;
33b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinusing ::android::base::StringPrintf;
34a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::string;
35a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::unique_ptr;
36a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
37a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android {
38a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace aidl {
39f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileynamespace cpp {
40a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace {
41a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
42b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kComplexTypeInterfaceAIDL =
43b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(package android.os;
44389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinimport foo.IFooType;
45b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlininterface IComplexTypeInterface {
46d40e2fed2c19850d53f1620322ac5cbca2c0e245Casey Dahlin  const int MY_CONSTANT = 3;
47cb5317d8270ece5b3f5860a78a1e911d39e677bbCasey Dahlin  int[] Send(in @nullable int[] goes_in, inout double[] goes_in_and_out, out boolean[] goes_out);
480dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin  oneway void Piff(int times);
49389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  IFooType TakesABinder(IFooType f);
50ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin  @nullable IFooType NullableBinder();
5156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley  List<String> StringListMethod(in java.util.List<String> input, out List<String> output);
527ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin  List<IBinder> BinderListMethod(in java.util.List<IBinder> input, out List<IBinder> output);
53a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin  FileDescriptor TakesAFileDescriptor(in FileDescriptor f);
54a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin  FileDescriptor[] TakesAFileDescriptorArray(in FileDescriptor[] f);
55b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})";
56b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
57b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] =
58b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_
59b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_
60b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
61b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h>
62b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h>
63b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h>
64b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h>
65b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
66b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
67b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
68b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
69b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
70b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinclass BpComplexTypeInterface : public ::android::BpInterface<IComplexTypeInterface> {
71b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic:
72b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinexplicit BpComplexTypeInterface(const ::android::sp<::android::IBinder>& _aidl_impl);
73b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default;
7457dbe24bcb8f4509a876e8445c78d9504d7e616aCasey Dahlin::android::binder::Status Send(const ::std::unique_ptr<::std::vector<int32_t>>& goes_in, ::std::vector<double>* goes_in_and_out, ::std::vector<bool>* goes_out, ::std::vector<int32_t>* _aidl_return) override;
75b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status Piff(int32_t times) override;
76b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status TakesABinder(const ::android::sp<::foo::IFooType>& f, ::android::sp<::foo::IFooType>* _aidl_return) override;
77ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::binder::Status NullableBinder(::android::sp<::foo::IFooType>* _aidl_return) override;
78b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status StringListMethod(const ::std::vector<::android::String16>& input, ::std::vector<::android::String16>* output, ::std::vector<::android::String16>* _aidl_return) override;
79b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BinderListMethod(const ::std::vector<::android::sp<::android::IBinder>>& input, ::std::vector<::android::sp<::android::IBinder>>* output, ::std::vector<::android::sp<::android::IBinder>>* _aidl_return) override;
807cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::binder::Status TakesAFileDescriptor(const ::android::base::unique_fd& f, ::android::base::unique_fd* _aidl_return) override;
817cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::binder::Status TakesAFileDescriptorArray(const ::std::vector<::android::base::unique_fd>& f, ::std::vector<::android::base::unique_fd>* _aidl_return) override;
82b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};  // class BpComplexTypeInterface
83b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
84b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
85b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
86b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
87b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
8811a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley#endif  // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_
8911a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley)";
90b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
91b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] =
92b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h>
93b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h>
94b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
95b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
96b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
97b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
98b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
99b8d9e8898c34da45027e56be88d5c9238ea88203Casey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const ::android::sp<::android::IBinder>& _aidl_impl)
100b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin    : BpInterface<IComplexTypeInterface>(_aidl_impl){
101b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
102b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
10357dbe24bcb8f4509a876e8445c78d9504d7e616aCasey Dahlin::android::binder::Status BpComplexTypeInterface::Send(const ::std::unique_ptr<::std::vector<int32_t>>& goes_in, ::std::vector<double>* goes_in_and_out, ::std::vector<bool>* goes_out, ::std::vector<int32_t>* _aidl_return) {
104b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
105b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
1061095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
107b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
108b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
109b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
110b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1118993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
112b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInt32Vector(goes_in);
113b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
114b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
115bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
116b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeDoubleVector(*goes_in_and_out);
117b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
118b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1190eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
12074b7bf1043d1905e6f999f7c47920319029453c0Christopher Wiley_aidl_ret_status = _aidl_data.writeVectorSize(*goes_out);
12174b7bf1043d1905e6f999f7c47920319029453c0Christopher Wileyif (((_aidl_ret_status) != (::android::OK))) {
12274b7bf1043d1905e6f999f7c47920319029453c0Christopher Wileygoto _aidl_error;
12374b7bf1043d1905e6f999f7c47920319029453c0Christopher Wiley}
124b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::SEND, _aidl_data, &_aidl_reply);
125b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
126b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1270eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
128b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
129b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
130b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
131433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley}
132433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
133433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
1342aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley}
135b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readInt32Vector(_aidl_return);
136b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
137b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1380eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
139b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readDoubleVector(goes_in_and_out);
140b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
141b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
142bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
143b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readBoolVector(goes_out);
144b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
145b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1460eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
147b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
148b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
149433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
150b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
151b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
152b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::Piff(int32_t times) {
153b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
154b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
1551095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
156b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
157b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
158b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
159b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1608993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
161b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInt32(times);
162b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
163b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1640eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
165b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::PIFF, _aidl_data, &_aidl_reply, ::android::IBinder::FLAG_ONEWAY);
166b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
167b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1680eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
169b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
170b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
171433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
1720dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin}
1730dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin
174b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::TakesABinder(const ::android::sp<::foo::IFooType>& f, ::android::sp<::foo::IFooType>* _aidl_return) {
175b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
176b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
1771095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
178b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
179b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
180b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
181b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
182389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
1832dbab064e029411e230fb86913d58a03dfd18519Casey Dahlin_aidl_ret_status = _aidl_data.writeStrongBinder(::foo::IFooType::asBinder(f));
184b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
185b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
186389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
187b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESABINDER, _aidl_data, &_aidl_reply);
188b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
189b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
190389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
191b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
192b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
193b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
194433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley}
195433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
196433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
197389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
198b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readStrongBinder(_aidl_return);
199b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
200b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
201389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
202b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
203b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
204433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
205389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
206389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin
207ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::binder::Status BpComplexTypeInterface::NullableBinder(::android::sp<::foo::IFooType>* _aidl_return) {
208ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::Parcel _aidl_data;
209ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::Parcel _aidl_reply;
210ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::status_t _aidl_ret_status = ::android::OK;
211ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::binder::Status _aidl_status;
212ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
213ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
214ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlingoto _aidl_error;
215ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
216ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::NULLABLEBINDER, _aidl_data, &_aidl_reply);
217ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
218ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlingoto _aidl_error;
219ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
220ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
221ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
222ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlingoto _aidl_error;
223ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
224ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (!_aidl_status.isOk()) {
225ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinreturn _aidl_status;
226ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
227ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = _aidl_reply.readNullableStrongBinder(_aidl_return);
228ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
229ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlingoto _aidl_error;
230ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
231ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_error:
232ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
233ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinreturn _aidl_status;
234ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
235ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin
236b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::StringListMethod(const ::std::vector<::android::String16>& input, ::std::vector<::android::String16>* output, ::std::vector<::android::String16>* _aidl_return) {
237b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
238b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
2391095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
240b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
241b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
242b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
243b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
24456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
245b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeString16Vector(input);
246b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
247b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
24856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
249b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::STRINGLISTMETHOD, _aidl_data, &_aidl_reply);
250b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
251b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
25256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
253b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
254b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
255b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
256433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley}
257433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
258433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
25956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
260b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readString16Vector(_aidl_return);
261b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
262b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
26356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
264b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readString16Vector(output);
265b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
266b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
26756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
268b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
269b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
270433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
27156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
27256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley
273b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::BinderListMethod(const ::std::vector<::android::sp<::android::IBinder>>& input, ::std::vector<::android::sp<::android::IBinder>>* output, ::std::vector<::android::sp<::android::IBinder>>* _aidl_return) {
274b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
275b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
2761095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
277b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
278b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
279b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
280b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
2817ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
282b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeStrongBinderVector(input);
283b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
284b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
2857ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
286b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::BINDERLISTMETHOD, _aidl_data, &_aidl_reply);
287b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
288b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
2897ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
290b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
291b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
292b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
293433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley}
294433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
295433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
2967ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
297b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readStrongBinderVector(_aidl_return);
298b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
299b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
3007ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
301b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readStrongBinderVector(output);
302b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
303b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
3047ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
305b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
306b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
307433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
3087ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
3097ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin
3107cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::binder::Status BpComplexTypeInterface::TakesAFileDescriptor(const ::android::base::unique_fd& f, ::android::base::unique_fd* _aidl_return) {
311b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
312b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
3131095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
314b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
315b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
316b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
317b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
318a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
319b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeUniqueFileDescriptor(f);
320b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
321b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
322a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
323b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESAFILEDESCRIPTOR, _aidl_data, &_aidl_reply);
324b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
325b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
326a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
327b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
328b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
329b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
330a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
331a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) {
332a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status;
333a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
334b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readUniqueFileDescriptor(_aidl_return);
335b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
336b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
337a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
338b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
339b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
340a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status;
341a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
342a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin
3437cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::binder::Status BpComplexTypeInterface::TakesAFileDescriptorArray(const ::std::vector<::android::base::unique_fd>& f, ::std::vector<::android::base::unique_fd>* _aidl_return) {
344b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
345b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
3461095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
347b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
348b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
349b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
350b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
351a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
352b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeUniqueFileDescriptorVector(f);
353b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
354b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
355a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
356b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESAFILEDESCRIPTORARRAY, _aidl_data, &_aidl_reply);
357b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
358b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
359a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
360b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
361b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
362b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
363a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
364a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) {
365a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status;
366a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
367b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readUniqueFileDescriptorVector(_aidl_return);
368b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
369b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
370a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
371b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
372b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
373a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status;
374a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
375a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin
376b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
377b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
378b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
379b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)";
380b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
381b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenconst char kExpectedComplexTypeClientWithTraceSourceOutput[] =
382b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenR"(#include <android/os/BpComplexTypeInterface.h>
383b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen#include <binder/Parcel.h>
384b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
385b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenennamespace android {
386b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
387b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenennamespace os {
388b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
389b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenBpComplexTypeInterface::BpComplexTypeInterface(const ::android::sp<::android::IBinder>& _aidl_impl)
390b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen    : BpInterface<IComplexTypeInterface>(_aidl_impl){
391b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
392b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
393b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status BpComplexTypeInterface::Send(const ::std::unique_ptr<::std::vector<int32_t>>& goes_in, ::std::vector<double>* goes_in_and_out, ::std::vector<bool>* goes_out, ::std::vector<int32_t>* _aidl_return) {
394b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_data;
395b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_reply;
396b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::status_t _aidl_ret_status = ::android::OK;
397b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status;
398b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "IComplexTypeInterface::Send::cppClient");
399b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
400b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
401b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
402b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
403b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeInt32Vector(goes_in);
404b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
405b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
406b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
407b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeDoubleVector(*goes_in_and_out);
408b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
409b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
410b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
411b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeVectorSize(*goes_out);
412b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
413b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
414b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
415b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = remote()->transact(IComplexTypeInterface::SEND, _aidl_data, &_aidl_reply);
416b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
417b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
418b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
419b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
420b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
421b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
422b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
423b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
424b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
425b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
426b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readInt32Vector(_aidl_return);
427b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
428b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
429b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
430b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readDoubleVector(goes_in_and_out);
431b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
432b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
433b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
434b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readBoolVector(goes_out);
435b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
436b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
437b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
438b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_error:
439b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_status.setFromStatusT(_aidl_ret_status);
440b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
441b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
442b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
443b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status BpComplexTypeInterface::Piff(int32_t times) {
444b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_data;
445b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_reply;
446b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::status_t _aidl_ret_status = ::android::OK;
447b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status;
448b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "IComplexTypeInterface::Piff::cppClient");
449b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
450b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
451b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
452b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
453b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeInt32(times);
454b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
455b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
456b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
457b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = remote()->transact(IComplexTypeInterface::PIFF, _aidl_data, &_aidl_reply, ::android::IBinder::FLAG_ONEWAY);
458b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
459b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
460b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
461b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_error:
462b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_status.setFromStatusT(_aidl_ret_status);
463b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
464b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
465b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
466b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status BpComplexTypeInterface::TakesABinder(const ::android::sp<::foo::IFooType>& f, ::android::sp<::foo::IFooType>* _aidl_return) {
467b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_data;
468b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_reply;
469b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::status_t _aidl_ret_status = ::android::OK;
470b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status;
471b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "IComplexTypeInterface::TakesABinder::cppClient");
472b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
473b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
474b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
475b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
476b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeStrongBinder(::foo::IFooType::asBinder(f));
477b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
478b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
479b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
480b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESABINDER, _aidl_data, &_aidl_reply);
481b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
482b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
483b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
484b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
485b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
486b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
487b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
488b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
489b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
490b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
491b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readStrongBinder(_aidl_return);
492b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
493b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
494b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
495b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_error:
496b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_status.setFromStatusT(_aidl_ret_status);
497b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
498b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
499b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
500b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status BpComplexTypeInterface::NullableBinder(::android::sp<::foo::IFooType>* _aidl_return) {
501b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_data;
502b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_reply;
503b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::status_t _aidl_ret_status = ::android::OK;
504b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status;
505b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "IComplexTypeInterface::NullableBinder::cppClient");
506b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
507b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
508b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
509b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
510b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = remote()->transact(IComplexTypeInterface::NULLABLEBINDER, _aidl_data, &_aidl_reply);
511b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
512b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
513b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
514b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
515b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
516b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
517b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
518b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
519b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
520b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
521b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readNullableStrongBinder(_aidl_return);
522b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
523b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
524b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
525b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_error:
526b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_status.setFromStatusT(_aidl_ret_status);
527b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
528b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
529b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
530b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status BpComplexTypeInterface::StringListMethod(const ::std::vector<::android::String16>& input, ::std::vector<::android::String16>* output, ::std::vector<::android::String16>* _aidl_return) {
531b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_data;
532b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_reply;
533b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::status_t _aidl_ret_status = ::android::OK;
534b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status;
535b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "IComplexTypeInterface::StringListMethod::cppClient");
536b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
537b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
538b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
539b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
540b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeString16Vector(input);
541b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
542b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
543b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
544b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = remote()->transact(IComplexTypeInterface::STRINGLISTMETHOD, _aidl_data, &_aidl_reply);
545b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
546b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
547b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
548b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
549b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
550b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
551b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
552b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
553b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
554b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
555b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readString16Vector(_aidl_return);
556b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
557b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
558b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
559b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readString16Vector(output);
560b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
561b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
562b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
563b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_error:
564b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_status.setFromStatusT(_aidl_ret_status);
565b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
566b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
567b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
568b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status BpComplexTypeInterface::BinderListMethod(const ::std::vector<::android::sp<::android::IBinder>>& input, ::std::vector<::android::sp<::android::IBinder>>* output, ::std::vector<::android::sp<::android::IBinder>>* _aidl_return) {
569b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_data;
570b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_reply;
571b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::status_t _aidl_ret_status = ::android::OK;
572b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status;
573b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "IComplexTypeInterface::BinderListMethod::cppClient");
574b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
575b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
576b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
577b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
578b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeStrongBinderVector(input);
579b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
580b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
581b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
582b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = remote()->transact(IComplexTypeInterface::BINDERLISTMETHOD, _aidl_data, &_aidl_reply);
583b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
584b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
585b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
586b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
587b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
588b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
589b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
590b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
591b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
592b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
593b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readStrongBinderVector(_aidl_return);
594b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
595b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
596b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
597b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readStrongBinderVector(output);
598b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
599b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
600b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
601b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_error:
602b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_status.setFromStatusT(_aidl_ret_status);
603b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
604b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
605b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
606b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status BpComplexTypeInterface::TakesAFileDescriptor(const ::android::base::unique_fd& f, ::android::base::unique_fd* _aidl_return) {
607b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_data;
608b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_reply;
609b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::status_t _aidl_ret_status = ::android::OK;
610b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status;
611b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "IComplexTypeInterface::TakesAFileDescriptor::cppClient");
612b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
613b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
614b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
615b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
616b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeUniqueFileDescriptor(f);
617b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
618b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
619b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
620b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESAFILEDESCRIPTOR, _aidl_data, &_aidl_reply);
621b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
622b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
623b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
624b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
625b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
626b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
627b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
628b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
629b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
630b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
631b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readUniqueFileDescriptor(_aidl_return);
632b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
633b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
634b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
635b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_error:
636b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_status.setFromStatusT(_aidl_ret_status);
637b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
638b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
639b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
640b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status BpComplexTypeInterface::TakesAFileDescriptorArray(const ::std::vector<::android::base::unique_fd>& f, ::std::vector<::android::base::unique_fd>* _aidl_return) {
641b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_data;
642b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::Parcel _aidl_reply;
643b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::status_t _aidl_ret_status = ::android::OK;
644b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status;
645b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenScopedTrace _aidl_trace(ATRACE_TAG_AIDL, "IComplexTypeInterface::TakesAFileDescriptorArray::cppClient");
646b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
647b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
648b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
649b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
650b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.writeUniqueFileDescriptorVector(f);
651b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
652b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
653b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
654b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESAFILEDESCRIPTORARRAY, _aidl_data, &_aidl_reply);
655b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
656b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
657b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
658b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
659b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
660b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
661b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
662b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
663b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
664b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
665b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply.readUniqueFileDescriptorVector(_aidl_return);
666b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
667b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenengoto _aidl_error;
668b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
669b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_error:
670b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_status.setFromStatusT(_aidl_ret_status);
671b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_status;
672b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
673b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
674b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}  // namespace os
675b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
676b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}  // namespace android
677b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen)";
678b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
679b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] =
680b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_
681b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_
682b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
683b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h>
684b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h>
685b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
686b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
687b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
688b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
689b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
690b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinclass BnComplexTypeInterface : public ::android::BnInterface<IComplexTypeInterface> {
691b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic:
692b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::status_t onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags = 0) override;
693b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};  // class BnComplexTypeInterface
694b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
695b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
696b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
697b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
698b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
69911a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley#endif  // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_
70011a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley)";
701b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
702b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] =
703b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h>
704b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h>
705b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
706b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
707b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
708b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
709b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
710b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::status_t BnComplexTypeInterface::onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) {
7111095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
712b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinswitch (_aidl_code) {
713b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND:
714b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{
71557dbe24bcb8f4509a876e8445c78d9504d7e616aCasey Dahlin::std::unique_ptr<::std::vector<int32_t>> in_goes_in;
716b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<double> in_goes_in_and_out;
717b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<bool> out_goes_out;
718b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<int32_t> _aidl_return;
719b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
720b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
7218993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak;
7228993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
723b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readInt32Vector(&in_goes_in);
724b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
7250eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
7260eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
727b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readDoubleVector(&in_goes_in_and_out);
728b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
729bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak;
730bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
73174b7bf1043d1905e6f999f7c47920319029453c0Christopher Wiley_aidl_ret_status = _aidl_data.resizeOutVector(&out_goes_out);
73274b7bf1043d1905e6f999f7c47920319029453c0Christopher Wileyif (((_aidl_ret_status) != (::android::OK))) {
73374b7bf1043d1905e6f999f7c47920319029453c0Christopher Wileybreak;
73474b7bf1043d1905e6f999f7c47920319029453c0Christopher Wiley}
735b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(Send(in_goes_in, &in_goes_in_and_out, &out_goes_out, &_aidl_return));
736b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
737b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
7380eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
7390eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
740433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
7412aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak;
7422aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley}
743b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeInt32Vector(_aidl_return);
744b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
745bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak;
746bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
747b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeDoubleVector(in_goes_in_and_out);
748b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
7490eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
7500eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
751b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeBoolVector(out_goes_out);
752b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
7530eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
7540eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
755b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
756b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak;
7570dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF:
7580dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{
7590dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times;
760b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
761b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
7628993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak;
7638993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
764b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readInt32(&in_times);
765b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
7660eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
7670eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
768b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(Piff(in_times));
7690dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin}
7700dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak;
771389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlincase Call::TAKESABINDER:
772389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin{
773b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::sp<::foo::IFooType> in_f;
774b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::sp<::foo::IFooType> _aidl_return;
775b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
776b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
777389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
778389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
779b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readStrongBinder(&in_f);
780b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
781389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
782389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
783b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(TakesABinder(in_f, &_aidl_return));
784b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
785b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
786389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
787389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
788433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
789389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
790389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
7912dbab064e029411e230fb86913d58a03dfd18519Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinder(::foo::IFooType::asBinder(_aidl_return));
792b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
793389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
794389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
795389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
796389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
797ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlincase Call::NULLABLEBINDER:
798ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin{
799ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::sp<::foo::IFooType> _aidl_return;
800ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
801ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
802ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinbreak;
803ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
804ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::binder::Status _aidl_status(NullableBinder(&_aidl_return));
805ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
806ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
807ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinbreak;
808ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
809ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (!_aidl_status.isOk()) {
810ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinbreak;
811ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
812ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinder(::foo::IFooType::asBinder(_aidl_return));
813ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
814ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinbreak;
815ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
816ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin}
817ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinbreak;
81856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileycase Call::STRINGLISTMETHOD:
81956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley{
820b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::String16> in_input;
821b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::String16> out_output;
822b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::String16> _aidl_return;
823b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
824b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
82556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
82656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
827b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readString16Vector(&in_input);
828b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
82956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
83056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
831b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(StringListMethod(in_input, &out_output, &_aidl_return));
832b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
833b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
83456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
83556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
836433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
83756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
83856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
839b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeString16Vector(_aidl_return);
840b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
84156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
84256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
843b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeString16Vector(out_output);
844b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
84556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
84656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
84756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
84856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
8497ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlincase Call::BINDERLISTMETHOD:
8507ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin{
851b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::sp<::android::IBinder>> in_input;
852b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::sp<::android::IBinder>> out_output;
853b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::sp<::android::IBinder>> _aidl_return;
854b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
855b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
8567ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
8577ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
858b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
859b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
8607ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
8617ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
862b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(BinderListMethod(in_input, &out_output, &_aidl_return));
863b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
864b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
8657ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
8667ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
867433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
8687ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
8697ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
870b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinderVector(_aidl_return);
871b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
8727ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
8737ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
874b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinderVector(out_output);
875b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
8767ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
8777ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
8787ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
8797ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
880a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlincase Call::TAKESAFILEDESCRIPTOR:
881a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin{
8827cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::base::unique_fd in_f;
8837cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::base::unique_fd _aidl_return;
884b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
885b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
886a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
887a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
888b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readUniqueFileDescriptor(&in_f);
889b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
890a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
891a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
892b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(TakesAFileDescriptor(in_f, &_aidl_return));
893b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
894b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
895a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
896a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
897a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) {
898a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
899a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
900b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeUniqueFileDescriptor(_aidl_return);
901b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
902a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
903a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
904a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
905a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
906a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlincase Call::TAKESAFILEDESCRIPTORARRAY:
907a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin{
9087cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::std::vector<::android::base::unique_fd> in_f;
9097cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::std::vector<::android::base::unique_fd> _aidl_return;
910b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
911b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
912a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
913a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
914b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readUniqueFileDescriptorVector(&in_f);
915b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
916a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
917a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
918b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(TakesAFileDescriptorArray(in_f, &_aidl_return));
919b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
920b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
921a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
922a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
923a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) {
924a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
925a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
926b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeUniqueFileDescriptorVector(_aidl_return);
927b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
928a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
929a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
930a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
931a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
932b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault:
933b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{
934b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BBinder::onTransact(_aidl_code, _aidl_data, _aidl_reply, _aidl_flags);
935b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
936b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak;
937b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
938b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (_aidl_ret_status == ::android::UNEXPECTED_NULL) {
939b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::binder::Status::fromExceptionCode(::android::binder::Status::EX_NULL_POINTER).writeToParcel(_aidl_reply);
940433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley}
941b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinreturn _aidl_ret_status;
942b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
943b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
944b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
945b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
946b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
947b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)";
948b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
949b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenconst char kExpectedComplexTypeServerWithTraceSourceOutput[] =
950b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenR"(#include <android/os/BnComplexTypeInterface.h>
951b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen#include <binder/Parcel.h>
952b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
953b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenennamespace android {
954b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
955b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenennamespace os {
956b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
957b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::status_t BnComplexTypeInterface::onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) {
958b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::status_t _aidl_ret_status = ::android::OK;
959b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenswitch (_aidl_code) {
960b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenencase Call::SEND:
961b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen{
962b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::unique_ptr<::std::vector<int32_t>> in_goes_in;
963b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<double> in_goes_in_and_out;
964b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<bool> out_goes_out;
965b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<int32_t> _aidl_return;
966b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!(_aidl_data.checkInterface(this))) {
967b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = ::android::BAD_TYPE;
968b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
969b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
970b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.readInt32Vector(&in_goes_in);
971b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
972b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
973b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
974b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.readDoubleVector(&in_goes_in_and_out);
975b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
976b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
977b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
978b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.resizeOutVector(&out_goes_out);
979b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
980b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
981b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
982b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_begin(ATRACE_TAG_AIDL, "IComplexTypeInterface::Send::cppServer");
983b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status(Send(in_goes_in, &in_goes_in_and_out, &out_goes_out, &_aidl_return));
984b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_end(ATRACE_TAG_AIDL);
985b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
986b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
987b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
988b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
989b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
990b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
991b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
992b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeInt32Vector(_aidl_return);
993b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
994b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
995b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
996b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeDoubleVector(in_goes_in_and_out);
997b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
998b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
999b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1000b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeBoolVector(out_goes_out);
1001b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1002b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1003b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1004b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1005b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1006b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenencase Call::PIFF:
1007b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen{
1008b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenint32_t in_times;
1009b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!(_aidl_data.checkInterface(this))) {
1010b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = ::android::BAD_TYPE;
1011b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1012b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1013b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.readInt32(&in_times);
1014b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1015b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1016b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1017b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_begin(ATRACE_TAG_AIDL, "IComplexTypeInterface::Piff::cppServer");
1018b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status(Piff(in_times));
1019b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_end(ATRACE_TAG_AIDL);
1020b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1021b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1022b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenencase Call::TAKESABINDER:
1023b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen{
1024b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::sp<::foo::IFooType> in_f;
1025b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::sp<::foo::IFooType> _aidl_return;
1026b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!(_aidl_data.checkInterface(this))) {
1027b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = ::android::BAD_TYPE;
1028b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1029b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1030b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.readStrongBinder(&in_f);
1031b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1032b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1033b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1034b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_begin(ATRACE_TAG_AIDL, "IComplexTypeInterface::TakesABinder::cppServer");
1035b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status(TakesABinder(in_f, &_aidl_return));
1036b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_end(ATRACE_TAG_AIDL);
1037b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
1038b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1039b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1040b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1041b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
1042b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1043b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1044b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeStrongBinder(::foo::IFooType::asBinder(_aidl_return));
1045b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1046b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1047b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1048b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1049b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1050b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenencase Call::NULLABLEBINDER:
1051b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen{
1052b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::sp<::foo::IFooType> _aidl_return;
1053b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!(_aidl_data.checkInterface(this))) {
1054b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = ::android::BAD_TYPE;
1055b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1056b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1057b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_begin(ATRACE_TAG_AIDL, "IComplexTypeInterface::NullableBinder::cppServer");
1058b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status(NullableBinder(&_aidl_return));
1059b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_end(ATRACE_TAG_AIDL);
1060b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
1061b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1062b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1063b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1064b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
1065b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1066b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1067b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeStrongBinder(::foo::IFooType::asBinder(_aidl_return));
1068b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1069b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1070b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1071b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1072b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1073b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenencase Call::STRINGLISTMETHOD:
1074b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen{
1075b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<::android::String16> in_input;
1076b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<::android::String16> out_output;
1077b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<::android::String16> _aidl_return;
1078b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!(_aidl_data.checkInterface(this))) {
1079b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = ::android::BAD_TYPE;
1080b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1081b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1082b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.readString16Vector(&in_input);
1083b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1084b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1085b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1086b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_begin(ATRACE_TAG_AIDL, "IComplexTypeInterface::StringListMethod::cppServer");
1087b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status(StringListMethod(in_input, &out_output, &_aidl_return));
1088b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_end(ATRACE_TAG_AIDL);
1089b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
1090b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1091b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1092b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1093b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
1094b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1095b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1096b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeString16Vector(_aidl_return);
1097b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1098b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1099b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1100b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeString16Vector(out_output);
1101b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1102b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1103b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1104b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1105b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1106b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenencase Call::BINDERLISTMETHOD:
1107b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen{
1108b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<::android::sp<::android::IBinder>> in_input;
1109b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<::android::sp<::android::IBinder>> out_output;
1110b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<::android::sp<::android::IBinder>> _aidl_return;
1111b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!(_aidl_data.checkInterface(this))) {
1112b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = ::android::BAD_TYPE;
1113b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1114b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1115b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
1116b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1117b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1118b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1119b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_begin(ATRACE_TAG_AIDL, "IComplexTypeInterface::BinderListMethod::cppServer");
1120b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status(BinderListMethod(in_input, &out_output, &_aidl_return));
1121b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_end(ATRACE_TAG_AIDL);
1122b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
1123b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1124b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1125b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1126b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
1127b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1128b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1129b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeStrongBinderVector(_aidl_return);
1130b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1131b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1132b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1133b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeStrongBinderVector(out_output);
1134b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1135b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1136b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1137b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1138b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1139b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenencase Call::TAKESAFILEDESCRIPTOR:
1140b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen{
1141b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::base::unique_fd in_f;
1142b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::base::unique_fd _aidl_return;
1143b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!(_aidl_data.checkInterface(this))) {
1144b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = ::android::BAD_TYPE;
1145b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1146b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1147b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.readUniqueFileDescriptor(&in_f);
1148b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1149b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1150b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1151b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_begin(ATRACE_TAG_AIDL, "IComplexTypeInterface::TakesAFileDescriptor::cppServer");
1152b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status(TakesAFileDescriptor(in_f, &_aidl_return));
1153b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_end(ATRACE_TAG_AIDL);
1154b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
1155b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1156b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1157b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1158b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
1159b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1160b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1161b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeUniqueFileDescriptor(_aidl_return);
1162b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1163b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1164b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1165b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1166b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1167b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenencase Call::TAKESAFILEDESCRIPTORARRAY:
1168b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen{
1169b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<::android::base::unique_fd> in_f;
1170b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::std::vector<::android::base::unique_fd> _aidl_return;
1171b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!(_aidl_data.checkInterface(this))) {
1172b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = ::android::BAD_TYPE;
1173b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1174b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1175b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_data.readUniqueFileDescriptorVector(&in_f);
1176b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1177b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1178b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1179b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_begin(ATRACE_TAG_AIDL, "IComplexTypeInterface::TakesAFileDescriptorArray::cppServer");
1180b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen::android::binder::Status _aidl_status(TakesAFileDescriptorArray(in_f, &_aidl_return));
1181b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenatrace_end(ATRACE_TAG_AIDL);
1182b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
1183b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1184b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1185b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1186b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (!_aidl_status.isOk()) {
1187b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1188b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1189b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = _aidl_reply->writeUniqueFileDescriptorVector(_aidl_return);
1190b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (((_aidl_ret_status) != (::android::OK))) {
1191b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1192b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1193b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1194b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1195b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenendefault:
1196b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen{
1197b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = ::android::BBinder::onTransact(_aidl_code, _aidl_data, _aidl_reply, _aidl_flags);
1198b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1199b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenbreak;
1200b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1201b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenif (_aidl_ret_status == ::android::UNEXPECTED_NULL) {
1202b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen_aidl_ret_status = ::android::binder::Status::fromExceptionCode(::android::binder::Status::EX_NULL_POINTER).writeToParcel(_aidl_reply);
1203b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1204b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenenreturn _aidl_ret_status;
1205b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1206b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
1207b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}  // namespace os
1208b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
1209b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}  // namespace android
1210b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen)";
1211b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
1212b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] =
1213b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_
1214b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_
1215b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
12167cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley#include <android-base/unique_fd.h>
1217b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h>
1218b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h>
1219433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley#include <binder/Status.h>
1220b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint>
1221389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <foo/IFooType.h>
1222041c8d7ad2f9660a44e6ebc4f173b125b35f63f0Christopher Wiley#include <memory>
122356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley#include <utils/String16.h>
1224389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <utils/StrongPointer.h>
1225b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector>
1226b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1227b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
1228b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1229b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
1230b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1231b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinclass IComplexTypeInterface : public ::android::IInterface {
1232b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic:
123311a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher WileyDECLARE_META_INTERFACE(ComplexTypeInterface)
1234fd7dc03fdd1e0cd558df43a155ab1644cbe2b553Christopher Wileyenum  : int32_t {
1235fd7dc03fdd1e0cd558df43a155ab1644cbe2b553Christopher Wiley  MY_CONSTANT = 3,
1236fd7dc03fdd1e0cd558df43a155ab1644cbe2b553Christopher Wiley};
123757dbe24bcb8f4509a876e8445c78d9504d7e616aCasey Dahlinvirtual ::android::binder::Status Send(const ::std::unique_ptr<::std::vector<int32_t>>& goes_in, ::std::vector<double>* goes_in_and_out, ::std::vector<bool>* goes_out, ::std::vector<int32_t>* _aidl_return) = 0;
1238b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status Piff(int32_t times) = 0;
1239b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status TakesABinder(const ::android::sp<::foo::IFooType>& f, ::android::sp<::foo::IFooType>* _aidl_return) = 0;
1240ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinvirtual ::android::binder::Status NullableBinder(::android::sp<::foo::IFooType>* _aidl_return) = 0;
1241b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status StringListMethod(const ::std::vector<::android::String16>& input, ::std::vector<::android::String16>* output, ::std::vector<::android::String16>* _aidl_return) = 0;
1242b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status BinderListMethod(const ::std::vector<::android::sp<::android::IBinder>>& input, ::std::vector<::android::sp<::android::IBinder>>* output, ::std::vector<::android::sp<::android::IBinder>>* _aidl_return) = 0;
12437cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wileyvirtual ::android::binder::Status TakesAFileDescriptor(const ::android::base::unique_fd& f, ::android::base::unique_fd* _aidl_return) = 0;
12447cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wileyvirtual ::android::binder::Status TakesAFileDescriptorArray(const ::std::vector<::android::base::unique_fd>& f, ::std::vector<::android::base::unique_fd>* _aidl_return) = 0;
1245b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call {
1246b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin  SEND = ::android::IBinder::FIRST_CALL_TRANSACTION + 0,
1247b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin  PIFF = ::android::IBinder::FIRST_CALL_TRANSACTION + 1,
1248b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin  TAKESABINDER = ::android::IBinder::FIRST_CALL_TRANSACTION + 2,
1249ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin  NULLABLEBINDER = ::android::IBinder::FIRST_CALL_TRANSACTION + 3,
1250ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin  STRINGLISTMETHOD = ::android::IBinder::FIRST_CALL_TRANSACTION + 4,
1251ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin  BINDERLISTMETHOD = ::android::IBinder::FIRST_CALL_TRANSACTION + 5,
1252ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin  TAKESAFILEDESCRIPTOR = ::android::IBinder::FIRST_CALL_TRANSACTION + 6,
1253ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin  TAKESAFILEDESCRIPTORARRAY = ::android::IBinder::FIRST_CALL_TRANSACTION + 7,
1254b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};
1255b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};  // class IComplexTypeInterface
1256b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1257b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
1258b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1259b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
1260b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
126111a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley#endif  // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_
126211a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley)";
1263b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1264b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] =
1265b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h>
1266b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h>
1267b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1268b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
1269b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1270b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
1271b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
127211a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher WileyIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface")
1273b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1274b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
1275b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1276b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
1277b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)";
1278b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1279a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace
1280a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
1281b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test {
12820c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected:
1283389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  ASTTest(string file_path, string file_contents)
1284389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin      : file_path_(file_path),
12855679952c38925a54b75b087068887002e57f3174Christopher Wiley        file_contents_(file_contents) {
12865679952c38925a54b75b087068887002e57f3174Christopher Wiley    types_.Init();
12875679952c38925a54b75b087068887002e57f3174Christopher Wiley  }
1288b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
128990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> Parse() {
1290389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin    io_delegate_.SetFileContents(file_path_, file_contents_);
129190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley
129290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    unique_ptr<AidlInterface> ret;
129390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    std::vector<std::unique_ptr<AidlImport>> imports;
1294632801d891bd269badc780ab5f0f08e56e6df10aChristopher Wiley    AidlError err = ::android::aidl::internals::load_and_validate_aidl(
129590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        {},  // no preprocessed files
1296389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        {"."},
1297389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        file_path_,
1298b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen        false, // generate_traces
1299389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        io_delegate_,
1300389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        &types_,
130190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        &ret,
130290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        &imports);
1303a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
1304632801d891bd269badc780ab5f0f08e56e6df10aChristopher Wiley    if (err != AidlError::OK)
13052cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin      return nullptr;
1306a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
13072cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin    return ret;
130890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  }
1309a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
13100c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  void Compare(Document* doc, const char* expected) {
13110c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    string output;
13120c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    unique_ptr<CodeWriter> cw = GetStringWriter(&output);
1313a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
13140c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    doc->Write(cw.get());
1315a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
131680ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    if (expected == output) {
131780ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin      return; // Success
131880ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    }
131980ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin
132080ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    test::PrintDiff(expected, output);
132180ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    FAIL() << "Document contents did not match expected contents";
13220c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  }
1323389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin
1324389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  const string file_path_;
1325389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  const string file_contents_;
1326389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  FakeIoDelegate io_delegate_;
1327389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  TypeNamespace types_;
13280c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley};
1329a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
1330b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest {
1331389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public:
1332389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  ComplexTypeInterfaceASTTest()
1333389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin      : ASTTest("android/os/IComplexTypeInterface.aidl",
1334389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin                kComplexTypeInterfaceAIDL) {
1335389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin    io_delegate_.SetFileContents("foo/IFooType.aidl",
1336389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin                                 "package foo; interface IFooType {}");
1337389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  }
1338b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};
1339b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
1340b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) {
134190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
13420c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  ASSERT_NE(interface, nullptr);
1343389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildClientHeader(types_, *interface);
1344b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput);
13450c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}
13460c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
1347b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) {
134890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
134936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  ASSERT_NE(interface, nullptr);
1350389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface);
1351b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeClientSourceOutput);
135236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}
135336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
1354b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSourceWithTrace) {
1355b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen  unique_ptr<AidlInterface> interface = Parse();
1356b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen  ASSERT_NE(interface, nullptr);
1357b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen  interface->SetGenerateTraces(true);
1358b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen  unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface);
1359b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen  Compare(doc.get(), kExpectedComplexTypeClientWithTraceSourceOutput);
1360b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1361b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
1362b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) {
136390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
1364fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  ASSERT_NE(interface, nullptr);
1365389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildServerHeader(types_, *interface);
1366b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput);
1367fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}
1368fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
1369b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) {
137090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
1371ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  ASSERT_NE(interface, nullptr);
1372389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface);
1373b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeServerSourceOutput);
1374ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
1375ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
1376b06c82923869f50e9641f7dac56df0aebe637845Martijn CoenenTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSourceWithTrace) {
1377b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen  unique_ptr<AidlInterface> interface = Parse();
1378b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen  ASSERT_NE(interface, nullptr);
1379b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen  interface->SetGenerateTraces(true);
1380b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen  unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface);
1381b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen  Compare(doc.get(), kExpectedComplexTypeServerWithTraceSourceOutput);
1382b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen}
1383b06c82923869f50e9641f7dac56df0aebe637845Martijn Coenen
1384b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) {
138590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
13860c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  ASSERT_NE(interface, nullptr);
1387389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildInterfaceHeader(types_, *interface);
1388b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput);
1389a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}
1390a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
1391b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) {
139290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
13931dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  ASSERT_NE(interface, nullptr);
1394389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildInterfaceSource(types_, *interface);
1395b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput);
13961dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley}
13971dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
13989d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileynamespace test_io_handling {
13999d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14009d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kInputPath[] = "a/IFoo.aidl";
14019d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kOutputPath[] = "output.cpp";
14029d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kHeaderDir[] = "headers";
14039d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kInterfaceHeaderRelPath[] = "a/IFoo.h";
14049d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14059d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley}  // namespace test_io_handling
14069d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14079d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyclass IoErrorHandlingTest : public ASTTest {
14089d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley public:
14099d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  IoErrorHandlingTest ()
14109d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley      : ASTTest(test_io_handling::kInputPath,
14119d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley                "package a; interface IFoo {}"),
14129d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley        options_(GetOptions()) {}
14139d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14149d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  const unique_ptr<CppOptions> options_;
14159d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14169d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley private:
14179d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  static unique_ptr<CppOptions> GetOptions() {
14189d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley    using namespace test_io_handling;
14199d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14209d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley    const int argc = 4;
14219d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley    const char* cmdline[argc] = {
14229d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley      "aidl-cpp", kInputPath, kHeaderDir, kOutputPath
14239d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley    };
14249d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley    return CppOptions::Parse(argc, cmdline);
14259d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  }
14269d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley};
14279d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14289d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, GenerateCorrectlyAbsentErrors) {
14299d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // Confirm that this is working correctly without I/O problems.
14309d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  const unique_ptr<AidlInterface> interface = Parse();
14319d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_NE(interface, nullptr);
14329d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_TRUE(GenerateCpp(*options_, types_, *interface, io_delegate_));
14339d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley}
14349d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14359d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, HandlesBadHeaderWrite) {
14369d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  using namespace test_io_handling;
14379d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  const unique_ptr<AidlInterface> interface = Parse();
14389d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_NE(interface, nullptr);
14399d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14409d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // Simulate issues closing the interface header.
14419d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  const string header_path =
14429d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley      StringPrintf("%s%c%s", kHeaderDir, OS_PATH_SEPARATOR,
14439d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley                   kInterfaceHeaderRelPath);
14449d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  io_delegate_.AddBrokenFilePath(header_path);
14459d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_FALSE(GenerateCpp(*options_, types_, *interface, io_delegate_));
14469d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // We should never attempt to write the C++ file if we fail writing headers.
14479d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_FALSE(io_delegate_.GetWrittenContents(kOutputPath, nullptr));
14489d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // We should remove partial results.
14499d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_TRUE(io_delegate_.PathWasRemoved(header_path));
14509d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley}
14519d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14529d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, HandlesBadCppWrite) {
14539d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  using test_io_handling::kOutputPath;
14549d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  const unique_ptr<AidlInterface> interface = Parse();
14559d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_NE(interface, nullptr);
14569d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
14579d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // Simulate issues closing the cpp file.
14589d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  io_delegate_.AddBrokenFilePath(kOutputPath);
14599d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_FALSE(GenerateCpp(*options_, types_, *interface, io_delegate_));
14609d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // We should remove partial results.
14619d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_TRUE(io_delegate_.PathWasRemoved(kOutputPath));
14629d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley}
14639d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
1464f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley}  // namespace cpp
1465a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace aidl
1466a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace android
1467