diff --git a/runtime/src/main/java/dev/cel/runtime/AccumulatedUnknowns.java b/runtime/src/main/java/dev/cel/runtime/AccumulatedUnknowns.java index 9d58549fd..77435a042 100644 --- a/runtime/src/main/java/dev/cel/runtime/AccumulatedUnknowns.java +++ b/runtime/src/main/java/dev/cel/runtime/AccumulatedUnknowns.java @@ -18,7 +18,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.List; +import java.util.HashSet; +import java.util.Set; /** * An internal representation used for fast accumulation of unknown expr IDs and attributes. For @@ -27,14 +28,14 @@ */ final class AccumulatedUnknowns { private static final int MAX_UNKNOWN_ATTRIBUTE_SIZE = 500_000; - private final List exprIds; - private final List attributes; + private final Set exprIds; + private final Set attributes; - List exprIds() { + Set exprIds() { return exprIds; } - List attributes() { + Set attributes() { return attributes; } @@ -55,19 +56,20 @@ static AccumulatedUnknowns create(Collection ids) { } static AccumulatedUnknowns create(Collection exprIds, Collection attributes) { - return new AccumulatedUnknowns(new ArrayList<>(exprIds), new ArrayList<>(attributes)); + return new AccumulatedUnknowns(new HashSet<>(exprIds), new HashSet<>(attributes)); } private static void enforceMaxAttributeSize( - List lhsAttributes, List rhsAttributes) { - int totalSize = lhsAttributes.size() + rhsAttributes.size(); - if (totalSize > MAX_UNKNOWN_ATTRIBUTE_SIZE) { + Set lhsAttributes, Set rhsAttributes) { + if (lhsAttributes.size() + rhsAttributes.size() > MAX_UNKNOWN_ATTRIBUTE_SIZE) { throw new IllegalArgumentException( - "Exceeded maximum allowed unknown attributes: " + totalSize); + String.format( + "Exceeded maximum allowed unknown attributes when merging: %s, %s", + lhsAttributes.size(), rhsAttributes.size())); } } - private AccumulatedUnknowns(List exprIds, List attributes) { + private AccumulatedUnknowns(Set exprIds, Set attributes) { this.exprIds = exprIds; this.attributes = attributes; }