From c79fd61dbae4863a5acd98b52a8e085c497ef3d5 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 10 Feb 2020 10:32:19 +0300 Subject: [PATCH] [FIR] Fix usage of typeParameterStack from parent class in java loading --- .../jetbrains/kotlin/fir/java/JavaSymbolProvider.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index ea483eb204c..5caccd0ee99 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -49,6 +49,7 @@ class JavaSymbolProvider( private val scopeProvider = JavaScopeProvider(::wrapScopeWithJvmMapped, this) private val facade: KotlinJavaPsiFacade get() = KotlinJavaPsiFacade.getInstance(project) + private val parentClassTypeParameterStackCache: MutableMap = mutableMapOf() private fun findClass( classId: ClassId, @@ -135,9 +136,10 @@ class JavaSymbolProvider( if (!isTopLevel) { val parentId = ClassId(classId.packageFqName, parentFqName, false) val parentClassSymbol = getClassLikeSymbolByFqName(parentId) - val parentClass = parentClassSymbol?.fir - if (parentClass is FirJavaClass) { - javaTypeParameterStack.addStack(parentClass.javaTypeParameterStack) + val parentStack = parentClassTypeParameterStackCache[parentClassSymbol] ?: + (parentClassSymbol?.fir as? FirJavaClass)?.javaTypeParameterStack + if (parentStack != null) { + javaTypeParameterStack.addStack(parentStack) } } buildJavaClass { @@ -151,6 +153,7 @@ class JavaSymbolProvider( this.isTopLevel = isTopLevel isStatic = javaClass.isStatic this.javaTypeParameterStack = javaTypeParameterStack + parentClassTypeParameterStackCache[firSymbol] = javaTypeParameterStack existingNestedClassifierNames += javaClass.innerClassNames scopeProvider = this@JavaSymbolProvider.scopeProvider typeParameters += foundClass.typeParameters.convertTypeParameters(javaTypeParameterStack) @@ -255,6 +258,7 @@ class JavaSymbolProvider( generateValueOfFunction(session, classId.packageFqName, classId.relativeClassName) } isNotSam = isNotSam() + parentClassTypeParameterStackCache.remove(firSymbol) } } }