From 1a18882a5d233be28d9104e5be96b6f9d7f60fb6 Mon Sep 17 00:00:00 2001 From: Mark Hansen Date: Tue, 9 Jul 2024 18:02:30 -0700 Subject: [PATCH] Avoid iterator allocation in FieldSet.isInitialized PiperOrigin-RevId: 650814506 --- java/core/src/main/java/com/google/protobuf/FieldSet.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/java/core/src/main/java/com/google/protobuf/FieldSet.java b/java/core/src/main/java/com/google/protobuf/FieldSet.java index 0594cdb3b1..f536be2640 100644 --- a/java/core/src/main/java/com/google/protobuf/FieldSet.java +++ b/java/core/src/main/java/com/google/protobuf/FieldSet.java @@ -442,12 +442,17 @@ final class FieldSet> { return true; } + // Avoid iterator allocation. + @SuppressWarnings({"ForeachList", "ForeachListWithUserVar"}) private static > boolean isInitialized( final Map.Entry entry) { final T descriptor = entry.getKey(); if (descriptor.getLiteJavaType() == WireFormat.JavaType.MESSAGE) { if (descriptor.isRepeated()) { - for (final Object element : (List) entry.getValue()) { + List list = (List) entry.getValue(); + int listSize = list.size(); + for (int i = 0; i < listSize; i++) { + Object element = list.get(i); if (!isMessageFieldValueInitialized(element)) { return false; }