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
@@ -77,7 +77,7 @@ abstract class FirJavaFacade(
}
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 statusExtensions = session.extensionService.statusTransformerExtensions
@@ -102,7 +102,7 @@ abstract class FirJavaFacade(
abstract fun getModuleDataForClass(javaClass: JavaClass): FirModuleData
private fun JavaTypeParameter.toFirTypeParameter(
javaTypeParameterStack: JavaTypeParameterStack,
javaTypeParameterStack: MutableJavaTypeParameterStack,
containingDeclarationSymbol: FirBasedSymbol<*>,
moduleData: FirModuleData,
): FirTypeParameter {
@@ -131,7 +131,7 @@ abstract class FirJavaFacade(
}
private fun List<JavaTypeParameter>.convertTypeParameters(
stack: JavaTypeParameterStack,
stack: MutableJavaTypeParameterStack,
containingDeclarationSymbol: FirBasedSymbol<*>,
moduleData: FirModuleData,
): List<FirTypeParameter> {
@@ -154,7 +154,7 @@ abstract class FirJavaFacade(
javaClass: JavaClass,
): FirJavaClass {
val classId = classSymbol.classId
val javaTypeParameterStack = JavaTypeParameterStack()
val javaTypeParameterStack = MutableJavaTypeParameterStack()
if (parentClassSymbol != null) {
val parentStack = parentClassTypeParameterStackCache[parentClassSymbol]
@@ -235,7 +235,7 @@ abstract class FirJavaFacade(
classSymbol: FirRegularClassSymbol,
parentClassSymbol: FirRegularClassSymbol?,
classId: ClassId,
javaTypeParameterStack: JavaTypeParameterStack,
javaTypeParameterStack: MutableJavaTypeParameterStack,
): FirJavaClass {
val valueParametersForAnnotationConstructor = ValueParametersForAnnotationConstructor()
val classIsAnnotation = javaClass.classKind == ClassKind.ANNOTATION_CLASS
@@ -497,7 +497,7 @@ abstract class FirJavaFacade(
private fun convertJavaFieldToFir(
javaField: JavaField,
classId: ClassId,
javaTypeParameterStack: JavaTypeParameterStack,
javaTypeParameterStack: MutableJavaTypeParameterStack,
dispatchReceiver: ConeClassLikeType,
moduleData: FirModuleData,
): FirDeclaration {
@@ -565,7 +565,7 @@ abstract class FirJavaFacade(
containingClass: JavaClass,
javaMethod: JavaMethod,
classId: ClassId,
javaTypeParameterStack: JavaTypeParameterStack,
javaTypeParameterStack: MutableJavaTypeParameterStack,
dispatchReceiver: ConeClassLikeType,
moduleData: FirModuleData,
): FirJavaMethod {
@@ -630,7 +630,7 @@ abstract class FirJavaFacade(
javaClass: JavaClass,
ownerClassBuilder: FirJavaClassBuilder,
classTypeParameters: List<FirTypeParameter>,
javaTypeParameterStack: JavaTypeParameterStack,
javaTypeParameterStack: MutableJavaTypeParameterStack,
outerClassSymbol: FirRegularClassSymbol?,
moduleData: FirModuleData,
): FirJavaConstructor {
@@ -8,18 +8,18 @@ package org.jetbrains.kotlin.fir.java
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.load.java.structure.JavaTypeParameter
class JavaTypeParameterStack : Iterable<Map.Entry<JavaTypeParameter, FirTypeParameterSymbol>> {
class MutableJavaTypeParameterStack : JavaTypeParameterStack() {
private val typeParameterMap = mutableMapOf<JavaTypeParameter, FirTypeParameterSymbol>()
fun addParameter(javaTypeParameter: JavaTypeParameter, symbol: FirTypeParameterSymbol) {
typeParameterMap[javaTypeParameter] = symbol
}
fun addStack(javaTypeParameterStack: JavaTypeParameterStack) {
fun addStack(javaTypeParameterStack: MutableJavaTypeParameterStack) {
typeParameterMap += javaTypeParameterStack.typeParameterMap
}
operator fun get(javaTypeParameter: JavaTypeParameter): FirTypeParameterSymbol {
override operator fun get(javaTypeParameter: JavaTypeParameter): FirTypeParameterSymbol {
return typeParameterMap[javaTypeParameter]
?: throw IllegalArgumentException("Cannot find Java type parameter $javaTypeParameter in stack")
}
@@ -28,7 +28,12 @@ class JavaTypeParameterStack : Iterable<Map.Entry<JavaTypeParameter, FirTypePara
return typeParameterMap.iterator()
}
}
abstract class JavaTypeParameterStack : Iterable<Map.Entry<JavaTypeParameter, FirTypeParameterSymbol>> {
abstract operator fun get(javaTypeParameter: JavaTypeParameter): FirTypeParameterSymbol
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.builder.FirRegularClassBuilder
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.enhancement.FirSignatureEnhancement
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
@@ -49,7 +49,7 @@ class FirJavaClass @FirImplementationDetail internal constructor(
private val unenhnancedSuperTypes: List<FirTypeRef>,
override val typeParameters: MutableList<FirTypeParameterRef>,
internal val javaPackage: JavaPackage?,
val javaTypeParameterStack: JavaTypeParameterStack,
val javaTypeParameterStack: MutableJavaTypeParameterStack,
internal val existingNestedClassifierNames: List<Name>,
private val isDeprecatedInJavaDoc: Boolean,
) : FirRegularClass() {
@@ -156,7 +156,7 @@ class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationContainerBuil
var isTopLevel: Boolean by Delegates.notNull()
var isStatic: Boolean by Delegates.notNull()
var javaPackage: JavaPackage? = null
lateinit var javaTypeParameterStack: JavaTypeParameterStack
lateinit var javaTypeParameterStack: MutableJavaTypeParameterStack
val existingNestedClassifierNames: MutableList<Name> = mutableListOf()
var isDeprecatedInJavaDoc: Boolean = false