From 137e54db0568f59ece75f79518317155a1fa18f2 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 19 Nov 2019 23:22:36 +0300 Subject: [PATCH] FIR Java (raw type bounds erasure): make better protection from recursion --- .../jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt index 65d90c36656..506edfcc677 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt @@ -186,10 +186,11 @@ private fun FirTypeParameter.getErasedUpperBound( return firstUpperBound.withArguments(firstUpperBound.typeArguments.map { ConeStarProjection }.toTypedArray()) } - val stopAt = potentiallyRecursiveTypeParameter ?: this + val alreadyVisited = mutableSetOf(potentiallyRecursiveTypeParameter, this) var current = (firstUpperBound as ConeTypeParameterType).lookupTag.typeParameterSymbol.fir - while (current != stopAt) { + while (current !in alreadyVisited) { + alreadyVisited += current val nextUpperBound = current.bounds.first().coneTypeUnsafe() if (nextUpperBound is ConeClassLikeType) {