diff options
-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>) { |