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; }