From 5375f62dc13f5109a320d66f96e87bb6e1ed913a Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 21 Jun 2023 13:16:04 +0200 Subject: [PATCH] Cache hasUnresolvableGenerics result for repeated checks Closes gh-30713 (cherry picked from commit 93218a06baa528401f2baeeb5e02b0582ae44d43) --- .../org/springframework/core/ResolvableType.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spring-core/src/main/java/org/springframework/core/ResolvableType.java b/spring-core/src/main/java/org/springframework/core/ResolvableType.java index fcf99a3e713..831e3a38da3 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -133,6 +133,9 @@ public class ResolvableType implements Serializable { @Nullable private volatile ResolvableType[] generics; + @Nullable + private volatile Boolean unresolvableGenerics; + /** * Private constructor used to create a new {@link ResolvableType} for cache key purposes, @@ -545,6 +548,15 @@ public class ResolvableType implements Serializable { if (this == NONE) { return false; } + Boolean unresolvableGenerics = this.unresolvableGenerics; + if (unresolvableGenerics == null) { + unresolvableGenerics = determineUnresolvableGenerics(); + this.unresolvableGenerics = unresolvableGenerics; + } + return unresolvableGenerics; + } + + private boolean determineUnresolvableGenerics() { ResolvableType[] generics = getGenerics(); for (ResolvableType generic : generics) { if (generic.isUnresolvableTypeVariable() || generic.isWildcardWithoutBounds()) {