From 93218a06baa528401f2baeeb5e02b0582ae44d43 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 --- .../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 d4ae15af06b..2562ffb9fd5 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, @@ -544,6 +547,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()) {