[FIR] Introduce utility for creating ConeClassLikeLookupTagImpl from ClassId

`classId.toLookupTag()` looks much cleaner than `ConeClassLikeLookupTagImpl(classId)`
This commit is contained in:
Dmitriy Novozhilov
2023-01-13 14:30:04 +02:00
committed by Space Team
parent 6c449e29cd
commit 125b773205
33 changed files with 95 additions and 118 deletions
@@ -37,7 +37,6 @@ import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
import org.jetbrains.kotlin.fir.scopes.impl.FirExplicitSimpleImportingScope import org.jetbrains.kotlin.fir.scopes.impl.FirExplicitSimpleImportingScope
import org.jetbrains.kotlin.fir.scopes.processClassifiersByName import org.jetbrains.kotlin.fir.scopes.processClassifiersByName
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
@@ -72,7 +71,7 @@ internal object FirReferenceResolveHelper {
symbolBuilder: KtSymbolByFirBuilder, symbolBuilder: KtSymbolByFirBuilder,
calleeReference: FirReference? = null, calleeReference: FirReference? = null,
): KtSymbol? { ): KtSymbol? {
val classLikeDeclaration = ConeClassLikeLookupTagImpl(this).toSymbol(session)?.fir val classLikeDeclaration = this.toLookupTag().toSymbol(session)?.fir
if (classLikeDeclaration is FirRegularClass) { if (classLikeDeclaration is FirRegularClass) {
if (calleeReference is FirResolvedNamedReference) { if (calleeReference is FirResolvedNamedReference) {
val callee = calleeReference.resolvedSymbol.fir as? FirCallableDeclaration val callee = calleeReference.resolvedSymbol.fir as? FirCallableDeclaration
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.fir.declarations.utils.isOperator import org.jetbrains.kotlin.fir.declarations.utils.isOperator
import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
@@ -164,7 +163,7 @@ private object Checks {
paramType.isSupertypeOf( paramType.isSupertypeOf(
ctx.session.typeContext, ctx.session.typeContext,
ConeClassLikeTypeImpl( ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(StandardClassIds.KProperty), StandardClassIds.KProperty.toLookupTag(),
arrayOf(ConeStarProjection), arrayOf(ConeStarProjection),
isNullable = false isNullable = false
) )
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.resolve.scope
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
import org.jetbrains.kotlin.fir.scopes.getDeclaredConstructors import org.jetbrains.kotlin.fir.scopes.getDeclaredConstructors
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.lazyDeclarationResolver import org.jetbrains.kotlin.fir.symbols.lazyDeclarationResolver
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
@@ -181,7 +180,7 @@ abstract class AbstractAnnotationDeserializer(
val classId = nameResolver.getClassId(proto.id) val classId = nameResolver.getClassId(proto.id)
return buildAnnotation { return buildAnnotation {
annotationTypeRef = buildResolvedTypeRef { annotationTypeRef = buildResolvedTypeRef {
type = ConeClassLikeLookupTagImpl(classId).constructClassType(emptyArray(), isNullable = false) type = classId.toLookupTag().constructClassType(emptyArray(), isNullable = false)
} }
session.lazyDeclarationResolver.disableLazyResolveContractChecksInside { session.lazyDeclarationResolver.disableLazyResolveContractChecksInside {
this.argumentMapping = createArgumentMapping(proto, classId, nameResolver) this.argumentMapping = createArgumentMapping(proto, classId, nameResolver)
@@ -202,7 +201,7 @@ abstract class AbstractAnnotationDeserializer(
// Used only for annotation parameters of array types // Used only for annotation parameters of array types
// Avoid triggering it in other cases, since it's quite expensive // Avoid triggering it in other cases, since it's quite expensive
val parameterByName: Map<Name, FirValueParameter>? by lazy(LazyThreadSafetyMode.NONE) { val parameterByName: Map<Name, FirValueParameter>? by lazy(LazyThreadSafetyMode.NONE) {
val lookupTag = ConeClassLikeLookupTagImpl(classId) val lookupTag = classId.toLookupTag()
val symbol = lookupTag.toSymbol(session) val symbol = lookupTag.toSymbol(session)
val firAnnotationClass = (symbol as? FirRegularClassSymbol)?.fir ?: return@lazy null val firAnnotationClass = (symbol as? FirRegularClassSymbol)?.fir ?: return@lazy null
@@ -259,7 +258,7 @@ abstract class AbstractAnnotationDeserializer(
ANNOTATION -> deserializeAnnotation(value.annotation, nameResolver) ANNOTATION -> deserializeAnnotation(value.annotation, nameResolver)
CLASS -> buildGetClassCall { CLASS -> buildGetClassCall {
val classId = nameResolver.getClassId(value.classId) val classId = nameResolver.getClassId(value.classId)
val lookupTag = ConeClassLikeLookupTagImpl(classId) val lookupTag = classId.toLookupTag()
val referencedType = lookupTag.constructType(emptyArray(), isNullable = false) val referencedType = lookupTag.constructType(emptyArray(), isNullable = false)
val resolvedTypeRef = buildResolvedTypeRef { val resolvedTypeRef = buildResolvedTypeRef {
type = StandardClassIds.KClass.constructClassLikeType(arrayOf(referencedType), false) type = StandardClassIds.KClass.constructClassLikeType(arrayOf(referencedType), false)
@@ -276,7 +275,7 @@ abstract class AbstractAnnotationDeserializer(
val classId = nameResolver.getClassId(value.classId) val classId = nameResolver.getClassId(value.classId)
val entryName = nameResolver.getName(value.enumValueId) val entryName = nameResolver.getName(value.enumValueId)
val enumLookupTag = ConeClassLikeLookupTagImpl(classId) val enumLookupTag = classId.toLookupTag()
val enumSymbol = enumLookupTag.toSymbol(session) val enumSymbol = enumLookupTag.toSymbol(session)
val firClass = enumSymbol?.fir as? FirRegularClass val firClass = enumSymbol?.fir as? FirRegularClass
val enumEntries = firClass?.collectEnumEntries() ?: emptyList() val enumEntries = firClass?.collectEnumEntries() ?: emptyList()
@@ -6,23 +6,30 @@
package org.jetbrains.kotlin.fir.deserialization package org.jetbrains.kotlin.fir.deserialization
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.EffectiveVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.* import org.jetbrains.kotlin.fir.declarations.builder.*
import org.jetbrains.kotlin.fir.declarations.comparators.FirMemberDeclarationComparator import org.jetbrains.kotlin.fir.declarations.comparators.FirMemberDeclarationComparator
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.fir.declarations.utils.addDeclarations
import org.jetbrains.kotlin.fir.declarations.utils.isCompanion
import org.jetbrains.kotlin.fir.declarations.utils.moduleName
import org.jetbrains.kotlin.fir.declarations.utils.sourceElement
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.fir.types.toLookupTag
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.deserialization.* import org.jetbrains.kotlin.metadata.deserialization.*
@@ -259,7 +266,7 @@ private fun FirRegularClassBuilder.addSerializableIfNeeded(classId: ClassId) {
if (!JvmBuiltInsSignatures.isSerializableInJava(classId.asSingleFqName().toUnsafe())) return if (!JvmBuiltInsSignatures.isSerializableInJava(classId.asSingleFqName().toUnsafe())) return
superTypeRefs += buildResolvedTypeRef { superTypeRefs += buildResolvedTypeRef {
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(JAVA_IO_SERIALIZABLE), JAVA_IO_SERIALIZABLE.toLookupTag(),
typeArguments = emptyArray(), typeArguments = emptyArray(),
isNullable = false isNullable = false
) )
@@ -271,7 +278,7 @@ private fun FirRegularClassBuilder.addCloneForArrayIfNeeded(classId: ClassId, di
if (classId.shortClassName !in ARRAY_CLASSES) return if (classId.shortClassName !in ARRAY_CLASSES) return
superTypeRefs += buildResolvedTypeRef { superTypeRefs += buildResolvedTypeRef {
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(StandardClassIds.Cloneable), StandardClassIds.Cloneable.toLookupTag(),
typeArguments = emptyArray(), typeArguments = emptyArray(),
isNullable = false isNullable = false
) )
@@ -291,7 +298,7 @@ private fun FirRegularClassBuilder.addCloneForArrayIfNeeded(classId: ClassId, di
emptyArray() emptyArray()
} }
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(classId), classId.toLookupTag(),
typeArguments = typeArguments, typeArguments = typeArguments,
isNullable = false isNullable = false
) )
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
@@ -101,7 +100,7 @@ class FirTypeDeserializer(
// We can't just load local types as is, because later we will get an exception // We can't just load local types as is, because later we will get an exception
// while trying to get corresponding FIR class // while trying to get corresponding FIR class
val id = nameResolver.getClassId(fqNameIndex).takeIf { !it.isLocal } ?: StandardClassIds.Any val id = nameResolver.getClassId(fqNameIndex).takeIf { !it.isLocal } ?: StandardClassIds.Any
return ConeClassLikeLookupTagImpl(id) return id.toLookupTag()
} catch (e: Throwable) { } catch (e: Throwable) {
if (shouldIjPlatformExceptionBeRethrown(e)) throw e if (shouldIjPlatformExceptionBeRethrown(e)) throw e
throw RuntimeException("Looking up for ${nameResolver.getClassId(fqNameIndex)}", e) throw RuntimeException("Looking up for ${nameResolver.getClassId(fqNameIndex)}", e)
@@ -205,7 +204,7 @@ class FirTypeDeserializer(
val kind = FunctionClassKind.SuspendFunction val kind = FunctionClassKind.SuspendFunction
return ConeClassLikeTypeImpl( return ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(ClassId(kind.packageFqName, kind.numberedClassName(valueParameters.size))), ClassId(kind.packageFqName, kind.numberedClassName(valueParameters.size)).toLookupTag(),
(valueParameters + suspendReturnType).toTypedArray(), (valueParameters + suspendReturnType).toTypedArray(),
isNullable, attributes isNullable, attributes
) )
@@ -225,7 +224,7 @@ class FirTypeDeserializer(
if (arity >= 0) { if (arity >= 0) {
val kind = FunctionClassKind.SuspendFunction val kind = FunctionClassKind.SuspendFunction
ConeClassLikeTypeImpl( ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(ClassId(kind.packageFqName, kind.numberedClassName(arity))), ClassId(kind.packageFqName, kind.numberedClassName(arity)).toLookupTag(),
arguments, arguments,
isNullable, isNullable,
attributes attributes
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.constructClassType import org.jetbrains.kotlin.fir.types.constructClassType
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.fir.types.toLookupTag
import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion
import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl
@@ -291,7 +292,7 @@ private class SyntheticFunctionalInterfaceCache(private val moduleData: FirModul
kind: FunctionClassKind, kind: FunctionClassKind,
): FirResolvedTypeRef { ): FirResolvedTypeRef {
return buildResolvedTypeRef { return buildResolvedTypeRef {
type = ConeClassLikeLookupTagImpl(kind.classId(arity)) type = kind.classId(arity).toLookupTag()
.constructClassType(typeArguments.map { it.type }.toTypedArray(), isNullable = false) .constructClassType(typeArguments.map { it.type }.toTypedArray(), isNullable = false)
} }
} }
@@ -299,21 +300,21 @@ private class SyntheticFunctionalInterfaceCache(private val moduleData: FirModul
superTypeRefs += when (kind) { superTypeRefs += when (kind) {
FunctionClassKind.Function -> listOf( FunctionClassKind.Function -> listOf(
buildResolvedTypeRef { buildResolvedTypeRef {
type = ConeClassLikeLookupTagImpl(StandardClassIds.Function) type = StandardClassIds.Function.toLookupTag()
.constructClassType(arrayOf(typeArguments.last().type), isNullable = false) .constructClassType(arrayOf(typeArguments.last().type), isNullable = false)
} }
) )
FunctionClassKind.SuspendFunction -> listOf( FunctionClassKind.SuspendFunction -> listOf(
buildResolvedTypeRef { buildResolvedTypeRef {
type = ConeClassLikeLookupTagImpl(StandardClassIds.Function) type = StandardClassIds.Function.toLookupTag()
.constructClassType(arrayOf(typeArguments.last().type), isNullable = false) .constructClassType(arrayOf(typeArguments.last().type), isNullable = false)
} }
) )
FunctionClassKind.KFunction -> listOf( FunctionClassKind.KFunction -> listOf(
buildResolvedTypeRef { buildResolvedTypeRef {
type = ConeClassLikeLookupTagImpl(StandardClassIds.KFunction) type = StandardClassIds.KFunction.toLookupTag()
.constructClassType(arrayOf(typeArguments.last().type), isNullable = false) .constructClassType(arrayOf(typeArguments.last().type), isNullable = false)
}, },
createSuperType(FunctionClassKind.Function) createSuperType(FunctionClassKind.Function)
@@ -321,7 +322,7 @@ private class SyntheticFunctionalInterfaceCache(private val moduleData: FirModul
FunctionClassKind.KSuspendFunction -> listOf( FunctionClassKind.KSuspendFunction -> listOf(
buildResolvedTypeRef { buildResolvedTypeRef {
type = ConeClassLikeLookupTagImpl(StandardClassIds.KFunction) type = StandardClassIds.KFunction.toLookupTag()
.constructClassType(arrayOf(typeArguments.last().type), isNullable = false) .constructClassType(arrayOf(typeArguments.last().type), isNullable = false)
}, },
createSuperType(FunctionClassKind.SuspendFunction) createSuperType(FunctionClassKind.SuspendFunction)
@@ -36,7 +36,10 @@ import org.jetbrains.kotlin.fir.serialization.constant.EnumValue
import org.jetbrains.kotlin.fir.serialization.constant.IntValue import org.jetbrains.kotlin.fir.serialization.constant.IntValue
import org.jetbrains.kotlin.fir.serialization.constant.StringValue import org.jetbrains.kotlin.fir.serialization.constant.StringValue
import org.jetbrains.kotlin.fir.serialization.constant.toConstantValue import org.jetbrains.kotlin.fir.serialization.constant.toConstantValue
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
@@ -775,7 +778,7 @@ class FirElementSerializer private constructor(
val annotation = buildAnnotation { val annotation = buildAnnotation {
annotationTypeRef = buildResolvedTypeRef { annotationTypeRef = buildResolvedTypeRef {
this.type = ConeClassLikeTypeImpl( this.type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(CompilerConeAttributes.classIdByCompilerAttributeKey.getValue(attribute.key)), CompilerConeAttributes.classIdByCompilerAttributeKey.getValue(attribute.key).toLookupTag(),
emptyArray(), emptyArray(),
isNullable = false isNullable = false
) )
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
@@ -49,8 +48,7 @@ import org.jetbrains.org.objectweb.asm.Type
class FirJvmTypeMapper(val session: FirSession) : FirSessionComponent { class FirJvmTypeMapper(val session: FirSession) : FirSessionComponent {
companion object { companion object {
val NON_EXISTENT_ID = ClassId.topLevel(StandardNames.NON_EXISTENT_CLASS) val NON_EXISTENT_ID = ClassId.topLevel(StandardNames.NON_EXISTENT_CLASS)
private val typeForNonExistentClass = ConeClassLikeLookupTagImpl(NON_EXISTENT_ID) private val typeForNonExistentClass = NON_EXISTENT_ID.toLookupTag().constructClassType(emptyArray(), isNullable = false)
.constructClassType(emptyArray(), isNullable = false)
} }
fun mapType( fun mapType(
@@ -20,10 +20,10 @@ import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol
import org.jetbrains.kotlin.fir.symbols.Fir2IrEnumEntrySymbol import org.jetbrains.kotlin.fir.symbols.Fir2IrEnumEntrySymbol
import org.jetbrains.kotlin.fir.symbols.Fir2IrTypeAliasSymbol import org.jetbrains.kotlin.fir.symbols.Fir2IrTypeAliasSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.toLookupTag
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
@@ -70,14 +70,14 @@ class Fir2IrClassifierStorage(
fun preCacheBuiltinClasses() { fun preCacheBuiltinClasses() {
for ((classId, irBuiltinSymbol) in typeConverter.classIdToSymbolMap) { for ((classId, irBuiltinSymbol) in typeConverter.classIdToSymbolMap) {
val firClass = ConeClassLikeLookupTagImpl(classId).toSymbol(session)!!.fir as FirRegularClass val firClass = classId.toLookupTag().toSymbol(session)!!.fir as FirRegularClass
val irClass = irBuiltinSymbol.owner val irClass = irBuiltinSymbol.owner
classCache[firClass] = irClass classCache[firClass] = irClass
processClassHeader(firClass, irClass) processClassHeader(firClass, irClass)
declarationStorage.preCacheBuiltinClassMembers(firClass, irClass) declarationStorage.preCacheBuiltinClassMembers(firClass, irClass)
} }
for ((primitiveClassId, primitiveArrayId) in StandardClassIds.primitiveArrayTypeByElementType) { for ((primitiveClassId, primitiveArrayId) in StandardClassIds.primitiveArrayTypeByElementType) {
val firClass = ConeClassLikeLookupTagImpl(primitiveArrayId).toSymbol(session)!!.fir as FirRegularClass val firClass = primitiveArrayId.toLookupTag().toSymbol(session)!!.fir as FirRegularClass
val irType = typeConverter.classIdToTypeMap[primitiveClassId] val irType = typeConverter.classIdToTypeMap[primitiveClassId]
val irClass = irBuiltIns.primitiveArrayForType[irType]!!.owner val irClass = irBuiltIns.primitiveArrayForType[irType]!!.owner
classCache[firClass] = irClass classCache[firClass] = irClass
@@ -588,7 +588,7 @@ class Fir2IrClassifierStorage(
) )
val parentId = classId.outerClassId val parentId = classId.outerClassId
val parentClass = parentId?.let { getIrClassSymbolForNotFoundClass(ConeClassLikeLookupTagImpl(it)) } val parentClass = parentId?.let { getIrClassSymbolForNotFoundClass(it.toLookupTag()) }
val irParent = parentClass?.owner ?: declarationStorage.getIrExternalPackageFragment(classId.packageFqName) val irParent = parentClass?.owner ?: declarationStorage.getIrExternalPackageFragment(classId.packageFqName)
val symbol = Fir2IrClassSymbol(signature) val symbol = Fir2IrClassSymbol(signature)
@@ -826,7 +826,7 @@ class Fir2IrDeclarationStorage(
createIrProperty( createIrProperty(
field.toStubProperty(), field.toStubProperty(),
irParent, irParent,
fakeOverrideOwnerLookupTag = containingClassId?.let { ConeClassLikeLookupTagImpl(it) } fakeOverrideOwnerLookupTag = containingClassId?.let { it.toLookupTag() }
) )
} }
} }
@@ -854,7 +854,7 @@ class Fir2IrDeclarationStorage(
thisReceiverOwner: IrClass? = irParent as? IrClass, thisReceiverOwner: IrClass? = irParent as? IrClass,
predefinedOrigin: IrDeclarationOrigin? = null, predefinedOrigin: IrDeclarationOrigin? = null,
isLocal: Boolean = false, isLocal: Boolean = false,
fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = (irParent as? IrClass)?.classId?.let { ConeClassLikeLookupTagImpl(it) }, fakeOverrideOwnerLookupTag: ConeClassLikeLookupTag? = (irParent as? IrClass)?.classId?.let { it.toLookupTag() },
forceTopLevelPrivate: Boolean = false, forceTopLevelPrivate: Boolean = false,
): IrProperty = convertCatching(property) { ): IrProperty = convertCatching(property) {
val origin = val origin =
@@ -1077,7 +1077,7 @@ class Fir2IrDeclarationStorage(
): IrField = convertCatching(field) { ): IrField = convertCatching(field) {
val type = typeRef.toIrType() val type = typeRef.toIrType()
val classId = (irParent as? IrClass)?.classId val classId = (irParent as? IrClass)?.classId
val containingClassLookupTag = classId?.let { ConeClassLikeLookupTagImpl(it) } val containingClassLookupTag = classId?.let { it.toLookupTag() }
val signature = signatureComposer.composeSignature(field, containingClassLookupTag) val signature = signatureComposer.composeSignature(field, containingClassLookupTag)
return field.convertWithOffsets { startOffset, endOffset -> return field.convertWithOffsets { startOffset, endOffset ->
if (signature != null) { if (signature != null) {
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.fir.declarations.utils.effectiveVisibility
import org.jetbrains.kotlin.fir.declarations.utils.modality import org.jetbrains.kotlin.fir.declarations.utils.modality
import org.jetbrains.kotlin.fir.java.declarations.* import org.jetbrains.kotlin.fir.java.declarations.*
import org.jetbrains.kotlin.fir.java.enhancement.FirSignatureEnhancement import org.jetbrains.kotlin.fir.java.enhancement.FirSignatureEnhancement
import org.jetbrains.kotlin.fir.types.constructType
import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
@@ -463,7 +462,7 @@ abstract class FirJavaFacade(
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
origin = javaOrigin(javaField.isFromSource) origin = javaOrigin(javaField.isFromSource)
}.apply { }.apply {
containingClassForStaticMemberAttr = ConeClassLikeLookupTagImpl(classId) containingClassForStaticMemberAttr = classId.toLookupTag()
// TODO: check if this works properly with annotations that take the enum class as an argument // TODO: check if this works properly with annotations that take the enum class as an argument
setAnnotationsFromJava(session, javaField, javaTypeParameterStack) setAnnotationsFromJava(session, javaField, javaTypeParameterStack)
} }
@@ -500,7 +499,7 @@ abstract class FirJavaFacade(
} }
}.apply { }.apply {
if (javaField.isStatic) { if (javaField.isStatic) {
containingClassForStaticMemberAttr = ConeClassLikeLookupTagImpl(classId) containingClassForStaticMemberAttr = classId.toLookupTag()
} }
} }
} }
@@ -555,7 +554,7 @@ abstract class FirJavaFacade(
} }
}.apply { }.apply {
if (javaMethod.isStatic) { if (javaMethod.isStatic) {
containingClassForStaticMemberAttr = ConeClassLikeLookupTagImpl(classId) containingClassForStaticMemberAttr = classId.toLookupTag()
} }
if (containingClass.isRecord && valueParameters.isEmpty() && containingClass.recordComponents.any { it.name == methodName }) { if (containingClass.isRecord && valueParameters.isEmpty() && containingClass.recordComponents.any { it.name == methodName }) {
isJavaRecordComponent = true isJavaRecordComponent = true
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.java.enhancement.readOnlyToMutable import org.jetbrains.kotlin.fir.java.enhancement.readOnlyToMutable
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
@@ -24,9 +23,6 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.Variance
private fun ClassId.toLookupTag(): ConeClassLikeLookupTag =
ConeClassLikeLookupTagImpl(this)
private fun ClassId.toConeFlexibleType( private fun ClassId.toConeFlexibleType(
typeArguments: Array<out ConeTypeProjection>, typeArguments: Array<out ConeTypeProjection>,
typeArgumentsForUpper: Array<out ConeTypeProjection>, typeArgumentsForUpper: Array<out ConeTypeProjection>,
@@ -186,7 +182,7 @@ private fun JavaClassifierType.toConeKotlinTypeForFlexibleBound(
classId = classId.readOnlyToMutable() ?: classId classId = classId.readOnlyToMutable() ?: classId
} }
val lookupTag = ConeClassLikeLookupTagImpl(classId) val lookupTag = classId.toLookupTag()
// When converting type parameter bounds we should not attempt to load any classes, as this may trigger // When converting type parameter bounds we should not attempt to load any classes, as this may trigger
// enhancement of type parameter bounds on some other class that depends on this one. Also, in case of raw // enhancement of type parameter bounds on some other class that depends on this one. Also, in case of raw
// types specifically there could be an infinite recursion on the type parameter itself. // types specifically there could be an infinite recursion on the type parameter itself.
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredPropertySymbols import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredPropertySymbols
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
@@ -36,7 +35,7 @@ internal class AnnotationsLoader(private val session: FirSession, private val ko
private fun loadAnnotation( private fun loadAnnotation(
annotationClassId: ClassId, result: MutableList<FirAnnotation>, annotationClassId: ClassId, result: MutableList<FirAnnotation>,
): KotlinJvmBinaryClass.AnnotationArgumentVisitor { ): KotlinJvmBinaryClass.AnnotationArgumentVisitor {
val lookupTag = ConeClassLikeLookupTagImpl(annotationClassId) val lookupTag = annotationClassId.toLookupTag()
return object : KotlinJvmBinaryClass.AnnotationArgumentVisitor { return object : KotlinJvmBinaryClass.AnnotationArgumentVisitor {
private val argumentMap = mutableMapOf<Name, FirExpression>() private val argumentMap = mutableMapOf<Name, FirExpression>()
@@ -48,7 +47,7 @@ internal class AnnotationsLoader(private val session: FirSession, private val ko
} }
private fun ClassLiteralValue.toFirClassReferenceExpression(): FirClassReferenceExpression { private fun ClassLiteralValue.toFirClassReferenceExpression(): FirClassReferenceExpression {
val resolvedClassTypeRef = ConeClassLikeLookupTagImpl(classId).toDefaultResolvedTypeRef() val resolvedClassTypeRef = classId.toLookupTag().toDefaultResolvedTypeRef()
return buildClassReferenceExpression { return buildClassReferenceExpression {
classTypeRef = resolvedClassTypeRef classTypeRef = resolvedClassTypeRef
typeRef = buildResolvedTypeRef { typeRef = buildResolvedTypeRef {
@@ -83,7 +82,7 @@ internal class AnnotationsLoader(private val session: FirSession, private val ko
typeRef = buildResolvedTypeRef { typeRef = buildResolvedTypeRef {
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(this@toEnumEntryReferenceExpression), this@toEnumEntryReferenceExpression.toLookupTag(),
emptyArray(), emptyArray(),
isNullable = false isNullable = false
) )
@@ -489,7 +489,7 @@ class FirSignatureEnhancement(
else -> return null else -> return null
} }
return ConeClassLikeTypeImpl( return ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(purelyImplementedClassId), purelyImplementedClassId.toLookupTag(),
parametersAsTypeProjections.toTypedArray(), parametersAsTypeProjections.toTypedArray(),
isNullable = false isNullable = false
) )
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.load.java.typeEnhancement.* import org.jetbrains.kotlin.load.java.typeEnhancement.*
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
@@ -136,13 +135,13 @@ private fun ConeClassifierLookupTag.enhanceMutability(
MutabilityQualifier.READ_ONLY -> { MutabilityQualifier.READ_ONLY -> {
val readOnlyId = classId.mutableToReadOnly() val readOnlyId = classId.mutableToReadOnly()
if (position == TypeComponentPosition.FLEXIBLE_LOWER && readOnlyId != null) { if (position == TypeComponentPosition.FLEXIBLE_LOWER && readOnlyId != null) {
return ConeClassLikeLookupTagImpl(readOnlyId) return readOnlyId.toLookupTag()
} }
} }
MutabilityQualifier.MUTABLE -> { MutabilityQualifier.MUTABLE -> {
val mutableId = classId.readOnlyToMutable() val mutableId = classId.readOnlyToMutable()
if (position == TypeComponentPosition.FLEXIBLE_UPPER && mutableId != null) { if (position == TypeComponentPosition.FLEXIBLE_UPPER && mutableId != null) {
return ConeClassLikeLookupTagImpl(mutableId) return mutableId.toLookupTag()
} }
} }
null -> {} null -> {}
@@ -154,7 +154,7 @@ private fun buildEnumCall(session: FirSession, classId: ClassId?, entryName: Nam
if (classId != null) { if (classId != null) {
this.typeRef = buildResolvedTypeRef { this.typeRef = buildResolvedTypeRef {
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(classId), classId.toLookupTag(),
emptyArray(), emptyArray(),
isNullable = false isNullable = false
) )
@@ -174,7 +174,7 @@ private fun List<JavaAnnotationArgument>.mapJavaTargetArguments(session: FirSess
resultSet.mapTo(arguments) { buildEnumCall(session, classId, Name.identifier(it.name)) } resultSet.mapTo(arguments) { buildEnumCall(session, classId, Name.identifier(it.name)) }
varargElementType = buildResolvedTypeRef { varargElementType = buildResolvedTypeRef {
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(classId), classId.toLookupTag(),
emptyArray(), emptyArray(),
isNullable = false, isNullable = false,
ConeAttributes.Empty ConeAttributes.Empty
@@ -221,7 +221,7 @@ private fun JavaAnnotation.toFirAnnotationCall(
StandardClassIds.Annotations.Java.Documented -> StandardClassIds.Annotations.MustBeDocumented StandardClassIds.Annotations.Java.Documented -> StandardClassIds.Annotations.MustBeDocumented
StandardClassIds.Annotations.Java.Deprecated -> StandardClassIds.Annotations.Deprecated StandardClassIds.Annotations.Java.Deprecated -> StandardClassIds.Annotations.Deprecated
else -> classId else -> classId
}?.let(::ConeClassLikeLookupTagImpl) }?.toLookupTag()
annotationTypeRef = if (lookupTag != null) { annotationTypeRef = if (lookupTag != null) {
buildResolvedTypeRef { buildResolvedTypeRef {
type = ConeClassLikeTypeImpl(lookupTag, emptyArray(), isNullable = false) type = ConeClassLikeTypeImpl(lookupTag, emptyArray(), isNullable = false)
@@ -6,13 +6,10 @@
package org.jetbrains.kotlin.fir.plugin package org.jetbrains.kotlin.fir.plugin
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.types.constructType
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
import org.jetbrains.kotlin.fir.types.constructStarProjectedType
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.ConeTypeProjection
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
@@ -29,7 +26,7 @@ public fun ClassId.createConeType(
else -> symbol.constructType(typeArguments, nullable) else -> symbol.constructType(typeArguments, nullable)
} }
else -> ConeClassLikeTypeImpl( else -> ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(this), this.toLookupTag(),
typeArguments, typeArguments,
nullable nullable
) )
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.types.constructStarProjectedType
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
@@ -390,7 +389,7 @@ abstract class FirVisibilityChecker : FirSessionComponent {
val ownerSymbol = toSymbol(session) as? FirRegularClassSymbol val ownerSymbol = toSymbol(session) as? FirRegularClassSymbol
if (ownerSymbol?.fir?.isCompanion == true) { if (ownerSymbol?.fir?.isCompanion == true) {
return ConeClassLikeLookupTagImpl(outerClassId) return outerClassId.toLookupTag()
} }
return null return null
} }
@@ -546,7 +545,7 @@ fun FirClassLikeSymbol<*>.getContainingClassLookupTag(): ConeClassLikeLookupTag?
(fir as? FirRegularClass)?.containingClassForLocal() (fir as? FirRegularClass)?.containingClassForLocal()
} else { } else {
val ownerId = classId.outerClassId val ownerId = classId.outerClassId
ownerId?.let { ConeClassLikeLookupTagImpl(it) } ownerId?.let { it.toLookupTag() }
} }
} }
@@ -89,7 +89,7 @@ fun ConeKotlinType.withParameterNameAnnotation(parameter: FirFunctionTypeParamet
buildResolvedTypeRef { buildResolvedTypeRef {
source = fakeSource source = fakeSource
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(StandardNames.FqNames.parameterNameClassId), StandardNames.FqNames.parameterNameClassId.toLookupTag(),
emptyArray(), emptyArray(),
isNullable = false isNullable = false
) )
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirTypeIntersectionScope
import org.jetbrains.kotlin.fir.scopes.impl.dynamicMembersStorage import org.jetbrains.kotlin.fir.scopes.impl.dynamicMembersStorage
import org.jetbrains.kotlin.fir.scopes.impl.getOrBuildScopeForIntegerConstantOperatorType import org.jetbrains.kotlin.fir.scopes.impl.getOrBuildScopeForIntegerConstantOperatorType
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
@@ -151,7 +150,7 @@ fun FirClass.defaultType(): ConeClassLikeType =
fun ClassId.defaultType(parameters: List<FirTypeParameterSymbol>): ConeClassLikeType = fun ClassId.defaultType(parameters: List<FirTypeParameterSymbol>): ConeClassLikeType =
ConeClassLikeTypeImpl( ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(this), this.toLookupTag(),
parameters.map { parameters.map {
ConeTypeParameterTypeImpl( ConeTypeParameterTypeImpl(
it.toLookupTag(), it.toLookupTag(),
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.create import org.jetbrains.kotlin.fir.types.create
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.toLookupTag
import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
@@ -126,7 +127,7 @@ class FirDynamicMembersStorage(val session: FirSession) : FirSessionComponent {
private val anyArrayTypeRef = buildResolvedTypeRef { private val anyArrayTypeRef = buildResolvedTypeRef {
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(StandardClassIds.Array), StandardClassIds.Array.toLookupTag(),
arrayOf(session.builtinTypes.nullableAnyType.coneType), arrayOf(session.builtinTypes.nullableAnyType.coneType),
isNullable = false isNullable = false
) )
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
@@ -104,7 +103,7 @@ fun ConeKotlinType.kFunctionTypeToFunctionType(session: FirSession): ConeClassLi
if (isSuspendOrKSuspendFunctionType(session)) FunctionClassKind.SuspendFunction if (isSuspendOrKSuspendFunctionType(session)) FunctionClassKind.SuspendFunction
else FunctionClassKind.Function else FunctionClassKind.Function
val functionalTypeId = ClassId(kind.packageFqName, kind.numberedClassName(typeArguments.size - 1)) val functionalTypeId = ClassId(kind.packageFqName, kind.numberedClassName(typeArguments.size - 1))
return ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(functionalTypeId), typeArguments, isNullable = false) return ConeClassLikeTypeImpl(functionalTypeId.toLookupTag(), typeArguments, isNullable = false)
} }
fun ConeKotlinType.suspendFunctionTypeToFunctionType(session: FirSession): ConeClassLikeType { fun ConeKotlinType.suspendFunctionTypeToFunctionType(session: FirSession): ConeClassLikeType {
@@ -113,7 +112,7 @@ fun ConeKotlinType.suspendFunctionTypeToFunctionType(session: FirSession): ConeC
if (isKFunctionType(session)) FunctionClassKind.KFunction if (isKFunctionType(session)) FunctionClassKind.KFunction
else FunctionClassKind.Function else FunctionClassKind.Function
val functionalTypeId = ClassId(kind.packageFqName, kind.numberedClassName(typeArguments.size - 1)) val functionalTypeId = ClassId(kind.packageFqName, kind.numberedClassName(typeArguments.size - 1))
return ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(functionalTypeId), typeArguments, isNullable = false, attributes = attributes) return ConeClassLikeTypeImpl(functionalTypeId.toLookupTag(), typeArguments, isNullable = false, attributes = attributes)
} }
fun ConeKotlinType.suspendFunctionTypeToFunctionTypeWithContinuation(session: FirSession, continuationClassId: ClassId): ConeClassLikeType { fun ConeKotlinType.suspendFunctionTypeToFunctionTypeWithContinuation(session: FirSession, continuationClassId: ClassId): ConeClassLikeType {
@@ -126,8 +125,8 @@ fun ConeKotlinType.suspendFunctionTypeToFunctionTypeWithContinuation(session: Fi
val functionalTypeId = ClassId(kind.packageFqName, kind.numberedClassName(typeArguments.size)) val functionalTypeId = ClassId(kind.packageFqName, kind.numberedClassName(typeArguments.size))
val lastTypeArgument = typeArguments.last() val lastTypeArgument = typeArguments.last()
return ConeClassLikeTypeImpl( return ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(functionalTypeId), functionalTypeId.toLookupTag(),
typeArguments = (typeArguments.dropLast(1) + ConeClassLikeLookupTagImpl(continuationClassId).constructClassType( typeArguments = (typeArguments.dropLast(1) + continuationClassId.toLookupTag().constructClassType(
arrayOf(lastTypeArgument), arrayOf(lastTypeArgument),
isNullable = false isNullable = false
) + lastTypeArgument).toTypedArray(), ) + lastTypeArgument).toTypedArray(),
@@ -161,7 +161,7 @@ fun createFunctionalType(
else -> ConeAttributes.Empty else -> ConeAttributes.Empty
} }
return ConeClassLikeTypeImpl( return ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(functionalTypeId), functionalTypeId.toLookupTag(),
receiverAndParameterTypes.toTypedArray(), receiverAndParameterTypes.toTypedArray(),
isNullable = false, isNullable = false,
attributes = attributes attributes = attributes
@@ -175,7 +175,7 @@ fun createKPropertyType(
): ConeLookupTagBasedType { ): ConeLookupTagBasedType {
val arguments = if (receiverType != null) listOf(receiverType, rawReturnType) else listOf(rawReturnType) val arguments = if (receiverType != null) listOf(receiverType, rawReturnType) else listOf(rawReturnType)
val classId = StandardClassIds.reflectByName("K${if (isMutable) "Mutable" else ""}Property${arguments.size - 1}") val classId = StandardClassIds.reflectByName("K${if (isMutable) "Mutable" else ""}Property${arguments.size - 1}")
return ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(classId), arguments.toTypedArray(), isNullable = false) return ConeClassLikeTypeImpl(classId.toLookupTag(), arguments.toTypedArray(), isNullable = false)
} }
fun BodyResolveComponents.buildResolvedQualifierForClass( fun BodyResolveComponents.buildResolvedQualifierForClass(
@@ -259,12 +259,7 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver() {
session session
) )
val actualTypeParametersCount = val actualTypeParametersCount = symbol.typeParameterSymbols.size
when (symbol) {
is FirTypeAliasSymbol ->
outerDeclarations.sumOf { it?.let { d -> getActualTypeParametersCount(d) } ?: 0 }
else -> symbol.typeParameterSymbols.size
}
for ((typeParameterIndex, typeParameter) in originalTypeParameters.withIndex()) { for ((typeParameterIndex, typeParameter) in originalTypeParameters.withIndex()) {
val (parameterClass, qualifierPartIndex) = typeParametersAlignedToQualifierParts[typeParameter.symbol] ?: continue val (parameterClass, qualifierPartIndex) = typeParametersAlignedToQualifierParts[typeParameter.symbol] ?: continue
@@ -23,12 +23,12 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.expressions.builder.buildEmptyExpressionBlock import org.jetbrains.kotlin.fir.expressions.builder.buildEmptyExpressionBlock
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.toLookupTag
import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
@@ -44,7 +44,7 @@ fun FirRegularClassBuilder.generateValuesFunction(
returnTypeRef = buildResolvedTypeRef { returnTypeRef = buildResolvedTypeRef {
source = sourceElement source = sourceElement
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(StandardClassIds.Array), StandardClassIds.Array.toLookupTag(),
arrayOf( arrayOf(
ConeClassLikeTypeImpl(this@generateValuesFunction.symbol.toLookupTag(), emptyArray(), isNullable = false) ConeClassLikeTypeImpl(this@generateValuesFunction.symbol.toLookupTag(), emptyArray(), isNullable = false)
), ),
@@ -97,7 +97,7 @@ fun FirRegularClassBuilder.generateValueOfFunction(
returnTypeRef = buildResolvedTypeRef { returnTypeRef = buildResolvedTypeRef {
source = sourceElement source = sourceElement
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(StandardClassIds.String), StandardClassIds.String.toLookupTag(),
emptyArray(), emptyArray(),
isNullable = false isNullable = false
) )
@@ -131,7 +131,7 @@ fun FirRegularClassBuilder.generateEntriesGetter(
returnTypeRef = buildResolvedTypeRef { returnTypeRef = buildResolvedTypeRef {
source = sourceElement source = sourceElement
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(StandardClassIds.EnumEntries), StandardClassIds.EnumEntries.toLookupTag(),
arrayOf( arrayOf(
ConeClassLikeTypeImpl(this@generateEntriesGetter.symbol.toLookupTag(), emptyArray(), isNullable = false) ConeClassLikeTypeImpl(this@generateEntriesGetter.symbol.toLookupTag(), emptyArray(), isNullable = false)
), ),
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.utils.classId import org.jetbrains.kotlin.fir.declarations.utils.classId
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.toLookupTag
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
@@ -29,7 +29,7 @@ object StandardTypes {
} }
private fun ClassId.createType(isNullable: Boolean = false): ConeClassLikeType = private fun ClassId.createType(isNullable: Boolean = false): ConeClassLikeType =
ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(this), emptyArray(), isNullable) ConeClassLikeTypeImpl(this.toLookupTag(), emptyArray(), isNullable)
fun ConeClassLikeType.isDouble(): Boolean = lookupTag.classId == StandardClassIds.Double fun ConeClassLikeType.isDouble(): Boolean = lookupTag.classId == StandardClassIds.Double
fun ConeClassLikeType.isFloat(): Boolean = lookupTag.classId == StandardClassIds.Float fun ConeClassLikeType.isFloat(): Boolean = lookupTag.classId == StandardClassIds.Float
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.toLookupTag
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.SpecialNames
@@ -50,7 +51,7 @@ sealed class FirClassLikeSymbol<D : FirClassLikeDeclaration>(
sealed class FirClassSymbol<C : FirClass>(classId: ClassId) : FirClassLikeSymbol<C>(classId) { sealed class FirClassSymbol<C : FirClass>(classId: ClassId) : FirClassLikeSymbol<C>(classId) {
private val lookupTag: ConeClassLikeLookupTag = private val lookupTag: ConeClassLikeLookupTag =
if (classId.isLocal) ConeClassLookupTagWithFixedSymbol(classId, this) if (classId.isLocal) ConeClassLookupTagWithFixedSymbol(classId, this)
else ConeClassLikeLookupTagImpl(classId) else classId.toLookupTag()
override fun toLookupTag(): ConeClassLikeLookupTag = lookupTag override fun toLookupTag(): ConeClassLikeLookupTag = lookupTag
@@ -89,7 +90,7 @@ val ANONYMOUS_CLASS_ID = ClassId(FqName.ROOT, FqName.topLevel(SpecialNames.ANONY
class FirAnonymousObjectSymbol : FirClassSymbol<FirAnonymousObject>(ANONYMOUS_CLASS_ID) class FirAnonymousObjectSymbol : FirClassSymbol<FirAnonymousObject>(ANONYMOUS_CLASS_ID)
class FirTypeAliasSymbol(classId: ClassId) : FirClassLikeSymbol<FirTypeAlias>(classId) { class FirTypeAliasSymbol(classId: ClassId) : FirClassLikeSymbol<FirTypeAlias>(classId) {
override fun toLookupTag(): ConeClassLikeLookupTag = ConeClassLikeLookupTagImpl(classId) override fun toLookupTag(): ConeClassLikeLookupTag = classId.toLookupTag()
val resolvedExpandedTypeRef: FirResolvedTypeRef val resolvedExpandedTypeRef: FirResolvedTypeRef
get() { get() {
@@ -9,8 +9,6 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.isLong import org.jetbrains.kotlin.fir.isLong
import org.jetbrains.kotlin.fir.isULong import org.jetbrains.kotlin.fir.isULong
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.approximateIntegerLiteralBounds import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.approximateIntegerLiteralBounds
import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.createClassLikeType import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.createClassLikeType
import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.createSupertypeList import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.createSupertypeList
@@ -18,6 +16,7 @@ import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.getApprox
import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.withNullabilityAndAttributes import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.withNullabilityAndAttributes
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.AbstractTypeChecker
import org.jetbrains.kotlin.types.model.SimpleTypeMarker import org.jetbrains.kotlin.types.model.SimpleTypeMarker
@@ -85,7 +84,7 @@ class ConeIntegerLiteralConstantTypeImpl(
} }
private fun createType(classId: ClassId): ConeClassLikeType { private fun createType(classId: ClassId): ConeClassLikeType {
return ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(classId), emptyArray(), false) return ConeClassLikeTypeImpl(classId.toLookupTag(), emptyArray(), false)
} }
private val INT_RANGE = Int.MIN_VALUE.toLong()..Int.MAX_VALUE.toLong() private val INT_RANGE = Int.MIN_VALUE.toLong()..Int.MAX_VALUE.toLong()
@@ -143,12 +142,12 @@ private object ConeIntegerLiteralTypeExtensions {
fun createSupertypeList(type: ConeIntegerLiteralType): List<ConeClassLikeType> { fun createSupertypeList(type: ConeIntegerLiteralType): List<ConeClassLikeType> {
return listOf( return listOf(
createClassLikeType(StandardClassIds.Number), createClassLikeType(StandardClassIds.Number),
ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(StandardClassIds.Comparable), arrayOf(ConeKotlinTypeProjectionIn(type)), false) ConeClassLikeTypeImpl(StandardClassIds.Comparable.toLookupTag(), arrayOf(ConeKotlinTypeProjectionIn(type)), false)
) )
} }
fun createClassLikeType(classId: ClassId): ConeClassLikeType { fun createClassLikeType(classId: ClassId): ConeClassLikeType {
return ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(classId), emptyArray(), false) return ConeClassLikeTypeImpl(classId.toLookupTag(), emptyArray(), false)
} }
fun ConeIntegerLiteralType.getApproximatedTypeImpl(expectedType: ConeKotlinType?): ConeClassLikeType { fun ConeIntegerLiteralType.getApproximatedTypeImpl(expectedType: ConeKotlinType?): ConeClassLikeType {
@@ -33,12 +33,16 @@ fun ConeClassLikeLookupTag.constructClassType(
return ConeClassLikeTypeImpl(this, typeArguments, isNullable, attributes) return ConeClassLikeTypeImpl(this, typeArguments, isNullable, attributes)
} }
fun ClassId.toLookupTag(): ConeClassLikeLookupTagImpl {
return ConeClassLikeLookupTagImpl(this)
}
fun ClassId.constructClassLikeType( fun ClassId.constructClassLikeType(
typeArguments: Array<out ConeTypeProjection>, typeArguments: Array<out ConeTypeProjection>,
isNullable: Boolean, isNullable: Boolean,
attributes: ConeAttributes = ConeAttributes.Empty attributes: ConeAttributes = ConeAttributes.Empty
): ConeClassLikeType { ): ConeClassLikeType {
return ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(this), typeArguments, isNullable, attributes) return ConeClassLikeTypeImpl(this.toLookupTag(), typeArguments, isNullable, attributes)
} }
fun FirClassifierSymbol<*>.constructType( fun FirClassifierSymbol<*>.constructType(
@@ -5,16 +5,10 @@
package org.jetbrains.kotlin.fir.types.impl package org.jetbrains.kotlin.fir.types.impl
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fakeElement
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.ConeTypeProjection
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
@@ -29,7 +23,7 @@ sealed class FirImplicitBuiltinTypeRef(
override val annotations: List<FirAnnotation> override val annotations: List<FirAnnotation>
get() = emptyList() get() = emptyList()
override val type: ConeClassLikeType = ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(id), typeArguments, isNullable) override val type: ConeClassLikeType = ConeClassLikeTypeImpl(id.toLookupTag(), typeArguments, isNullable)
override val delegatedTypeRef: FirTypeRef? override val delegatedTypeRef: FirTypeRef?
get() = null get() = null
@@ -10,12 +10,8 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotation import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotation
import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyAnnotationArgumentMapping import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyAnnotationArgumentMapping
import org.jetbrains.kotlin.fir.extensions.FirTypeAttributeExtension import org.jetbrains.kotlin.fir.extensions.FirTypeAttributeExtension
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.ConeAttribute
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.classId
import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -46,7 +42,7 @@ class FirNumberSignAttributeExtension(session: FirSession) : FirTypeAttributeExt
return buildAnnotation { return buildAnnotation {
annotationTypeRef = buildResolvedTypeRef { annotationTypeRef = buildResolvedTypeRef {
type = ConeClassLikeTypeImpl( type = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(classId), classId.toLookupTag(),
emptyArray(), emptyArray(),
isNullable = false isNullable = false
) )
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
@@ -123,7 +122,7 @@ object FirParcelizeAnnotationChecker : FirAnnotationCallChecker() {
val targetType = (context.annotationContainers.lastOrNull() as? FirTypeRef)?.coneType?.withAttributes(ConeAttributes.Empty) val targetType = (context.annotationContainers.lastOrNull() as? FirTypeRef)?.coneType?.withAttributes(ConeAttributes.Empty)
?: return ?: return
val expectedType = ConeClassLikeTypeImpl( val expectedType = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(ParcelizeNames.PARCELER_ID), ParcelizeNames.PARCELER_ID.toLookupTag(),
arrayOf(targetType), arrayOf(targetType),
isNullable = false isNullable = false
) )
@@ -16,13 +16,9 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.fir.declarations.utils.*
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.toRegularClassSymbol
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.isSubtypeOf
import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.parcelize.ParcelizeNames.CREATOR_NAME import org.jetbrains.kotlin.parcelize.ParcelizeNames.CREATOR_NAME
import org.jetbrains.kotlin.parcelize.ParcelizeNames.OLD_PARCELER_ID import org.jetbrains.kotlin.parcelize.ParcelizeNames.OLD_PARCELER_ID
@@ -81,7 +77,7 @@ object FirParcelizeClassChecker : FirClassChecker() {
val superTypeRef = klass.superTypeRefs[index] val superTypeRef = klass.superTypeRefs[index]
val superType = superTypeRef.coneType val superType = superTypeRef.coneType
val parcelableType = ConeClassLikeTypeImpl( val parcelableType = ConeClassLikeTypeImpl(
ConeClassLikeLookupTagImpl(PARCELABLE_ID), PARCELABLE_ID.toLookupTag(),
emptyArray(), emptyArray(),
isNullable = false isNullable = false
) )