[FIR] Fix usage of typeParameterStack from parent class in java loading

This commit is contained in:
Dmitriy Novozhilov
2020-02-10 10:32:19 +03:00
parent dd67568cf6
commit c79fd61dba
@@ -49,6 +49,7 @@ class JavaSymbolProvider(
private val scopeProvider = JavaScopeProvider(::wrapScopeWithJvmMapped, this)
private val facade: KotlinJavaPsiFacade get() = KotlinJavaPsiFacade.getInstance(project)
private val parentClassTypeParameterStackCache: MutableMap<FirRegularClassSymbol, JavaTypeParameterStack> = 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)
}
}
}