[FIR] Add builtins types to FirSession
This commit is contained in:
@@ -75,13 +75,13 @@ internal class Fir2IrVisitor(
|
|||||||
|
|
||||||
private val declarationStorage = Fir2IrDeclarationStorage(session, symbolTable, moduleDescriptor)
|
private val declarationStorage = Fir2IrDeclarationStorage(session, symbolTable, moduleDescriptor)
|
||||||
|
|
||||||
private val nothingType = FirImplicitNothingTypeRef(null).toIrType(session, declarationStorage)
|
private val nothingType = session.builtinTypes.nothingType.toIrType(session, declarationStorage)
|
||||||
|
|
||||||
private val unitType = FirImplicitUnitTypeRef(null).toIrType(session, declarationStorage)
|
private val unitType = session.builtinTypes.unitType.toIrType(session, declarationStorage)
|
||||||
|
|
||||||
private val booleanType = FirImplicitBooleanTypeRef(null).toIrType(session, declarationStorage)
|
private val booleanType = session.builtinTypes.booleanType.toIrType(session, declarationStorage)
|
||||||
|
|
||||||
private val stringType = FirImplicitStringTypeRef(null).toIrType(session, declarationStorage)
|
private val stringType = session.builtinTypes.stringType.toIrType(session, declarationStorage)
|
||||||
|
|
||||||
private fun ModuleDescriptor.findPackageFragmentForFile(file: FirFile): PackageFragmentDescriptor =
|
private fun ModuleDescriptor.findPackageFragmentForFile(file: FirFile): PackageFragmentDescriptor =
|
||||||
getPackage(file.packageFqName).fragments.first()
|
getPackage(file.packageFqName).fragments.first()
|
||||||
|
|||||||
@@ -31,7 +31,9 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
|||||||
import org.jetbrains.kotlin.fir.types.ConeTypeParameterType
|
import org.jetbrains.kotlin.fir.types.ConeTypeParameterType
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||||
import org.jetbrains.kotlin.fir.types.impl.*
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
||||||
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
|
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.CLOSING_QUOTE
|
import org.jetbrains.kotlin.lexer.KtTokens.CLOSING_QUOTE
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.OPEN_QUOTE
|
import org.jetbrains.kotlin.lexer.KtTokens.OPEN_QUOTE
|
||||||
@@ -47,10 +49,10 @@ import org.jetbrains.kotlin.util.OperatorNameConventions
|
|||||||
//T can be either PsiElement, or LighterASTNode
|
//T can be either PsiElement, or LighterASTNode
|
||||||
abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context = Context()) {
|
abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context = Context()) {
|
||||||
|
|
||||||
protected val implicitUnitType = FirImplicitUnitTypeRef(null)
|
protected val implicitUnitType = session.builtinTypes.unitType
|
||||||
protected val implicitAnyType = FirImplicitAnyTypeRef(null)
|
protected val implicitAnyType = session.builtinTypes.anyType
|
||||||
protected val implicitEnumType = FirImplicitEnumTypeRef(null)
|
protected val implicitEnumType = session.builtinTypes.enumType
|
||||||
protected val implicitAnnotationType = FirImplicitAnnotationTypeRef(null)
|
protected val implicitAnnotationType = session.builtinTypes.annotationType
|
||||||
|
|
||||||
abstract val T.elementType: IElementType
|
abstract val T.elementType: IElementType
|
||||||
abstract val T.asText: String
|
abstract val T.asText: String
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.fir.types.ConeStarProjection
|
|||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitKPropertyTypeRef
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitKPropertyTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -335,7 +334,7 @@ fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession,
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
setter = (setter as? FirPropertyAccessorImpl)
|
setter = (setter as? FirPropertyAccessorImpl)
|
||||||
?: FirPropertyAccessorImpl(session, null, false, Visibilities.UNKNOWN, FirImplicitUnitTypeRef(null), FirPropertyAccessorSymbol()).apply {
|
?: FirPropertyAccessorImpl(session, null, false, Visibilities.UNKNOWN, session.builtinTypes.unitType, FirPropertyAccessorSymbol()).apply {
|
||||||
val parameter = FirValueParameterImpl(
|
val parameter = FirValueParameterImpl(
|
||||||
session, null, DELEGATED_SETTER_PARAM,
|
session, null, DELEGATED_SETTER_PARAM,
|
||||||
FirImplicitTypeRefImpl(null),
|
FirImplicitTypeRefImpl(null),
|
||||||
|
|||||||
+7
-4
@@ -20,16 +20,19 @@ import org.jetbrains.kotlin.fir.declarations.impl.*
|
|||||||
import org.jetbrains.kotlin.fir.deserialization.FirBuiltinAnnotationDeserializer
|
import org.jetbrains.kotlin.fir.deserialization.FirBuiltinAnnotationDeserializer
|
||||||
import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext
|
import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext
|
||||||
import org.jetbrains.kotlin.fir.deserialization.deserializeClassToSymbol
|
import org.jetbrains.kotlin.fir.deserialization.deserializeClassToSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.buildDefaultUseSiteScope
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.getOrPut
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitAnyTypeRef
|
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||||
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
|
||||||
@@ -249,7 +252,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
replaceSupertypes(listOf(FirImplicitAnyTypeRef(null)))
|
replaceSupertypes(listOf(session.builtinTypes.anyType))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -48,7 +48,7 @@ open class FirBodyResolveTransformer(
|
|||||||
|
|
||||||
final override val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorWithJump(session, scopeSession)
|
final override val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorWithJump(session, scopeSession)
|
||||||
final override val noExpectedType = FirImplicitTypeRefImpl(null)
|
final override val noExpectedType = FirImplicitTypeRefImpl(null)
|
||||||
private val booleanType = FirImplicitBooleanTypeRef(null)
|
private inline val builtinTypes: BuiltinTypes get() = session.builtinTypes
|
||||||
|
|
||||||
final override val symbolProvider = session.service<FirSymbolProvider>()
|
final override val symbolProvider = session.service<FirSymbolProvider>()
|
||||||
|
|
||||||
@@ -755,15 +755,15 @@ open class FirBodyResolveTransformer(
|
|||||||
binaryLogicExpression: FirBinaryLogicExpression,
|
binaryLogicExpression: FirBinaryLogicExpression,
|
||||||
data: Any?
|
data: Any?
|
||||||
): CompositeTransformResult<FirStatement> {
|
): CompositeTransformResult<FirStatement> {
|
||||||
return super.transformBinaryLogicExpression(binaryLogicExpression, booleanType).also {
|
return super.transformBinaryLogicExpression(binaryLogicExpression, builtinTypes.booleanType).also {
|
||||||
(it.single as FirBinaryLogicExpression).resultType = booleanType
|
(it.single as FirBinaryLogicExpression).resultType = builtinTypes.booleanType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformOperatorCall(operatorCall: FirOperatorCall, data: Any?): CompositeTransformResult<FirStatement> {
|
override fun transformOperatorCall(operatorCall: FirOperatorCall, data: Any?): CompositeTransformResult<FirStatement> {
|
||||||
if (operatorCall.operation in FirOperation.BOOLEANS) {
|
if (operatorCall.operation in FirOperation.BOOLEANS) {
|
||||||
return (operatorCall.transformChildren(this, noExpectedType) as FirOperatorCall).also {
|
return (operatorCall.transformChildren(this, noExpectedType) as FirOperatorCall).also {
|
||||||
it.resultType = booleanType
|
it.resultType = builtinTypes.booleanType
|
||||||
}.compose()
|
}.compose()
|
||||||
}
|
}
|
||||||
return super.transformOperatorCall(operatorCall, data)
|
return super.transformOperatorCall(operatorCall, data)
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.fir
|
package org.jetbrains.kotlin.fir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.types.impl.*
|
||||||
import org.jetbrains.kotlin.utils.Jsr305State
|
import org.jetbrains.kotlin.utils.Jsr305State
|
||||||
import kotlin.properties.ReadOnlyProperty
|
import kotlin.properties.ReadOnlyProperty
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
@@ -16,6 +18,7 @@ abstract class FirSession(val sessionProvider: FirSessionProvider?) {
|
|||||||
|
|
||||||
val jsr305State: Jsr305State? get() = null
|
val jsr305State: Jsr305State? get() = null
|
||||||
|
|
||||||
|
val builtinTypes: BuiltinTypes = BuiltinTypes()
|
||||||
|
|
||||||
val components: MutableMap<KClass<*>, Any> = mutableMapOf()
|
val components: MutableMap<KClass<*>, Any> = mutableMapOf()
|
||||||
|
|
||||||
@@ -37,6 +40,18 @@ abstract class FirSession(val sessionProvider: FirSessionProvider?) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class BuiltinTypes {
|
||||||
|
val unitType: FirTypeRef = FirImplicitUnitTypeRef(null)
|
||||||
|
val anyType: FirTypeRef = FirImplicitAnyTypeRef(null)
|
||||||
|
val nullableAnyType: FirTypeRef = FirImplicitNullableAnyTypeRef(null)
|
||||||
|
val enumType: FirTypeRef = FirImplicitEnumTypeRef(null)
|
||||||
|
val annotationType: FirTypeRef = FirImplicitAnnotationTypeRef(null)
|
||||||
|
val booleanType: FirTypeRef = FirImplicitBooleanTypeRef(null)
|
||||||
|
val nothingType: FirTypeRef = FirImplicitNothingTypeRef(null)
|
||||||
|
val nullableNothingType: FirTypeRef = FirImplicitNullableNothingTypeRef(null)
|
||||||
|
val stringType: FirTypeRef = FirImplicitStringTypeRef(null)
|
||||||
|
}
|
||||||
|
|
||||||
interface FirSessionProvider {
|
interface FirSessionProvider {
|
||||||
fun getSession(moduleInfo: ModuleInfo): FirSession?
|
fun getSession(moduleInfo: ModuleInfo): FirSession?
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
|||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitEnumTypeRef
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
@@ -46,7 +45,7 @@ class FirEnumEntryImpl(
|
|||||||
override val companionObject: FirRegularClass?
|
override val companionObject: FirRegularClass?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
override var typeRef: FirTypeRef = FirImplicitEnumTypeRef(null)
|
override var typeRef: FirTypeRef = session.builtinTypes.enumType
|
||||||
|
|
||||||
override val arguments = mutableListOf<FirExpression>()
|
override val arguments = mutableListOf<FirExpression>()
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNullableAnyTypeRef
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
@@ -45,6 +44,6 @@ class FirTypeParameterImpl(
|
|||||||
|
|
||||||
fun FirTypeParameterImpl.addDefaultBoundIfNecessary() {
|
fun FirTypeParameterImpl.addDefaultBoundIfNecessary() {
|
||||||
if (bounds.isEmpty()) {
|
if (bounds.isEmpty()) {
|
||||||
bounds += FirImplicitNullableAnyTypeRef(null)
|
bounds += session.builtinTypes.nullableAnyType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+4
-1
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
|||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTagImpl
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTagImpl
|
||||||
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinTypeProjection
|
import org.jetbrains.kotlin.fir.types.ConeKotlinTypeProjection
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -56,6 +55,10 @@ class FirImplicitNothingTypeRef(
|
|||||||
psi: PsiElement?
|
psi: PsiElement?
|
||||||
) : FirImplicitBuiltinTypeRef(psi, StandardClassIds.Nothing)
|
) : FirImplicitBuiltinTypeRef(psi, StandardClassIds.Nothing)
|
||||||
|
|
||||||
|
class FirImplicitNullableNothingTypeRef(
|
||||||
|
psi: PsiElement?
|
||||||
|
) : FirImplicitBuiltinTypeRef(psi, StandardClassIds.Nothing, isNullable = true)
|
||||||
|
|
||||||
class FirImplicitStringTypeRef(
|
class FirImplicitStringTypeRef(
|
||||||
psi: PsiElement?
|
psi: PsiElement?
|
||||||
) : FirImplicitBuiltinTypeRef(psi, StandardClassIds.String)
|
) : FirImplicitBuiltinTypeRef(psi, StandardClassIds.String)
|
||||||
|
|||||||
Reference in New Issue
Block a user