From 3ff16f779814e913c05445f0d9008db6bb92ac5d Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 16 Nov 2023 21:41:48 +0100 Subject: [PATCH] K2: split JavaTypeParameterStack to mutable/immutable #KT-62314 Fixed --- .../api/fir/components/KtFirPsiTypeProvider.kt | 4 ++-- .../jetbrains/kotlin/fir/java/FirJavaFacade.kt | 16 ++++++++-------- ...Stack.kt => MutableJavaTypeParameterStack.kt} | 13 +++++++++---- .../kotlin/fir/java/declarations/FirJavaClass.kt | 6 +++--- 4 files changed, 22 insertions(+), 17 deletions(-) rename compiler/fir/java/src/org/jetbrains/kotlin/fir/java/{JavaTypeParameterStack.kt => MutableJavaTypeParameterStack.kt} (66%) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt index 56ec51b8700..7b526afd6d6 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt @@ -31,7 +31,7 @@ import org.jetbrains.kotlin.descriptors.java.JavaVisibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.backend.jvm.jvmTypeMapper 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.resolveIfJavaType 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) while (psiClass != null && psiClass.name == null) { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt index 8e3ce151d88..0c17c7ef96a 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt @@ -77,7 +77,7 @@ abstract class FirJavaFacade( } private val knownClassNamesInPackage = session.firCachesFactory.createCache(classFinder::knownClassNamesInPackage) - private val parentClassTypeParameterStackCache = mutableMapOf() + private val parentClassTypeParameterStackCache = mutableMapOf() private val parentClassEffectiveVisibilityCache = mutableMapOf() 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.convertTypeParameters( - stack: JavaTypeParameterStack, + stack: MutableJavaTypeParameterStack, containingDeclarationSymbol: FirBasedSymbol<*>, moduleData: FirModuleData, ): List { @@ -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, - javaTypeParameterStack: JavaTypeParameterStack, + javaTypeParameterStack: MutableJavaTypeParameterStack, outerClassSymbol: FirRegularClassSymbol?, moduleData: FirModuleData, ): FirJavaConstructor { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeParameterStack.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/MutableJavaTypeParameterStack.kt similarity index 66% rename from compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeParameterStack.kt rename to compiler/fir/java/src/org/jetbrains/kotlin/fir/java/MutableJavaTypeParameterStack.kt index 1cfbc2293a7..4939e0661bc 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeParameterStack.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/MutableJavaTypeParameterStack.kt @@ -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> { +class MutableJavaTypeParameterStack : JavaTypeParameterStack() { private val typeParameterMap = mutableMapOf() 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> { + abstract operator fun get(javaTypeParameter: JavaTypeParameter): FirTypeParameterSymbol + companion object { - val EMPTY: JavaTypeParameterStack = JavaTypeParameterStack() + val EMPTY: JavaTypeParameterStack = MutableJavaTypeParameterStack() } } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt index 6e3e9b0baa4..f749aed7b1a 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt @@ -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, override val typeParameters: MutableList, internal val javaPackage: JavaPackage?, - val javaTypeParameterStack: JavaTypeParameterStack, + val javaTypeParameterStack: MutableJavaTypeParameterStack, internal val existingNestedClassifierNames: List, 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 = mutableListOf() var isDeprecatedInJavaDoc: Boolean = false