Skip to content

Commit b5e4e74

Browse files
authored
Merge pull request #1186 from HubSpot/optional-resolvable
Count Optional as resolvable inside EagerExpressionResolver
2 parents ee49945 + 363cae2 commit b5e4e74

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

src/main/java/com/hubspot/jinjava/util/EagerExpressionResolver.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.List;
2727
import java.util.Map;
2828
import java.util.Objects;
29+
import java.util.Optional;
2930
import java.util.Set;
3031
import java.util.function.Supplier;
3132
import java.util.regex.Pattern;
@@ -335,6 +336,11 @@ private static boolean isResolvableObjectRec(
335336
}
336337
return (Arrays.stream((Object[]) val)).filter(Objects::nonNull)
337338
.allMatch(item -> isResolvableObjectRec(item, depth + 1, maxDepth, maxSize));
339+
} else if (val instanceof Optional) {
340+
return ((Optional<?>) val).map(item ->
341+
isResolvableObjectRec(item, depth + 1, maxDepth, maxSize)
342+
)
343+
.orElse(true);
338344
}
339345
} catch (DeferredValueException e) {
340346
if (!(val instanceof PartiallyDeferredValue)) {

src/test/java/com/hubspot/jinjava/util/EagerExpressionResolverTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -954,4 +954,14 @@ public void itCountsBigDecimalAsPrimitive() {
954954
assertThat(EagerExpressionResolver.isResolvableObject(new BigDecimal("2.1E7")))
955955
.isTrue();
956956
}
957+
958+
@Test
959+
public void itCountsOptionalAsResolvable() {
960+
assertThat(
961+
EagerExpressionResolver.isResolvableObject(
962+
ImmutableList.of(Optional.of(123), Optional.empty())
963+
)
964+
)
965+
.isTrue();
966+
}
957967
}

0 commit comments

Comments
 (0)