[FIR] Add fast return from substitution scope when substitutor is empty
This commit is contained in:
+4
-5
@@ -95,6 +95,7 @@ class FirClassSubstitutionScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createFakeOverrideFunction(original: FirFunctionSymbol<*>): FirFunctionSymbol<*> {
|
private fun createFakeOverrideFunction(original: FirFunctionSymbol<*>): FirFunctionSymbol<*> {
|
||||||
|
if (substitutor == ConeSubstitutor.Empty) return original
|
||||||
val member = when (original) {
|
val member = when (original) {
|
||||||
is FirNamedFunctionSymbol -> original.fir
|
is FirNamedFunctionSymbol -> original.fir
|
||||||
is FirConstructorSymbol -> return original
|
is FirConstructorSymbol -> return original
|
||||||
@@ -146,15 +147,10 @@ class FirClassSubstitutionScope(
|
|||||||
|
|
||||||
val additionalSubstitutor = substitutorByMap(substitutionMapForNewParameters)
|
val additionalSubstitutor = substitutorByMap(substitutionMapForNewParameters)
|
||||||
|
|
||||||
var wereChangesInTypeParameters = false
|
|
||||||
for ((newTypeParameter, oldTypeParameter) in newTypeParameters.zip(member.typeParameters)) {
|
for ((newTypeParameter, oldTypeParameter) in newTypeParameters.zip(member.typeParameters)) {
|
||||||
for (boundTypeRef in oldTypeParameter.bounds) {
|
for (boundTypeRef in oldTypeParameter.bounds) {
|
||||||
val typeForBound = boundTypeRef.coneTypeUnsafe<ConeKotlinType>()
|
val typeForBound = boundTypeRef.coneTypeUnsafe<ConeKotlinType>()
|
||||||
val substitutedBound = typeForBound.substitute()
|
val substitutedBound = typeForBound.substitute()
|
||||||
if (substitutedBound != null) {
|
|
||||||
wereChangesInTypeParameters = true
|
|
||||||
}
|
|
||||||
|
|
||||||
newTypeParameter.bounds +=
|
newTypeParameter.bounds +=
|
||||||
buildResolvedTypeRef {
|
buildResolvedTypeRef {
|
||||||
source = boundTypeRef.source
|
source = boundTypeRef.source
|
||||||
@@ -172,6 +168,7 @@ class FirClassSubstitutionScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createFakeOverrideProperty(original: FirPropertySymbol): FirPropertySymbol {
|
private fun createFakeOverrideProperty(original: FirPropertySymbol): FirPropertySymbol {
|
||||||
|
if (substitutor == ConeSubstitutor.Empty) return original
|
||||||
val member = original.fir
|
val member = original.fir
|
||||||
|
|
||||||
val receiverType = member.receiverTypeRef?.coneTypeUnsafe<ConeKotlinType>()
|
val receiverType = member.receiverTypeRef?.coneTypeUnsafe<ConeKotlinType>()
|
||||||
@@ -188,6 +185,7 @@ class FirClassSubstitutionScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createFakeOverrideField(original: FirFieldSymbol): FirFieldSymbol {
|
private fun createFakeOverrideField(original: FirFieldSymbol): FirFieldSymbol {
|
||||||
|
if (substitutor == ConeSubstitutor.Empty) return original
|
||||||
val member = original.fir
|
val member = original.fir
|
||||||
|
|
||||||
val returnType = typeCalculator.tryCalculateReturnType(member).type
|
val returnType = typeCalculator.tryCalculateReturnType(member).type
|
||||||
@@ -197,6 +195,7 @@ class FirClassSubstitutionScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createFakeOverrideAccessor(original: FirAccessorSymbol): FirAccessorSymbol {
|
private fun createFakeOverrideAccessor(original: FirAccessorSymbol): FirAccessorSymbol {
|
||||||
|
if (substitutor == ConeSubstitutor.Empty) return original
|
||||||
val member = original.fir as FirSyntheticProperty
|
val member = original.fir as FirSyntheticProperty
|
||||||
|
|
||||||
val returnType = typeCalculator.tryCalculateReturnType(member).type
|
val returnType = typeCalculator.tryCalculateReturnType(member).type
|
||||||
|
|||||||
Reference in New Issue
Block a user