K2: split JavaTypeParameterStack to mutable/immutable

#KT-62314 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-11-16 21:41:48 +01:00
committed by Space Team
parent b43ceab880
commit 3ff16f7798
4 changed files with 22 additions and 17 deletions
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.descriptors.java.JavaVisibilities
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.jvm.jvmTypeMapper import org.jetbrains.kotlin.fir.backend.jvm.jvmTypeMapper
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack import org.jetbrains.kotlin.fir.java.MutableJavaTypeParameterStack
import org.jetbrains.kotlin.fir.java.javaSymbolProvider import org.jetbrains.kotlin.fir.java.javaSymbolProvider
import org.jetbrains.kotlin.fir.java.resolveIfJavaType import org.jetbrains.kotlin.fir.java.resolveIfJavaType
import org.jetbrains.kotlin.fir.moduleData import org.jetbrains.kotlin.fir.moduleData
@@ -121,7 +121,7 @@ internal class KtFirPsiTypeProvider(
} }
val javaTypeParameterStack = JavaTypeParameterStack() val javaTypeParameterStack = MutableJavaTypeParameterStack()
var psiClass = PsiTreeUtil.getContextOfType(useSitePosition, PsiClass::class.java, false) var psiClass = PsiTreeUtil.getContextOfType(useSitePosition, PsiClass::class.java, false)
while (psiClass != null && psiClass.name == null) { while (psiClass != null && psiClass.name == null) {
@@ -77,7 +77,7 @@ abstract class FirJavaFacade(
} }
private val knownClassNamesInPackage = session.firCachesFactory.createCache(classFinder::knownClassNamesInPackage) private val knownClassNamesInPackage = session.firCachesFactory.createCache(classFinder::knownClassNamesInPackage)
private val parentClassTypeParameterStackCache = mutableMapOf<FirRegularClassSymbol, JavaTypeParameterStack>() private val parentClassTypeParameterStackCache = mutableMapOf<FirRegularClassSymbol, MutableJavaTypeParameterStack>()
private val parentClassEffectiveVisibilityCache = mutableMapOf<FirRegularClassSymbol, EffectiveVisibility>() private val parentClassEffectiveVisibilityCache = mutableMapOf<FirRegularClassSymbol, EffectiveVisibility>()
private val statusExtensions = session.extensionService.statusTransformerExtensions private val statusExtensions = session.extensionService.statusTransformerExtensions
@@ -102,7 +102,7 @@ abstract class FirJavaFacade(
abstract fun getModuleDataForClass(javaClass: JavaClass): FirModuleData abstract fun getModuleDataForClass(javaClass: JavaClass): FirModuleData
private fun JavaTypeParameter.toFirTypeParameter( private fun JavaTypeParameter.toFirTypeParameter(
javaTypeParameterStack: JavaTypeParameterStack, javaTypeParameterStack: MutableJavaTypeParameterStack,
containingDeclarationSymbol: FirBasedSymbol<*>, containingDeclarationSymbol: FirBasedSymbol<*>,
moduleData: FirModuleData, moduleData: FirModuleData,
): FirTypeParameter { ): FirTypeParameter {
@@ -131,7 +131,7 @@ abstract class FirJavaFacade(
} }
private fun List<JavaTypeParameter>.convertTypeParameters( private fun List<JavaTypeParameter>.convertTypeParameters(
stack: JavaTypeParameterStack, stack: MutableJavaTypeParameterStack,
containingDeclarationSymbol: FirBasedSymbol<*>, containingDeclarationSymbol: FirBasedSymbol<*>,
moduleData: FirModuleData, moduleData: FirModuleData,
): List<FirTypeParameter> { ): List<FirTypeParameter> {
@@ -154,7 +154,7 @@ abstract class FirJavaFacade(
javaClass: JavaClass, javaClass: JavaClass,
): FirJavaClass { ): FirJavaClass {
val classId = classSymbol.classId val classId = classSymbol.classId
val javaTypeParameterStack = JavaTypeParameterStack() val javaTypeParameterStack = MutableJavaTypeParameterStack()
if (parentClassSymbol != null) { if (parentClassSymbol != null) {
val parentStack = parentClassTypeParameterStackCache[parentClassSymbol] val parentStack = parentClassTypeParameterStackCache[parentClassSymbol]
@@ -235,7 +235,7 @@ abstract class FirJavaFacade(
classSymbol: FirRegularClassSymbol, classSymbol: FirRegularClassSymbol,
parentClassSymbol: FirRegularClassSymbol?, parentClassSymbol: FirRegularClassSymbol?,
classId: ClassId, classId: ClassId,
javaTypeParameterStack: JavaTypeParameterStack, javaTypeParameterStack: MutableJavaTypeParameterStack,
): FirJavaClass { ): FirJavaClass {
val valueParametersForAnnotationConstructor = ValueParametersForAnnotationConstructor() val valueParametersForAnnotationConstructor = ValueParametersForAnnotationConstructor()
val classIsAnnotation = javaClass.classKind == ClassKind.ANNOTATION_CLASS val classIsAnnotation = javaClass.classKind == ClassKind.ANNOTATION_CLASS
@@ -497,7 +497,7 @@ abstract class FirJavaFacade(
private fun convertJavaFieldToFir( private fun convertJavaFieldToFir(
javaField: JavaField, javaField: JavaField,
classId: ClassId, classId: ClassId,
javaTypeParameterStack: JavaTypeParameterStack, javaTypeParameterStack: MutableJavaTypeParameterStack,
dispatchReceiver: ConeClassLikeType, dispatchReceiver: ConeClassLikeType,
moduleData: FirModuleData, moduleData: FirModuleData,
): FirDeclaration { ): FirDeclaration {
@@ -565,7 +565,7 @@ abstract class FirJavaFacade(
containingClass: JavaClass, containingClass: JavaClass,
javaMethod: JavaMethod, javaMethod: JavaMethod,
classId: ClassId, classId: ClassId,
javaTypeParameterStack: JavaTypeParameterStack, javaTypeParameterStack: MutableJavaTypeParameterStack,
dispatchReceiver: ConeClassLikeType, dispatchReceiver: ConeClassLikeType,
moduleData: FirModuleData, moduleData: FirModuleData,
): FirJavaMethod { ): FirJavaMethod {
@@ -630,7 +630,7 @@ abstract class FirJavaFacade(
javaClass: JavaClass, javaClass: JavaClass,
ownerClassBuilder: FirJavaClassBuilder, ownerClassBuilder: FirJavaClassBuilder,
classTypeParameters: List<FirTypeParameter>, classTypeParameters: List<FirTypeParameter>,
javaTypeParameterStack: JavaTypeParameterStack, javaTypeParameterStack: MutableJavaTypeParameterStack,
outerClassSymbol: FirRegularClassSymbol?, outerClassSymbol: FirRegularClassSymbol?,
moduleData: FirModuleData, moduleData: FirModuleData,
): FirJavaConstructor { ): FirJavaConstructor {
@@ -8,18 +8,18 @@ package org.jetbrains.kotlin.fir.java
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.load.java.structure.JavaTypeParameter import org.jetbrains.kotlin.load.java.structure.JavaTypeParameter
class JavaTypeParameterStack : Iterable<Map.Entry<JavaTypeParameter, FirTypeParameterSymbol>> { class MutableJavaTypeParameterStack : JavaTypeParameterStack() {
private val typeParameterMap = mutableMapOf<JavaTypeParameter, FirTypeParameterSymbol>() private val typeParameterMap = mutableMapOf<JavaTypeParameter, FirTypeParameterSymbol>()
fun addParameter(javaTypeParameter: JavaTypeParameter, symbol: FirTypeParameterSymbol) { fun addParameter(javaTypeParameter: JavaTypeParameter, symbol: FirTypeParameterSymbol) {
typeParameterMap[javaTypeParameter] = symbol typeParameterMap[javaTypeParameter] = symbol
} }
fun addStack(javaTypeParameterStack: JavaTypeParameterStack) { fun addStack(javaTypeParameterStack: MutableJavaTypeParameterStack) {
typeParameterMap += javaTypeParameterStack.typeParameterMap typeParameterMap += javaTypeParameterStack.typeParameterMap
} }
operator fun get(javaTypeParameter: JavaTypeParameter): FirTypeParameterSymbol { override operator fun get(javaTypeParameter: JavaTypeParameter): FirTypeParameterSymbol {
return typeParameterMap[javaTypeParameter] return typeParameterMap[javaTypeParameter]
?: throw IllegalArgumentException("Cannot find Java type parameter $javaTypeParameter in stack") ?: throw IllegalArgumentException("Cannot find Java type parameter $javaTypeParameter in stack")
} }
@@ -28,7 +28,12 @@ class JavaTypeParameterStack : Iterable<Map.Entry<JavaTypeParameter, FirTypePara
return typeParameterMap.iterator() return typeParameterMap.iterator()
} }
}
abstract class JavaTypeParameterStack : Iterable<Map.Entry<JavaTypeParameter, FirTypeParameterSymbol>> {
abstract operator fun get(javaTypeParameter: JavaTypeParameter): FirTypeParameterSymbol
companion object { companion object {
val EMPTY: JavaTypeParameterStack = JavaTypeParameterStack() val EMPTY: JavaTypeParameterStack = MutableJavaTypeParameterStack()
} }
} }
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.FirRegularClassBuilder import org.jetbrains.kotlin.fir.declarations.builder.FirRegularClassBuilder
import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack import org.jetbrains.kotlin.fir.java.MutableJavaTypeParameterStack
import org.jetbrains.kotlin.fir.java.convertAnnotationsToFir import org.jetbrains.kotlin.fir.java.convertAnnotationsToFir
import org.jetbrains.kotlin.fir.java.enhancement.FirSignatureEnhancement import org.jetbrains.kotlin.fir.java.enhancement.FirSignatureEnhancement
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
@@ -49,7 +49,7 @@ class FirJavaClass @FirImplementationDetail internal constructor(
private val unenhnancedSuperTypes: List<FirTypeRef>, private val unenhnancedSuperTypes: List<FirTypeRef>,
override val typeParameters: MutableList<FirTypeParameterRef>, override val typeParameters: MutableList<FirTypeParameterRef>,
internal val javaPackage: JavaPackage?, internal val javaPackage: JavaPackage?,
val javaTypeParameterStack: JavaTypeParameterStack, val javaTypeParameterStack: MutableJavaTypeParameterStack,
internal val existingNestedClassifierNames: List<Name>, internal val existingNestedClassifierNames: List<Name>,
private val isDeprecatedInJavaDoc: Boolean, private val isDeprecatedInJavaDoc: Boolean,
) : FirRegularClass() { ) : FirRegularClass() {
@@ -156,7 +156,7 @@ class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationContainerBuil
var isTopLevel: Boolean by Delegates.notNull() var isTopLevel: Boolean by Delegates.notNull()
var isStatic: Boolean by Delegates.notNull() var isStatic: Boolean by Delegates.notNull()
var javaPackage: JavaPackage? = null var javaPackage: JavaPackage? = null
lateinit var javaTypeParameterStack: JavaTypeParameterStack lateinit var javaTypeParameterStack: MutableJavaTypeParameterStack
val existingNestedClassifierNames: MutableList<Name> = mutableListOf() val existingNestedClassifierNames: MutableList<Name> = mutableListOf()
var isDeprecatedInJavaDoc: Boolean = false var isDeprecatedInJavaDoc: Boolean = false