Drop isEqualTypeConstructor in favour of areEqualTypeConstructors

This commit is contained in:
Dmitry Savvinov
2020-10-02 17:44:35 +03:00
parent fc4b488d43
commit f02593074f
10 changed files with 10 additions and 27 deletions
@@ -38,7 +38,7 @@ class JavaOverrideChecker internal constructor(
} }
} }
return with(context) { return with(context) {
isEqualTypeConstructors( areEqualTypeConstructors(
substitutor.substituteOrSelf(candidateType).typeConstructor(), substitutor.substituteOrSelf(candidateType).typeConstructor(),
substitutor.substituteOrSelf(baseType).typeConstructor() substitutor.substituteOrSelf(baseType).typeConstructor()
) )
@@ -275,7 +275,7 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty
return this return this
} }
override fun isEqualTypeConstructors(c1: TypeConstructorMarker, c2: TypeConstructorMarker): Boolean { override fun areEqualTypeConstructors(c1: TypeConstructorMarker, c2: TypeConstructorMarker): Boolean {
if (c1 is ErrorTypeConstructor || c2 is ErrorTypeConstructor) return false if (c1 is ErrorTypeConstructor || c2 is ErrorTypeConstructor) return false
//assert(c1 is ConeSymbol) //assert(c1 is ConeSymbol)
@@ -27,8 +27,6 @@ open class IrTypeCheckerContext(override val irBuiltIns: IrBuiltIns) : IrTypeSys
} }
} }
override fun areEqualTypeConstructors(a: TypeConstructorMarker, b: TypeConstructorMarker) = super.isEqualTypeConstructors(a, b)
override val isErrorTypeEqualsToAnything get() = false override val isErrorTypeEqualsToAnything get() = false
override val isStubTypeEqualsToAnything get() = false override val isStubTypeEqualsToAnything get() = false
@@ -24,14 +24,8 @@ open class IrTypeCheckerContextWithAdditionalAxioms(
private val secondTypeParameterConstructors = secondParameters.map { it.symbol } private val secondTypeParameterConstructors = secondParameters.map { it.symbol }
private val matchingTypeConstructors = firstTypeParameterConstructors.zip(secondTypeParameterConstructors).toMap() private val matchingTypeConstructors = firstTypeParameterConstructors.zip(secondTypeParameterConstructors).toMap()
override fun areEqualTypeConstructors(a: TypeConstructorMarker, b: TypeConstructorMarker): Boolean { override fun areEqualTypeConstructors(c1: TypeConstructorMarker, c2: TypeConstructorMarker): Boolean {
if (super.isEqualTypeConstructors(a, b)) return true if (super.areEqualTypeConstructors(c1, c2)) return true
if (matchingTypeConstructors[a] == b || matchingTypeConstructors[b] == a) return true
return false
}
override fun isEqualTypeConstructors(c1: TypeConstructorMarker, c2: TypeConstructorMarker): Boolean {
if (super.isEqualTypeConstructors(c1, c2)) return true
if (matchingTypeConstructors[c1] == c2 || matchingTypeConstructors[c2] == c1) return true if (matchingTypeConstructors[c1] == c2 || matchingTypeConstructors[c2] == c1) return true
return false return false
} }
@@ -139,7 +139,7 @@ interface IrTypeSystemContext : TypeSystemContext, TypeSystemCommonSuperTypesCon
override fun TypeParameterMarker.getTypeConstructor() = this as IrTypeParameterSymbol override fun TypeParameterMarker.getTypeConstructor() = this as IrTypeParameterSymbol
override fun isEqualTypeConstructors(c1: TypeConstructorMarker, c2: TypeConstructorMarker) = FqNameEqualityChecker.areEqual( override fun areEqualTypeConstructors(c1: TypeConstructorMarker, c2: TypeConstructorMarker) = FqNameEqualityChecker.areEqual(
c1 as IrClassifierSymbol, c2 as IrClassifierSymbol c1 as IrClassifierSymbol, c2 as IrClassifierSymbol
) )
@@ -41,7 +41,7 @@ object AbstractStrictEqualityTypeChecker {
if (a.argumentsCount() != b.argumentsCount() if (a.argumentsCount() != b.argumentsCount()
|| a.isMarkedNullable() != b.isMarkedNullable() || a.isMarkedNullable() != b.isMarkedNullable()
|| (a.asDefinitelyNotNullType() == null) != (b.asDefinitelyNotNullType() == null) || (a.asDefinitelyNotNullType() == null) != (b.asDefinitelyNotNullType() == null)
|| !isEqualTypeConstructors(a.typeConstructor(), b.typeConstructor()) || !areEqualTypeConstructors(a.typeConstructor(), b.typeConstructor())
) { ) {
return false return false
} }
@@ -18,8 +18,6 @@ abstract class AbstractTypeCheckerContext : TypeSystemContext {
abstract fun substitutionSupertypePolicy(type: SimpleTypeMarker): SupertypesPolicy abstract fun substitutionSupertypePolicy(type: SimpleTypeMarker): SupertypesPolicy
abstract fun areEqualTypeConstructors(a: TypeConstructorMarker, b: TypeConstructorMarker): Boolean
override fun prepareType(type: KotlinTypeMarker): KotlinTypeMarker { override fun prepareType(type: KotlinTypeMarker): KotlinTypeMarker {
return type return type
} }
@@ -309,7 +307,7 @@ object AbstractTypeChecker {
val superConstructor = superType.typeConstructor() val superConstructor = superType.typeConstructor()
if (isEqualTypeConstructors(subType.typeConstructor(), superConstructor) && superConstructor.parametersCount() == 0) return true if (areEqualTypeConstructors(subType.typeConstructor(), superConstructor) && superConstructor.parametersCount() == 0) return true
if (superType.typeConstructor().isAnyConstructor()) return true if (superType.typeConstructor().isAnyConstructor()) return true
val supertypesWithSameConstructor = findCorrespondingSupertypes(subType, superConstructor) val supertypesWithSameConstructor = findCorrespondingSupertypes(subType, superConstructor)
@@ -611,7 +609,7 @@ object AbstractNullabilityChecker {
if (isStubTypeEqualsToAnything && type.isStubType()) return true if (isStubTypeEqualsToAnything && type.isStubType()) return true
return isEqualTypeConstructors(type.typeConstructor(), end) return areEqualTypeConstructors(type.typeConstructor(), end)
} }
} }
@@ -260,7 +260,7 @@ interface TypeSystemContext : TypeSystemOptimizationContext {
fun TypeParameterMarker.getUpperBound(index: Int): KotlinTypeMarker fun TypeParameterMarker.getUpperBound(index: Int): KotlinTypeMarker
fun TypeParameterMarker.getTypeConstructor(): TypeConstructorMarker fun TypeParameterMarker.getTypeConstructor(): TypeConstructorMarker
fun isEqualTypeConstructors(c1: TypeConstructorMarker, c2: TypeConstructorMarker): Boolean fun areEqualTypeConstructors(c1: TypeConstructorMarker, c2: TypeConstructorMarker): Boolean
fun TypeConstructorMarker.isDenotable(): Boolean fun TypeConstructorMarker.isDenotable(): Boolean
@@ -995,13 +995,6 @@ public class OverridingUtil {
return super.areEqualTypeConstructors(a, b) || areEqualTypeConstructorsByAxioms(a, b); return super.areEqualTypeConstructors(a, b) || areEqualTypeConstructorsByAxioms(a, b);
} }
@Override
public boolean isEqualTypeConstructors(
@NotNull TypeConstructorMarker c1, @NotNull TypeConstructorMarker c2
) {
return areEqualTypeConstructors(c1, c2);
}
private boolean areEqualTypeConstructorsByAxioms(@NotNull TypeConstructor a, @NotNull TypeConstructor b) { private boolean areEqualTypeConstructorsByAxioms(@NotNull TypeConstructor a, @NotNull TypeConstructor b) {
if (equalityAxioms.equals(a, b)) return true; if (equalityAxioms.equals(a, b)) return true;
if (matchingTypeConstructors == null) return false; if (matchingTypeConstructors == null) return false;
@@ -212,7 +212,7 @@ interface ClassicTypeSystemContext : TypeSystemInferenceExtensionContext, TypeSy
return this.typeConstructor return this.typeConstructor
} }
override fun isEqualTypeConstructors(c1: TypeConstructorMarker, c2: TypeConstructorMarker): Boolean { override fun areEqualTypeConstructors(c1: TypeConstructorMarker, c2: TypeConstructorMarker): Boolean {
require(c1 is TypeConstructor, c1::errorMessage) require(c1 is TypeConstructor, c1::errorMessage)
require(c2 is TypeConstructor, c2::errorMessage) require(c2 is TypeConstructor, c2::errorMessage)
return c1 == c2 return c1 == c2