[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 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 =
|
||||
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.FirTypeRef
|
||||
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.lexer.KtTokens.CLOSING_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
|
||||
abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context = Context()) {
|
||||
|
||||
protected val implicitUnitType = FirImplicitUnitTypeRef(null)
|
||||
protected val implicitAnyType = FirImplicitAnyTypeRef(null)
|
||||
protected val implicitEnumType = FirImplicitEnumTypeRef(null)
|
||||
protected val implicitAnnotationType = FirImplicitAnnotationTypeRef(null)
|
||||
protected val implicitUnitType = session.builtinTypes.unitType
|
||||
protected val implicitAnyType = session.builtinTypes.anyType
|
||||
protected val implicitEnumType = session.builtinTypes.enumType
|
||||
protected val implicitAnnotationType = session.builtinTypes.annotationType
|
||||
|
||||
abstract val T.elementType: IElementType
|
||||
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.impl.FirImplicitKPropertyTypeRef
|
||||
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.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -335,7 +334,7 @@ fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession,
|
||||
)
|
||||
}
|
||||
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(
|
||||
session, null, DELEGATED_SETTER_PARAM,
|
||||
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.FirDeserializationContext
|
||||
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.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.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||
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.metadata.ProtoBuf
|
||||
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 noExpectedType = FirImplicitTypeRefImpl(null)
|
||||
private val booleanType = FirImplicitBooleanTypeRef(null)
|
||||
private inline val builtinTypes: BuiltinTypes get() = session.builtinTypes
|
||||
|
||||
final override val symbolProvider = session.service<FirSymbolProvider>()
|
||||
|
||||
@@ -755,15 +755,15 @@ open class FirBodyResolveTransformer(
|
||||
binaryLogicExpression: FirBinaryLogicExpression,
|
||||
data: Any?
|
||||
): CompositeTransformResult<FirStatement> {
|
||||
return super.transformBinaryLogicExpression(binaryLogicExpression, booleanType).also {
|
||||
(it.single as FirBinaryLogicExpression).resultType = booleanType
|
||||
return super.transformBinaryLogicExpression(binaryLogicExpression, builtinTypes.booleanType).also {
|
||||
(it.single as FirBinaryLogicExpression).resultType = builtinTypes.booleanType
|
||||
}
|
||||
}
|
||||
|
||||
override fun transformOperatorCall(operatorCall: FirOperatorCall, data: Any?): CompositeTransformResult<FirStatement> {
|
||||
if (operatorCall.operation in FirOperation.BOOLEANS) {
|
||||
return (operatorCall.transformChildren(this, noExpectedType) as FirOperatorCall).also {
|
||||
it.resultType = booleanType
|
||||
it.resultType = builtinTypes.booleanType
|
||||
}.compose()
|
||||
}
|
||||
return super.transformOperatorCall(operatorCall, data)
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.fir
|
||||
|
||||
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 kotlin.properties.ReadOnlyProperty
|
||||
import kotlin.reflect.KClass
|
||||
@@ -16,6 +18,7 @@ abstract class FirSession(val sessionProvider: FirSessionProvider?) {
|
||||
|
||||
val jsr305State: Jsr305State? get() = null
|
||||
|
||||
val builtinTypes: BuiltinTypes = BuiltinTypes()
|
||||
|
||||
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 {
|
||||
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.transformSingle
|
||||
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.name.Name
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
@@ -46,7 +45,7 @@ class FirEnumEntryImpl(
|
||||
override val companionObject: FirRegularClass?
|
||||
get() = null
|
||||
|
||||
override var typeRef: FirTypeRef = FirImplicitEnumTypeRef(null)
|
||||
override var typeRef: FirTypeRef = session.builtinTypes.enumType
|
||||
|
||||
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.transformInplace
|
||||
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.name.Name
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
@@ -45,6 +44,6 @@ class FirTypeParameterImpl(
|
||||
|
||||
fun FirTypeParameterImpl.addDefaultBoundIfNecessary() {
|
||||
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.StandardClassIds
|
||||
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.FirResolvedTypeRef
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -56,6 +55,10 @@ class FirImplicitNothingTypeRef(
|
||||
psi: PsiElement?
|
||||
) : FirImplicitBuiltinTypeRef(psi, StandardClassIds.Nothing)
|
||||
|
||||
class FirImplicitNullableNothingTypeRef(
|
||||
psi: PsiElement?
|
||||
) : FirImplicitBuiltinTypeRef(psi, StandardClassIds.Nothing, isNullable = true)
|
||||
|
||||
class FirImplicitStringTypeRef(
|
||||
psi: PsiElement?
|
||||
) : FirImplicitBuiltinTypeRef(psi, StandardClassIds.String)
|
||||
|
||||
Reference in New Issue
Block a user