|
17 | 17 | import datadog.trace.bootstrap.debugger.el.ValueReferences; |
18 | 18 | import java.util.ArrayList; |
19 | 19 | import java.util.Collection; |
20 | | -import java.util.Collections; |
21 | 20 | import java.util.HashMap; |
22 | 21 | import java.util.HashSet; |
23 | 22 | import java.util.Map; |
@@ -48,41 +47,52 @@ public CollectionValue<?> evaluate(ValueReferenceResolver valueRefResolver) { |
48 | 47 | checkSupportedList(materialized, this); |
49 | 48 | Collection<Object> filtered = new ArrayList<>(); |
50 | 49 | int len = materialized.count(); |
51 | | - for (int i = 0; i < len; i++) { |
52 | | - Object value = materialized.get(i).getValue(); |
53 | | - if (filterExpression.evaluate( |
54 | | - valueRefResolver.withExtensions( |
55 | | - Collections.singletonMap(ValueReferences.ITERATOR_EXTENSION_NAME, value)))) { |
56 | | - filtered.add(value); |
| 50 | + try { |
| 51 | + for (int i = 0; i < len; i++) { |
| 52 | + Object value = materialized.get(i).getValue(); |
| 53 | + valueRefResolver.addExtension(ValueReferences.ITERATOR_EXTENSION_NAME, value); |
| 54 | + if (filterExpression.evaluate(valueRefResolver)) { |
| 55 | + filtered.add(value); |
| 56 | + } |
57 | 57 | } |
| 58 | + } finally { |
| 59 | + valueRefResolver.removeExtension(ValueReferences.ITERATOR_EXTENSION_NAME); |
58 | 60 | } |
59 | 61 | return new ListValue(filtered); |
60 | 62 | } else if (collectionValue instanceof MapValue) { |
61 | 63 | MapValue materialized = (MapValue) collectionValue; |
62 | 64 | checkSupportedMap(materialized, this); |
63 | 65 | Map<Object, Object> filtered = new HashMap<>(); |
64 | | - for (Value<?> key : materialized.getKeys()) { |
65 | | - Value<?> value = key.isUndefined() ? Value.undefinedValue() : materialized.get(key); |
66 | | - Map<String, Object> valueRefExtensions = new HashMap<>(); |
67 | | - valueRefExtensions.put(ValueReferences.KEY_EXTENSION_NAME, key); |
68 | | - valueRefExtensions.put(ValueReferences.VALUE_EXTENSION_NAME, value); |
69 | | - valueRefExtensions.put( |
70 | | - ValueReferences.ITERATOR_EXTENSION_NAME, new MapValue.Entry(key, value)); |
71 | | - if (filterExpression.evaluate(valueRefResolver.withExtensions(valueRefExtensions))) { |
72 | | - filtered.put(key.getValue(), value.getValue()); |
| 66 | + try { |
| 67 | + for (Value<?> key : materialized.getKeys()) { |
| 68 | + Value<?> value = key.isUndefined() ? Value.undefinedValue() : materialized.get(key); |
| 69 | + valueRefResolver.addExtension(ValueReferences.KEY_EXTENSION_NAME, key); |
| 70 | + valueRefResolver.addExtension(ValueReferences.VALUE_EXTENSION_NAME, value); |
| 71 | + valueRefResolver.addExtension( |
| 72 | + ValueReferences.ITERATOR_EXTENSION_NAME, new MapValue.Entry(key, value)); |
| 73 | + if (filterExpression.evaluate(valueRefResolver)) { |
| 74 | + filtered.put(key.getValue(), value.getValue()); |
| 75 | + } |
73 | 76 | } |
| 77 | + } finally { |
| 78 | + valueRefResolver.removeExtension(ValueReferences.KEY_EXTENSION_NAME); |
| 79 | + valueRefResolver.removeExtension(ValueReferences.VALUE_EXTENSION_NAME); |
| 80 | + valueRefResolver.removeExtension(ValueReferences.ITERATOR_EXTENSION_NAME); |
74 | 81 | } |
75 | 82 | return new MapValue(filtered); |
76 | 83 | } else if (collectionValue instanceof SetValue) { |
77 | 84 | SetValue materialized = (SetValue) collectionValue; |
78 | 85 | Collection<Object> filtered = new HashSet<>(); |
79 | 86 | Set<?> setHolder = checkSupportedSet(materialized, this); |
80 | | - for (Object value : setHolder) { |
81 | | - if (filterExpression.evaluate( |
82 | | - valueRefResolver.withExtensions( |
83 | | - Collections.singletonMap(ValueReferences.ITERATOR_EXTENSION_NAME, value)))) { |
84 | | - filtered.add(value); |
| 87 | + try { |
| 88 | + for (Object value : setHolder) { |
| 89 | + valueRefResolver.addExtension(ValueReferences.ITERATOR_EXTENSION_NAME, value); |
| 90 | + if (filterExpression.evaluate(valueRefResolver)) { |
| 91 | + filtered.add(value); |
| 92 | + } |
85 | 93 | } |
| 94 | + } finally { |
| 95 | + valueRefResolver.removeExtension(ValueReferences.ITERATOR_EXTENSION_NAME); |
86 | 96 | } |
87 | 97 | return new SetValue(filtered); |
88 | 98 | } |
|
0 commit comments