IR: minor refactorings around IrType/IrCapturedType

- use identity in equals/hashCode. It was already effectively working
  like this because of `constructor === other.constructor`
- implement variance and declare it in IrSimpleType
- remove obsolete TODO
- simplify code in captureFromArguments
- use data objects
This commit is contained in:
Alexander Udalov
2023-11-14 14:48:37 +01:00
committed by Space Team
parent dec41e8c46
commit 898d3aeea9
6 changed files with 37 additions and 67 deletions
@@ -8,8 +8,11 @@ package org.jetbrains.kotlin.backend.common.linkage.partial
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.linkage.partial.ExploredClassifier
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.types.IrSimpleType
import org.jetbrains.kotlin.ir.types.IrTypeAbbreviation
import org.jetbrains.kotlin.ir.types.IrTypeArgument
import org.jetbrains.kotlin.ir.types.SimpleTypeNullability
/**
* Replacement for IR types that reference unusable classifier symbols.
@@ -17,15 +20,14 @@ import org.jetbrains.kotlin.types.Variance
*/
internal class PartiallyLinkedMarkerType(
builtIns: IrBuiltIns,
val unusableClassifier: ExploredClassifier.Unusable
val unusableClassifier: ExploredClassifier.Unusable,
) : IrSimpleType(null) {
override val annotations get() = emptyList<IrConstructorCall>()
override val classifier = builtIns.anyClass
override val nullability get() = SimpleTypeNullability.MARKED_NULLABLE
override val arguments get() = emptyList<IrTypeArgument>()
override val annotations: List<IrConstructorCall> get() = emptyList()
override val classifier: IrClassSymbol = builtIns.anyClass
override val nullability: SimpleTypeNullability get() = SimpleTypeNullability.MARKED_NULLABLE
override val arguments: List<IrTypeArgument> get() = emptyList()
override val abbreviation: IrTypeAbbreviation? get() = null
override val variance get() = Variance.INVARIANT
override fun equals(other: Any?) = (other as? PartiallyLinkedMarkerType)?.unusableClassifier == unusableClassifier
override fun hashCode() = unusableClassifier.hashCode()
override fun equals(other: Any?): Boolean = (other as? PartiallyLinkedMarkerType)?.unusableClassifier == unusableClassifier
override fun hashCode(): Int = unusableClassifier.hashCode()
}