[FIR] Cleanup FIR modules. Part 8 (types package)

This commit is contained in:
Dmitriy Novozhilov
2020-06-26 16:13:58 +03:00
parent 2c3fe8b8ec
commit ee22488ab2
12 changed files with 11 additions and 15 deletions
@@ -740,7 +740,7 @@ class Fir2IrDeclarationStorage(
startOffset, endOffset, origin, symbol, startOffset, endOffset, origin, symbol,
valueParameter.name, index, type, valueParameter.name, index, type,
if (!valueParameter.isVararg) null if (!valueParameter.isVararg) null
else valueParameter.returnTypeRef.coneTypeSafe<ConeKotlinType>()?.arrayElementType(session)?.toIrType(typeContext), else valueParameter.returnTypeRef.coneTypeSafe<ConeKotlinType>()?.arrayElementType()?.toIrType(typeContext),
valueParameter.isCrossinline, valueParameter.isNoinline valueParameter.isCrossinline, valueParameter.isNoinline
).apply { ).apply {
descriptor.bind(this) descriptor.bind(this)
@@ -6,11 +6,9 @@
package org.jetbrains.kotlin.fir.types.jvm package org.jetbrains.kotlin.fir.types.jvm
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.types.FirQualifierPart import org.jetbrains.kotlin.fir.types.FirQualifierPart
import org.jetbrains.kotlin.fir.types.FirUserTypeRef
import org.jetbrains.kotlin.fir.types.builder.FirUserTypeRefBuilder import org.jetbrains.kotlin.fir.types.builder.FirUserTypeRefBuilder
import org.jetbrains.kotlin.fir.types.impl.FirUserTypeRefImpl import org.jetbrains.kotlin.fir.types.impl.FirUserTypeRefImpl
import org.jetbrains.kotlin.load.java.structure.JavaType import org.jetbrains.kotlin.load.java.structure.JavaType
@@ -150,7 +150,7 @@ abstract class AbstractConeCallConflictResolver(
private fun FirValueParameter.argumentType(): ConeKotlinType { private fun FirValueParameter.argumentType(): ConeKotlinType {
val type = returnTypeRef.coneTypeUnsafe<ConeKotlinType>() val type = returnTypeRef.coneTypeUnsafe<ConeKotlinType>()
if (isVararg) return type.arrayElementType(inferenceComponents.session)!! if (isVararg) return type.arrayElementType()!!
return type return type
} }
@@ -357,7 +357,7 @@ internal fun FirExpression.getExpectedType(
} }
fun ConeKotlinType.varargElementType(session: FirSession): ConeKotlinType { fun ConeKotlinType.varargElementType(session: FirSession): ConeKotlinType {
return this.arrayElementType(session) ?: error("Failed to extract! ${this.render()}!") return this.arrayElementType() ?: error("Failed to extract! ${this.render()}!")
} }
fun FirTypeRef.isExtensionFunctionType(session: FirSession): Boolean { fun FirTypeRef.isExtensionFunctionType(session: FirSession): Boolean {
@@ -168,7 +168,7 @@ class FirCallCompletionResultsWriterTransformer(
// Create a FirVarargArgumentExpression for the vararg arguments // Create a FirVarargArgumentExpression for the vararg arguments
val varargParameterTypeRef = varargParameter.returnTypeRef val varargParameterTypeRef = varargParameter.returnTypeRef
val resolvedArrayType = varargParameterTypeRef.substitute(this) val resolvedArrayType = varargParameterTypeRef.substitute(this)
val resolvedElementType = resolvedArrayType.arrayElementType(session) val resolvedElementType = resolvedArrayType.arrayElementType()
var firstIndex = argumentList.arguments.size var firstIndex = argumentList.arguments.size
val newArgumentMapping = mutableMapOf<FirExpression, FirValueParameter>() val newArgumentMapping = mutableMapOf<FirExpression, FirValueParameter>()
val varargArgument = buildVarargArgumentsExpression { val varargArgument = buildVarargArgumentsExpression {
@@ -9,11 +9,9 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
val FirSymbolProvider.Any: FirClassLikeSymbol<*> get() = this.getClassLikeSymbolByFqName(StandardClassIds.Any)!! val FirSymbolProvider.Any: FirClassLikeSymbol<*> get() = this.getClassLikeSymbolByFqName(StandardClassIds.Any)!!
val FirSymbolProvider.Nothing: FirClassLikeSymbol<*> get() = this.getClassLikeSymbolByFqName(StandardClassIds.Nothing)!! val FirSymbolProvider.Nothing: FirClassLikeSymbol<*> get() = this.getClassLikeSymbolByFqName(StandardClassIds.Nothing)!!
operator fun ClassId.invoke(symbolProvider: FirSymbolProvider): FirClassLikeSymbol<*> { operator fun ClassId.invoke(symbolProvider: FirSymbolProvider): FirClassLikeSymbol<*> {
return symbolProvider.getClassLikeSymbolByFqName(this)!! return symbolProvider.getClassLikeSymbolByFqName(this)!!
} }
@@ -5,10 +5,8 @@
package org.jetbrains.kotlin.fir.types package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.StandardClassIds
fun ConeTypeProjection.createArrayOf(nullable: Boolean = false): ConeKotlinType { fun ConeTypeProjection.createArrayOf(nullable: Boolean = false): ConeKotlinType {
if (this is ConeKotlinTypeProjection) { if (this is ConeKotlinTypeProjection) {
val type = type.lowerBoundIfFlexible() val type = type.lowerBoundIfFlexible()
@@ -25,8 +23,7 @@ fun ConeTypeProjection.createArrayOf(nullable: Boolean = false): ConeKotlinType
return StandardClassIds.Array.constructClassLikeType(arrayOf(this), nullable) return StandardClassIds.Array.constructClassLikeType(arrayOf(this), nullable)
} }
fun ConeKotlinType.arrayElementType(): ConeKotlinType? {
fun ConeKotlinType.arrayElementType(session: FirSession): ConeKotlinType? {
val type = this.lowerBoundIfFlexible() val type = this.lowerBoundIfFlexible()
if (type !is ConeClassLikeType) return null if (type !is ConeClassLikeType) return null
val classId = type.lookupTag.classId val classId = type.lookupTag.classId
@@ -58,6 +58,7 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeCo
isExtensionFunction: Boolean isExtensionFunction: Boolean
): SimpleTypeMarker { ): SimpleTypeMarker {
require(constructor is FirClassifierSymbol<*>) require(constructor is FirClassifierSymbol<*>)
@Suppress("UNCHECKED_CAST")
return when (constructor) { return when (constructor) {
is FirClassLikeSymbol<*> -> ConeClassLikeTypeImpl( is FirClassLikeSymbol<*> -> ConeClassLikeTypeImpl(
constructor.toLookupTag(), constructor.toLookupTag(),
@@ -335,6 +335,7 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty
} }
require(newArgument is ConeCapturedType) require(newArgument is ConeCapturedType)
@Suppress("UNCHECKED_CAST")
newArgument.constructor.supertypes = upperBounds as List<ConeKotlinType> newArgument.constructor.supertypes = upperBounds as List<ConeKotlinType>
} }
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.FirSessionComponent
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.types.AbstractTypeCheckerContext import org.jetbrains.kotlin.types.AbstractTypeCheckerContext
@@ -92,6 +92,7 @@ fun <T : ConeKotlinType> T.withArguments(arguments: Array<out ConeTypeProjection
return this return this
} }
@Suppress("UNCHECKED_CAST")
return when (this) { return when (this) {
is ConeClassErrorType -> this is ConeClassErrorType -> this
is ConeClassLikeTypeImpl -> ConeClassLikeTypeImpl(lookupTag, arguments, nullability.isNullable) as T is ConeClassLikeTypeImpl -> ConeClassLikeTypeImpl(lookupTag, arguments, nullability.isNullable) as T
@@ -121,6 +122,7 @@ fun <T : ConeKotlinType> T.withNullability(nullability: ConeNullability, typeCon
return this return this
} }
@Suppress("UNCHECKED_CAST")
return when (this) { return when (this) {
is ConeClassErrorType -> this is ConeClassErrorType -> this
is ConeClassLikeTypeImpl -> ConeClassLikeTypeImpl(lookupTag, typeArguments, nullability.isNullable) is ConeClassLikeTypeImpl -> ConeClassLikeTypeImpl(lookupTag, typeArguments, nullability.isNullable)
@@ -349,7 +349,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
if (valueParameter.isVararg) { if (valueParameter.isVararg) {
data.append("vararg ") data.append("vararg ")
} }
valueParameter.returnTypeRef.coneTypeSafe<ConeClassLikeType>()?.arrayElementType(session)?.let { data.append(it.render()) } valueParameter.returnTypeRef.coneTypeSafe<ConeClassLikeType>()?.arrayElementType()?.let { data.append(it.render()) }
?: valueParameter.returnTypeRef.accept(this, data) ?: valueParameter.returnTypeRef.accept(this, data)
valueParameter.defaultValue?.let { data.append(" = ...") } valueParameter.defaultValue?.let { data.append(" = ...") }
} }