[FIR] Remove redundant lookupTag from AbstractConeSubstitutor.substituteArgument

This commit is contained in:
Dmitriy Novozhilov
2022-10-03 16:32:53 +03:00
committed by Space Team
parent bd26c29229
commit edbf199f84
4 changed files with 9 additions and 19 deletions
@@ -69,11 +69,9 @@ private fun buildDeepSubstitutionMultimap(
for (index in 0 until count) { for (index in 0 until count) {
val typeArgument = typeArguments[index] val typeArgument = typeArguments[index]
val substitutedArgument = ConeSubstitutorByMap(substitution, session).substituteArgument( val substitutedArgument = ConeSubstitutorByMap(substitution, session)
typeArgument, .substituteArgument(typeArgument, index)
classSymbol.toLookupTag(), ?: typeArgument
index
) ?: typeArgument
val substitutedType = substitutedArgument.type ?: continue val substitutedType = substitutedArgument.type ?: continue
val typeParameterSymbol = typeParameterSymbols[index] val typeParameterSymbol = typeParameterSymbols[index]
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.resolve.withCombinedAttributesFrom import org.jetbrains.kotlin.fir.resolve.withCombinedAttributesFrom
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
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.*
@@ -105,8 +104,8 @@ private class FE10LikeConeSubstitutor(
return withAttributes(ConeAttributes.create(listOf(OriginalProjectionTypeAttribute(projection)))) return withAttributes(ConeAttributes.create(listOf(OriginalProjectionTypeAttribute(projection))))
} }
override fun substituteArgument(projection: ConeTypeProjection, lookupTag: ConeClassLikeLookupTag, index: Int): ConeTypeProjection? { override fun substituteArgument(projection: ConeTypeProjection, index: Int): ConeTypeProjection? {
val substitutedProjection = super.substituteArgument(projection, lookupTag, index) ?: return null val substitutedProjection = super.substituteArgument(projection, index) ?: return null
if (substitutedProjection.isStarProjection) return null if (substitutedProjection.isStarProjection) return null
val type = substitutedProjection.type!! val type = substitutedProjection.type!!
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
import org.jetbrains.kotlin.fir.declarations.utils.expandedConeType import org.jetbrains.kotlin.fir.declarations.utils.expandedConeType
import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
@@ -116,18 +115,13 @@ private fun mapTypeAliasArguments(
return null return null
} }
override fun substituteArgument( override fun substituteArgument(projection: ConeTypeProjection, index: Int): ConeTypeProjection? {
projection: ConeTypeProjection,
lookupTag: ConeClassLikeLookupTag,
index: Int
): ConeTypeProjection? {
val type = (projection as? ConeKotlinTypeProjection)?.type ?: return null val type = (projection as? ConeKotlinTypeProjection)?.type ?: return null
val symbol = (type as? ConeTypeParameterType)?.lookupTag?.symbol ?: return super.substituteArgument( val symbol = (type as? ConeTypeParameterType)?.lookupTag?.symbol ?: return super.substituteArgument(
projection, projection,
lookupTag,
index index
) )
val mappedProjection = typeAliasMap[symbol] ?: return super.substituteArgument(projection, lookupTag, index) val mappedProjection = typeAliasMap[symbol] ?: return super.substituteArgument(projection, index)
var mappedType = (mappedProjection as? ConeKotlinTypeProjection)?.type.updateNullabilityIfNeeded(type) var mappedType = (mappedProjection as? ConeKotlinTypeProjection)?.type.updateNullabilityIfNeeded(type)
mappedType = when (mappedType) { mappedType = when (mappedType) {
is ConeErrorType, is ConeErrorType,
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
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.resolve.withCombinedAttributesFrom import org.jetbrains.kotlin.fir.resolve.withCombinedAttributesFrom
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
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.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
@@ -36,7 +35,7 @@ abstract class AbstractConeSubstitutor(protected val typeContext: ConeTypeContex
} }
abstract fun substituteType(type: ConeKotlinType): ConeKotlinType? abstract fun substituteType(type: ConeKotlinType): ConeKotlinType?
open fun substituteArgument(projection: ConeTypeProjection, lookupTag: ConeClassLikeLookupTag, index: Int): ConeTypeProjection? { open fun substituteArgument(projection: ConeTypeProjection, index: Int): ConeTypeProjection? {
val type = (projection as? ConeKotlinTypeProjection)?.type ?: return null val type = (projection as? ConeKotlinTypeProjection)?.type ?: return null
val newType = substituteOrNull(type) ?: return null val newType = substituteOrNull(type) ?: return null
return wrapProjection(projection, newType) return wrapProjection(projection, newType)
@@ -139,7 +138,7 @@ abstract class AbstractConeSubstitutor(protected val typeContext: ConeTypeContex
require(this is ConeClassLikeType) { "Unknown type to substitute: $this, ${this::class}" } require(this is ConeClassLikeType) { "Unknown type to substitute: $this, ${this::class}" }
for ((index, typeArgument) in this.typeArguments.withIndex()) { for ((index, typeArgument) in this.typeArguments.withIndex()) {
newArguments[index] = substituteArgument(typeArgument, lookupTag, index)?.also { newArguments[index] = substituteArgument(typeArgument, index)?.also {
initialized = true initialized = true
} }
} }