FIR: Replace trivial usages of ConeClassType with ConeClassLikeType

This commit is contained in:
Denis Zharkov
2019-11-14 17:43:16 +03:00
parent a485a5ffd6
commit f178cb6fb3
6 changed files with 22 additions and 15 deletions
@@ -633,7 +633,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
+")" +")"
} }
private fun FlowContent.generate(type: ConeClassType) { private fun FlowContent.generate(type: ConeClassLikeType) {
resolved { resolved {
symbolRef(type.lookupTag.toSymbol(session)) { symbolRef(type.lookupTag.toSymbol(session)) {
fqn(type.lookupTag.classId.relativeClassName) fqn(type.lookupTag.classId.relativeClassName)
@@ -719,7 +719,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
private fun FlowContent.generate(type: ConeKotlinType) { private fun FlowContent.generate(type: ConeKotlinType) {
when (type) { when (type) {
is ConeClassErrorType -> error { +type.reason } is ConeClassErrorType -> error { +type.reason }
is ConeClassType -> generate(type) is ConeClassLikeType -> generate(type)
is ConeAbbreviatedType -> resolved { is ConeAbbreviatedType -> resolved {
symbolRef(type.abbreviationLookupTag.toSymbol(session)) { symbolRef(type.abbreviationLookupTag.toSymbol(session)) {
simpleName(type.abbreviationLookupTag.name) simpleName(type.abbreviationLookupTag.name)
@@ -28,7 +28,7 @@ class JavaOverrideChecker internal constructor(
private fun isEqualTypes(candidateType: ConeKotlinType, baseType: ConeKotlinType, substitutor: ConeSubstitutor): Boolean { private fun isEqualTypes(candidateType: ConeKotlinType, baseType: ConeKotlinType, substitutor: ConeSubstitutor): Boolean {
if (candidateType is ConeFlexibleType) return isEqualTypes(candidateType.lowerBound, baseType, substitutor) if (candidateType is ConeFlexibleType) return isEqualTypes(candidateType.lowerBound, baseType, substitutor)
if (baseType is ConeFlexibleType) return isEqualTypes(candidateType, baseType.lowerBound, substitutor) if (baseType is ConeFlexibleType) return isEqualTypes(candidateType, baseType.lowerBound, substitutor)
return if (candidateType is ConeClassType && baseType is ConeClassType) { return if (candidateType is ConeClassLikeType && baseType is ConeClassLikeType) {
candidateType.lookupTag.classId.let { it.readOnlyToMutable() ?: it } == baseType.lookupTag.classId.let { it.readOnlyToMutable() ?: it } candidateType.lookupTag.classId.let { it.readOnlyToMutable() ?: it } == baseType.lookupTag.classId.let { it.readOnlyToMutable() ?: it }
} else { } else {
with(context) { with(context) {
@@ -85,4 +85,4 @@ class JavaOverrideChecker internal constructor(
} }
} }
} }
@@ -20,7 +20,10 @@ import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
@@ -46,7 +49,7 @@ class FirSamResolverImpl(
override fun getFunctionTypeForPossibleSamType(type: ConeKotlinType): ConeKotlinType? { override fun getFunctionTypeForPossibleSamType(type: ConeKotlinType): ConeKotlinType? {
return when (type) { return when (type) {
is ConeClassType -> getFunctionTypeForPossibleSamType(type) is ConeClassLikeType -> getFunctionTypeForPossibleSamType(type)
is ConeFlexibleType -> ConeFlexibleType( is ConeFlexibleType -> ConeFlexibleType(
getFunctionTypeForPossibleSamType(type.lowerBound) ?: return null, getFunctionTypeForPossibleSamType(type.lowerBound) ?: return null,
getFunctionTypeForPossibleSamType(type.upperBound) ?: return null getFunctionTypeForPossibleSamType(type.upperBound) ?: return null
@@ -60,7 +63,7 @@ class FirSamResolverImpl(
} }
} }
private fun getFunctionTypeForPossibleSamType(type: ConeClassType): ConeLookupTagBasedType? { private fun getFunctionTypeForPossibleSamType(type: ConeClassLikeType): ConeLookupTagBasedType? {
val firRegularClass = val firRegularClass =
firSession.firSymbolProvider firSession.firSymbolProvider
.getSymbolByLookupTag(type.lookupTag) .getSymbolByLookupTag(type.lookupTag)
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.types.ConeClassType import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.ConeStarProjection import org.jetbrains.kotlin.fir.types.ConeStarProjection
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -219,11 +219,11 @@ class ExplicitReceiverTowerDataConsumer<T : AbstractFirBasedSymbol<*>>(
): ProcessorAction { ): ProcessorAction {
if (symbol is FirNamedFunctionSymbol && symbol.callableId.packageName.startsWith(defaultPackage)) { if (symbol is FirNamedFunctionSymbol && symbol.callableId.packageName.startsWith(defaultPackage)) {
val explicitReceiverType = explicitReceiver.type val explicitReceiverType = explicitReceiver.type
if (dispatchReceiverValue == null && explicitReceiverType is ConeClassType) { if (dispatchReceiverValue == null && explicitReceiverType is ConeClassLikeType) {
val declarationReceiverTypeRef = val declarationReceiverTypeRef =
(symbol as? FirCallableSymbol<*>)?.fir?.receiverTypeRef as? FirResolvedTypeRef (symbol as? FirCallableSymbol<*>)?.fir?.receiverTypeRef as? FirResolvedTypeRef
val declarationReceiverType = declarationReceiverTypeRef?.type val declarationReceiverType = declarationReceiverTypeRef?.type
if (declarationReceiverType is ConeClassType) { if (declarationReceiverType is ConeClassLikeType) {
if (!AbstractTypeChecker.isSubtypeOf( if (!AbstractTypeChecker.isSubtypeOf(
candidateFactory.bodyResolveComponents.inferenceComponents.ctx, candidateFactory.bodyResolveComponents.inferenceComponents.ctx,
explicitReceiverType, explicitReceiverType,
@@ -8,14 +8,18 @@ package org.jetbrains.kotlin.fir.resolve.impl
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver
import org.jetbrains.kotlin.fir.resolve.FirTypeResolver
import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
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.*
import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver { class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver {
@@ -83,7 +87,7 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver {
} }
private fun createFunctionalType(typeRef: FirFunctionTypeRef): ConeClassType { private fun createFunctionalType(typeRef: FirFunctionTypeRef): ConeClassLikeType {
val parameters = val parameters =
listOfNotNull((typeRef.receiverTypeRef as FirResolvedTypeRef?)?.type) + listOfNotNull((typeRef.receiverTypeRef as FirResolvedTypeRef?)?.type) +
typeRef.valueParameters.map { it.returnTypeRef.coneTypeUnsafe<ConeKotlinType>() } + typeRef.valueParameters.map { it.returnTypeRef.coneTypeUnsafe<ConeKotlinType>() } +
@@ -303,7 +303,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
private fun visitArguments(arguments: List<FirExpression>, data: StringBuilder) { private fun visitArguments(arguments: List<FirExpression>, data: StringBuilder) {
arguments.joinTo(data, ", ", "(", ")") { arguments.joinTo(data, ", ", "(", ")") {
if (it is FirResolvedQualifier) { if (it is FirResolvedQualifier) {
val lookupTag = (it.typeRef as FirResolvedTypeRefImpl).coneTypeSafe<ConeClassType>()?.lookupTag val lookupTag = (it.typeRef as FirResolvedTypeRefImpl).coneTypeSafe<ConeClassLikeType>()?.lookupTag
val type = lookupTag?.let { val type = lookupTag?.let {
(symbolProvider.getSymbolByLookupTag(it)?.fir as? FirClass)?.superTypeRefs?.first()?.render() (symbolProvider.getSymbolByLookupTag(it)?.fir as? FirClass)?.superTypeRefs?.first()?.render()
} }
@@ -351,7 +351,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
if (valueParameter.isVararg) { if (valueParameter.isVararg) {
data.append("vararg ") data.append("vararg ")
} }
valueParameter.returnTypeRef.coneTypeSafe<ConeClassType>()?.arrayElementType(session)?.let { data.append(it.render()) } valueParameter.returnTypeRef.coneTypeSafe<ConeClassLikeType>()?.arrayElementType(session)?.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(" = ...") }
} }