[FIR] Fix usage of typeParameterStack from parent class in java loading
This commit is contained in:
@@ -49,6 +49,7 @@ class JavaSymbolProvider(
|
|||||||
private val scopeProvider = JavaScopeProvider(::wrapScopeWithJvmMapped, this)
|
private val scopeProvider = JavaScopeProvider(::wrapScopeWithJvmMapped, this)
|
||||||
|
|
||||||
private val facade: KotlinJavaPsiFacade get() = KotlinJavaPsiFacade.getInstance(project)
|
private val facade: KotlinJavaPsiFacade get() = KotlinJavaPsiFacade.getInstance(project)
|
||||||
|
private val parentClassTypeParameterStackCache: MutableMap<FirRegularClassSymbol, JavaTypeParameterStack> = mutableMapOf()
|
||||||
|
|
||||||
private fun findClass(
|
private fun findClass(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
@@ -135,9 +136,10 @@ class JavaSymbolProvider(
|
|||||||
if (!isTopLevel) {
|
if (!isTopLevel) {
|
||||||
val parentId = ClassId(classId.packageFqName, parentFqName, false)
|
val parentId = ClassId(classId.packageFqName, parentFqName, false)
|
||||||
val parentClassSymbol = getClassLikeSymbolByFqName(parentId)
|
val parentClassSymbol = getClassLikeSymbolByFqName(parentId)
|
||||||
val parentClass = parentClassSymbol?.fir
|
val parentStack = parentClassTypeParameterStackCache[parentClassSymbol] ?:
|
||||||
if (parentClass is FirJavaClass) {
|
(parentClassSymbol?.fir as? FirJavaClass)?.javaTypeParameterStack
|
||||||
javaTypeParameterStack.addStack(parentClass.javaTypeParameterStack)
|
if (parentStack != null) {
|
||||||
|
javaTypeParameterStack.addStack(parentStack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buildJavaClass {
|
buildJavaClass {
|
||||||
@@ -151,6 +153,7 @@ class JavaSymbolProvider(
|
|||||||
this.isTopLevel = isTopLevel
|
this.isTopLevel = isTopLevel
|
||||||
isStatic = javaClass.isStatic
|
isStatic = javaClass.isStatic
|
||||||
this.javaTypeParameterStack = javaTypeParameterStack
|
this.javaTypeParameterStack = javaTypeParameterStack
|
||||||
|
parentClassTypeParameterStackCache[firSymbol] = javaTypeParameterStack
|
||||||
existingNestedClassifierNames += javaClass.innerClassNames
|
existingNestedClassifierNames += javaClass.innerClassNames
|
||||||
scopeProvider = this@JavaSymbolProvider.scopeProvider
|
scopeProvider = this@JavaSymbolProvider.scopeProvider
|
||||||
typeParameters += foundClass.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
typeParameters += foundClass.typeParameters.convertTypeParameters(javaTypeParameterStack)
|
||||||
@@ -255,6 +258,7 @@ class JavaSymbolProvider(
|
|||||||
generateValueOfFunction(session, classId.packageFqName, classId.relativeClassName)
|
generateValueOfFunction(session, classId.packageFqName, classId.relativeClassName)
|
||||||
}
|
}
|
||||||
isNotSam = isNotSam()
|
isNotSam = isNotSam()
|
||||||
|
parentClassTypeParameterStackCache.remove(firSymbol)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user