[Stats] Migrate Java to Attributes().

To unblock code cleanup, uses of Members() are replaced by
Attributes(). This will allow replacing RTCStatsMember<T> with
absl::optional<T> in a future CL.

Bug: webrtc:15164
Change-Id: Ic4ca0d333a9cdaa78739bd8dd4515d2ecfacffbc
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/334162
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41512}
diff --git a/sdk/android/src/jni/pc/rtc_stats_collector_callback_wrapper.cc b/sdk/android/src/jni/pc/rtc_stats_collector_callback_wrapper.cc
index 8d0e34c..dc1dcf3 100644
--- a/sdk/android/src/jni/pc/rtc_stats_collector_callback_wrapper.cc
+++ b/sdk/android/src/jni/pc/rtc_stats_collector_callback_wrapper.cc
@@ -42,80 +42,53 @@
       env, container, java_math_BigInteger_clazz(env), &NativeToJavaBigInteger);
 }
 
-ScopedJavaLocalRef<jobject> MemberToJava(
-    JNIEnv* env,
-    const RTCStatsMemberInterface& member) {
-  switch (member.type()) {
-    case RTCStatsMemberInterface::kBool:
-      return NativeToJavaBoolean(env, *member.cast_to<RTCStatsMember<bool>>());
-
-    case RTCStatsMemberInterface::kInt32:
-      return NativeToJavaInteger(env,
-                                 *member.cast_to<RTCStatsMember<int32_t>>());
-
-    case RTCStatsMemberInterface::kUint32:
-      return NativeToJavaLong(env, *member.cast_to<RTCStatsMember<uint32_t>>());
-
-    case RTCStatsMemberInterface::kInt64:
-      return NativeToJavaLong(env, *member.cast_to<RTCStatsMember<int64_t>>());
-
-    case RTCStatsMemberInterface::kUint64:
-      return NativeToJavaBigInteger(
-          env, *member.cast_to<RTCStatsMember<uint64_t>>());
-
-    case RTCStatsMemberInterface::kDouble:
-      return NativeToJavaDouble(env, *member.cast_to<RTCStatsMember<double>>());
-
-    case RTCStatsMemberInterface::kString:
-      return NativeToJavaString(env,
-                                *member.cast_to<RTCStatsMember<std::string>>());
-
-    case RTCStatsMemberInterface::kSequenceBool:
-      return NativeToJavaBooleanArray(
-          env, *member.cast_to<RTCStatsMember<std::vector<bool>>>());
-
-    case RTCStatsMemberInterface::kSequenceInt32:
-      return NativeToJavaIntegerArray(
-          env, *member.cast_to<RTCStatsMember<std::vector<int32_t>>>());
-
-    case RTCStatsMemberInterface::kSequenceUint32: {
-      const std::vector<uint32_t>& v =
-          *member.cast_to<RTCStatsMember<std::vector<uint32_t>>>();
-      return NativeToJavaLongArray(env,
-                                   std::vector<int64_t>(v.begin(), v.end()));
-    }
-    case RTCStatsMemberInterface::kSequenceInt64:
-      return NativeToJavaLongArray(
-          env, *member.cast_to<RTCStatsMember<std::vector<int64_t>>>());
-
-    case RTCStatsMemberInterface::kSequenceUint64:
-      return NativeToJavaBigIntegerArray(
-          env, *member.cast_to<RTCStatsMember<std::vector<uint64_t>>>());
-
-    case RTCStatsMemberInterface::kSequenceDouble:
-      return NativeToJavaDoubleArray(
-          env, *member.cast_to<RTCStatsMember<std::vector<double>>>());
-
-    case RTCStatsMemberInterface::kSequenceString:
-      return NativeToJavaStringArray(
-          env, *member.cast_to<RTCStatsMember<std::vector<std::string>>>());
-
-    case RTCStatsMemberInterface::kMapStringUint64:
-      return NativeToJavaMap(
-          env,
-          *member.cast_to<RTCStatsMember<std::map<std::string, uint64_t>>>(),
-          [](JNIEnv* env, const auto& entry) {
-            return std::make_pair(NativeToJavaString(env, entry.first),
-                                  NativeToJavaBigInteger(env, entry.second));
-          });
-
-    case RTCStatsMemberInterface::kMapStringDouble:
-      return NativeToJavaMap(
-          env, *member.cast_to<RTCStatsMember<std::map<std::string, double>>>(),
-          [](JNIEnv* env, const auto& entry) {
-            return std::make_pair(NativeToJavaString(env, entry.first),
-                                  NativeToJavaDouble(env, entry.second));
-          });
+ScopedJavaLocalRef<jobject> AttributeToJava(JNIEnv* env,
+                                            const Attribute& attribute) {
+  if (attribute.holds_alternative<bool>()) {
+    return NativeToJavaBoolean(env, attribute.get<bool>());
+  } else if (attribute.holds_alternative<int32_t>()) {
+    return NativeToJavaInteger(env, attribute.get<int32_t>());
+  } else if (attribute.holds_alternative<uint32_t>()) {
+    return NativeToJavaLong(env, attribute.get<uint32_t>());
+  } else if (attribute.holds_alternative<int64_t>()) {
+    return NativeToJavaLong(env, attribute.get<int64_t>());
+  } else if (attribute.holds_alternative<uint64_t>()) {
+    return NativeToJavaBigInteger(env, attribute.get<uint64_t>());
+  } else if (attribute.holds_alternative<double>()) {
+    return NativeToJavaDouble(env, attribute.get<double>());
+  } else if (attribute.holds_alternative<std::string>()) {
+    return NativeToJavaString(env, attribute.get<std::string>());
+  } else if (attribute.holds_alternative<std::vector<bool>>()) {
+    return NativeToJavaBooleanArray(env, attribute.get<std::vector<bool>>());
+  } else if (attribute.holds_alternative<std::vector<int32_t>>()) {
+    return NativeToJavaIntegerArray(env, attribute.get<std::vector<int32_t>>());
+  } else if (attribute.holds_alternative<std::vector<uint32_t>>()) {
+    const std::vector<uint32_t>& v = attribute.get<std::vector<uint32_t>>();
+    return NativeToJavaLongArray(env, std::vector<int64_t>(v.begin(), v.end()));
+  } else if (attribute.holds_alternative<std::vector<int64_t>>()) {
+    return NativeToJavaLongArray(env, attribute.get<std::vector<int64_t>>());
+  } else if (attribute.holds_alternative<std::vector<uint64_t>>()) {
+    return NativeToJavaBigIntegerArray(env,
+                                       attribute.get<std::vector<uint64_t>>());
+  } else if (attribute.holds_alternative<std::vector<double>>()) {
+    return NativeToJavaDoubleArray(env, attribute.get<std::vector<double>>());
+  } else if (attribute.holds_alternative<std::vector<std::string>>()) {
+    return NativeToJavaStringArray(env,
+                                   attribute.get<std::vector<std::string>>());
+  } else if (attribute.holds_alternative<std::map<std::string, uint64_t>>()) {
+    return NativeToJavaMap(
+        env, attribute.get<std::map<std::string, uint64_t>>(),
+        [](JNIEnv* env, const auto& entry) {
+          return std::make_pair(NativeToJavaString(env, entry.first),
+                                NativeToJavaBigInteger(env, entry.second));
+        });
+  } else if (attribute.holds_alternative<std::map<std::string, double>>()) {
+    return NativeToJavaMap(env, attribute.get<std::map<std::string, double>>(),
+                           [](JNIEnv* env, const auto& entry) {
+                             return std::make_pair(
+                                 NativeToJavaString(env, entry.first),
+                                 NativeToJavaDouble(env, entry.second));
+                           });
   }
   RTC_DCHECK_NOTREACHED();
   return nullptr;
@@ -124,11 +97,11 @@
 ScopedJavaLocalRef<jobject> NativeToJavaRtcStats(JNIEnv* env,
                                                  const RTCStats& stats) {
   JavaMapBuilder builder(env);
-  for (auto* const member : stats.Members()) {
-    if (!member->is_defined())
+  for (const auto& attribute : stats.Attributes()) {
+    if (!attribute.has_value())
       continue;
-    builder.put(NativeToJavaString(env, member->name()),
-                MemberToJava(env, *member));
+    builder.put(NativeToJavaString(env, attribute.name()),
+                AttributeToJava(env, attribute));
   }
   return Java_RTCStats_create(
       env, stats.timestamp().us(), NativeToJavaString(env, stats.type()),