diff options
author | 2022-12-29 00:34:24 +0000 | |
---|---|---|
committer | 2023-01-20 23:26:18 +0000 | |
commit | dd511058abd4c8014aba989c78584639cc65fb8d (patch) | |
tree | ac59e7bf71873aeb6947b106455517eb5112829b | |
parent | bcb91683b14b851bca61eedeb3d607ba5f026c12 (diff) |
libbinder*: IBinder/IInterface toString impl
Bug: 259162245
Test: N/A
Change-Id: If612cbd323e5d35b87bec5144b7e35358d718be1
-rw-r--r-- | libs/binder/ndk/include_cpp/android/binder_to_string.h | 46 |
1 files changed, 19 insertions, 27 deletions
diff --git a/libs/binder/ndk/include_cpp/android/binder_to_string.h b/libs/binder/ndk/include_cpp/android/binder_to_string.h index 9b0d222147..b0c7f6d4a9 100644 --- a/libs/binder/ndk/include_cpp/android/binder_to_string.h +++ b/libs/binder/ndk/include_cpp/android/binder_to_string.h @@ -139,30 +139,6 @@ class IsIterable { }; template <typename _T> -class ToEmptyString { - template <typename _U> - static std::enable_if_t<false -#ifdef HAS_NDK_INTERFACE - || std::is_base_of_v<::ndk::ICInterface, _U> -#if __ANDROID_API__ >= 31 - || std::is_same_v<::ndk::AParcelableHolder, _U> -#endif -#endif // HAS_NDK_INTERFACE -#ifdef HAS_CPP_INTERFACE - || std::is_base_of_v<IInterface, _U> || - std::is_same_v<IBinder, _U> -#endif - , - std::true_type> - _test(int); - template <typename _U> - static std::false_type _test(...); - - public: - enum { value = decltype(_test<_T>(0))::value }; -}; - -template <typename _T> struct TypeDependentFalse { enum { value = false }; }; @@ -171,9 +147,7 @@ struct TypeDependentFalse { template <typename _T> std::string ToString(const _T& t) { - if constexpr (details::ToEmptyString<_T>::value) { - return "<unimplemented>"; - } else if constexpr (std::is_same_v<bool, _T>) { + if constexpr (std::is_same_v<bool, _T>) { return t ? "true" : "false"; } else if constexpr (std::is_same_v<char16_t, _T>) { // TODO(b/244494451): codecvt is deprecated in C++17 -- suppress the @@ -193,6 +167,24 @@ std::string ToString(const _T& t) { return ss.str(); } else if constexpr (std::is_same_v<::ndk::ScopedFileDescriptor, _T>) { return "fd:" + std::to_string(t.get()); + } else if constexpr (std::is_base_of_v<::ndk::ICInterface, _T>) { + // TODO(b/266248339): this format is to make it easy to handle resolv_integration_test + // freezing the output format. We would like to print more info. + return "<interface>"; +#if __ANDROID_API__ >= 31 + } else if constexpr (std::is_same_v<::ndk::AParcelableHolder, _T>) { + return "AParcelableHolder"; +#endif +#endif // HAS_NDK_INTERFACE +#ifdef HAS_CPP_INTERFACE + } else if constexpr (std::is_base_of_v<IInterface, _T>) { + std::stringstream ss; + ss << "interface:" << std::hex << &t; + return ss.str(); + } else if constexpr (std::is_same_v<IBinder, _T>) { + std::stringstream ss; + ss << "binder:" << std::hex << &t; + return ss.str(); #endif #ifdef HAS_STRING16 } else if constexpr (std::is_same_v<String16, _T>) { |