From aaec509f18bcf65193188a0791d6c8980ef53316 Mon Sep 17 00:00:00 2001 From: Sokwhan Huh Date: Mon, 30 Mar 2026 15:13:03 -0700 Subject: [PATCH] Switch from enhanced for-loop to indexed one to improve comprehension performance PiperOrigin-RevId: 891934916 --- .../dev/cel/runtime/planner/NamespacedAttribute.java | 10 ++++++---- .../dev/cel/runtime/planner/RelativeAttribute.java | 5 +++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/runtime/src/main/java/dev/cel/runtime/planner/NamespacedAttribute.java b/runtime/src/main/java/dev/cel/runtime/planner/NamespacedAttribute.java index ed37eada1..d51336d80 100644 --- a/runtime/src/main/java/dev/cel/runtime/planner/NamespacedAttribute.java +++ b/runtime/src/main/java/dev/cel/runtime/planner/NamespacedAttribute.java @@ -77,8 +77,9 @@ public Object resolve(long exprId, GlobalResolver ctx, ExecutionFrame frame) { if (partialVars != null) { ImmutableList patterns = partialVars.unknowns(); - for (Qualifier qualifier : qualifiers) { - attr = attr.qualify(CelAttribute.Qualifier.fromGeneric(qualifier.value())); + // Avoid enhanced for loop to prevent UnmodifiableIterator from being allocated + for (int i = 0; i < qualifiers.size(); i++) { + attr = attr.qualify(CelAttribute.Qualifier.fromGeneric(qualifiers.get(i).value())); } CelAttributePattern partialMatch = findPartialMatchingPattern(attr, patterns).orElse(null); @@ -178,8 +179,9 @@ private static Object applyQualifiers( Object value, CelValueConverter celValueConverter, ImmutableList qualifiers) { Object obj = celValueConverter.toRuntimeValue(value); - for (Qualifier qualifier : qualifiers) { - obj = qualifier.qualify(obj); + // Avoid enhanced for loop to prevent UnmodifiableIterator from being allocated + for (int i = 0; i < qualifiers.size(); i++) { + obj = qualifiers.get(i).qualify(obj); } return celValueConverter.maybeUnwrap(obj); diff --git a/runtime/src/main/java/dev/cel/runtime/planner/RelativeAttribute.java b/runtime/src/main/java/dev/cel/runtime/planner/RelativeAttribute.java index 1ab2fa3e7..addbeb4d0 100644 --- a/runtime/src/main/java/dev/cel/runtime/planner/RelativeAttribute.java +++ b/runtime/src/main/java/dev/cel/runtime/planner/RelativeAttribute.java @@ -40,8 +40,9 @@ public Object resolve(long exprId, GlobalResolver ctx, ExecutionFrame frame) { obj = celValueConverter.toRuntimeValue(obj); - for (Qualifier qualifier : qualifiers) { - obj = qualifier.qualify(obj); + // Avoid enhanced for loop to prevent UnmodifiableIterator from being allocated + for (int i = 0; i < qualifiers.size(); i++) { + obj = qualifiers.get(i).qualify(obj); } return celValueConverter.maybeUnwrap(obj);