[Commonizer] CirTypeDistance: Use property for 'unreachable'
^KT-48288
This commit is contained in:
committed by
Space
parent
31445d1471
commit
24ac122e88
@@ -55,7 +55,7 @@ value class CirTypeDistance(private val value: Int) : Comparable<CirTypeDistance
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun unreachable(): CirTypeDistance = CirTypeDistance(Int.MAX_VALUE)
|
||||
val unreachable: CirTypeDistance = CirTypeDistance(Int.MAX_VALUE)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,14 +87,14 @@ internal fun typeDistance(
|
||||
}
|
||||
|
||||
private fun forwardTypeDistance(from: CirClassOrTypeAliasType, to: CirEntityId): CirTypeDistance {
|
||||
if (from !is CirTypeAliasType) return unreachable()
|
||||
if (from !is CirTypeAliasType) return unreachable
|
||||
|
||||
var iteration = 0
|
||||
var underlyingType: CirClassOrTypeAliasType? = from.underlyingType
|
||||
|
||||
while (true) {
|
||||
iteration++
|
||||
val capturedUnderlyingType = underlyingType ?: return unreachable()
|
||||
val capturedUnderlyingType = underlyingType ?: return unreachable
|
||||
if (capturedUnderlyingType.classifierId == to) return CirTypeDistance(iteration)
|
||||
underlyingType = (capturedUnderlyingType as? CirTypeAliasType)?.underlyingType
|
||||
}
|
||||
@@ -109,14 +109,14 @@ private fun backwardsTypeDistance(
|
||||
return classifiers.backwardsTypeDistance(targetIndex, from, resolvedDependencyClassifier)
|
||||
}
|
||||
|
||||
val resolvedClassifier = classifiers.classifierIndices[targetIndex].findClassifier(to) ?: return unreachable()
|
||||
val resolvedClassifier = classifiers.classifierIndices[targetIndex].findClassifier(to) ?: return unreachable
|
||||
return classifiers.backwardsTypeDistance(targetIndex, from, resolvedClassifier)
|
||||
}
|
||||
|
||||
private fun CirKnownClassifiers.backwardsTypeDistance(
|
||||
targetIndex: Int, from: CirEntityId, to: CirProvided.Classifier
|
||||
): CirTypeDistance {
|
||||
if (to !is CirProvided.TypeAlias) return unreachable()
|
||||
if (to !is CirProvided.TypeAlias) return unreachable
|
||||
if (to.underlyingType.classifierId == from) return CirTypeDistance(-1)
|
||||
return backwardsTypeDistance(this, targetIndex, from, to.underlyingType.classifierId) - 1
|
||||
}
|
||||
@@ -124,7 +124,7 @@ private fun CirKnownClassifiers.backwardsTypeDistance(
|
||||
private fun CirKnownClassifiers.backwardsTypeDistance(
|
||||
targetIndex: Int, from: CirEntityId, to: CirClassifier
|
||||
): CirTypeDistance {
|
||||
if (to !is CirTypeAlias) return unreachable()
|
||||
if (to !is CirTypeAlias) return unreachable
|
||||
if (to.underlyingType.classifierId == from) return CirTypeDistance(-1)
|
||||
return backwardsTypeDistance(this, targetIndex, from, to.underlyingType.classifierId) - 1
|
||||
}
|
||||
@@ -299,21 +299,22 @@ class CirTypeDistanceTest : KtInlineSourceCommonizerTestCase() {
|
||||
}
|
||||
|
||||
fun `test unreachable distance`() {
|
||||
assertUnreachable(CirTypeDistance.unreachable() + CirTypeDistance.unreachable())
|
||||
assertUnreachable(CirTypeDistance.unreachable() + 1)
|
||||
assertUnreachable(CirTypeDistance.unreachable().inc())
|
||||
assertUnreachable(CirTypeDistance.unreachable() + CirTypeDistance(1))
|
||||
assertUnreachable(CirTypeDistance(1) + CirTypeDistance.unreachable())
|
||||
assertUnreachable(CirTypeDistance.unreachable() - 1)
|
||||
assertUnreachable(CirTypeDistance.unreachable().dec())
|
||||
assertUnreachable(CirTypeDistance.unreachable() - CirTypeDistance(1))
|
||||
assertUnreachable(CirTypeDistance(1) - CirTypeDistance.unreachable())
|
||||
assertUnreachable(CirTypeDistance.unreachable().absoluteValue)
|
||||
assertUnreachable(CirTypeDistance.unreachable + CirTypeDistance.unreachable)
|
||||
assertUnreachable(CirTypeDistance.unreachable + 1)
|
||||
assertUnreachable(CirTypeDistance.unreachable.inc())
|
||||
assertUnreachable(CirTypeDistance.unreachable + CirTypeDistance(1))
|
||||
assertUnreachable(CirTypeDistance(1) + CirTypeDistance.unreachable)
|
||||
assertUnreachable(CirTypeDistance.unreachable - 1)
|
||||
assertUnreachable(CirTypeDistance.unreachable.dec())
|
||||
assertUnreachable(CirTypeDistance.unreachable - CirTypeDistance(1))
|
||||
assertUnreachable(CirTypeDistance(1) - CirTypeDistance.unreachable)
|
||||
assertUnreachable(CirTypeDistance.unreachable.absoluteValue)
|
||||
assertEquals(CirTypeDistance(Int.MAX_VALUE), CirTypeDistance.unreachable)
|
||||
}
|
||||
}
|
||||
|
||||
private fun assertUnreachable(typeDistance: CirTypeDistance) {
|
||||
assertEquals(CirTypeDistance.unreachable(), typeDistance)
|
||||
assertEquals(CirTypeDistance.unreachable, typeDistance)
|
||||
assertTrue(typeDistance.isNotReachable)
|
||||
assertFalse(typeDistance.isReachable)
|
||||
assertFalse(typeDistance.isPositive)
|
||||
|
||||
Reference in New Issue
Block a user