From 146a53f18c4e647b4324db37ced905b677ff3f45 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Tue, 4 Jun 2019 14:36:23 +0300 Subject: [PATCH] Change lookup tags from interfaces to abstract classes --- .../kotlin/fir/symbols/ConeLookupTags.kt | 25 +++++++++++-------- .../kotlin/fir/symbols/ConeSymbols.kt | 5 ++-- .../kotlin/fir/java/JavaSymbolProvider.kt | 3 ++- .../jetbrains/kotlin/fir/java/JavaUtils.kt | 2 +- .../fir/java/enhancement/javaTypeUtils.kt | 2 +- .../fir/java/scopes/JavaClassUseSiteScope.kt | 2 +- .../kotlin/fir/builder/RawFirBuilder.kt | 4 +-- .../deserialization/FirMemberDeserializer.kt | 2 +- .../deserialization/FirTypeDeserializer.kt | 4 +-- .../kotlin/fir/resolve/ResolveUtils.kt | 4 +-- .../kotlin/fir/resolve/calls/InferenceUtil.kt | 2 +- .../resolve/substitution/ConeSubstitutor.kt | 2 +- .../FirCallCompleterTransformer.kt | 2 +- .../scopes/impl/AbstractFirOverrideScope.kt | 2 +- .../fir/symbols/impl/FirTypeAliasSymbol.kt | 2 +- .../symbols/impl/FirTypeParameterSymbol.kt | 8 +++--- 16 files changed, 37 insertions(+), 34 deletions(-) diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/ConeLookupTags.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/ConeLookupTags.kt index c241d566c97..e8ddd542015 100644 --- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/ConeLookupTags.kt +++ b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/ConeLookupTags.kt @@ -8,30 +8,33 @@ package org.jetbrains.kotlin.fir.symbols import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name -interface ConeClassifierLookupTag { - val name: Name +abstract class ConeClassifierLookupTag { + abstract val name: Name } -interface ConeClassifierLookupTagWithFixedSymbol { - val symbol: ConeClassifierSymbol +abstract class ConeClassifierLookupTagWithFixedSymbol : ConeClassifierLookupTag() { + abstract val symbol: ConeClassifierSymbol } -interface ConeTypeParameterLookupTag : ConeClassifierLookupTag { - override val name: Name +data class ConeTypeParameterLookupTag(val typeParameterSymbol: ConeTypeParameterSymbol) : ConeClassifierLookupTagWithFixedSymbol() { + override val name: Name get() = typeParameterSymbol.name + override val symbol: ConeClassifierSymbol + get() = typeParameterSymbol } -interface ConeClassLikeLookupTag : ConeClassifierLookupTag { - val classId: ClassId + +abstract class ConeClassLikeLookupTag : ConeClassifierLookupTag() { + abstract val classId: ClassId override val name: Name get() = classId.shortClassName } -interface ConeTypeAliasLookupTag : ConeClassLikeLookupTag +abstract class ConeTypeAliasLookupTag : ConeClassLikeLookupTag() -interface ConeClassLookupTag : ConeClassLikeLookupTag +abstract class ConeClassLookupTag : ConeClassLikeLookupTag() -class ConeClassLikeLookupTagImpl(override val classId: ClassId) : ConeClassLikeLookupTag { +class ConeClassLikeLookupTagImpl(override val classId: ClassId) : ConeClassLikeLookupTag() { var boundSymbol: Pair<*, *>? = null override fun equals(other: Any?): Boolean { diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/ConeSymbols.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/ConeSymbols.kt index 431c1e6cd9e..39e65881b65 100644 --- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/ConeSymbols.kt +++ b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/symbols/ConeSymbols.kt @@ -16,8 +16,9 @@ interface ConeClassifierSymbol : ConeSymbol, TypeParameterMarker { fun toLookupTag(): ConeClassifierLookupTag } -interface ConeTypeParameterSymbol : ConeClassifierSymbol, ConeTypeParameterLookupTag { - override fun toLookupTag(): ConeTypeParameterLookupTag = this +interface ConeTypeParameterSymbol : ConeClassifierSymbol { + override fun toLookupTag(): ConeTypeParameterLookupTag = ConeTypeParameterLookupTag(this) + val name: Name } interface ConeClassLikeSymbol : ConeClassifierSymbol, TypeConstructorMarker { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index e6e672164da..a8b98d340b1 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -220,7 +220,8 @@ class JavaSymbolProvider( FirResolvedTypeRefImpl( this@JavaSymbolProvider.session, null, firSymbol.constructType( - classTypeParameters.map { ConeTypeParameterTypeImpl(it.symbol, false) }.toTypedArray(), false + classTypeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }.toTypedArray(), + false ) ) ).apply { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt index 5d7aa812184..1c464104764 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt @@ -160,7 +160,7 @@ internal fun JavaClassifierType.toConeKotlinTypeWithNullability( } is JavaTypeParameter -> { val symbol = javaTypeParameterStack[classifier] - ConeTypeParameterTypeImpl(symbol, isNullable) + ConeTypeParameterTypeImpl(symbol.toLookupTag(), isNullable) } else -> ConeClassErrorType(reason = "Unexpected classifier: $classifier") } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt index 838eb4c0cbd..51d9f8a9302 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt @@ -149,7 +149,7 @@ private fun JavaClassifierType.enhanceInflexibleType( val kotlinClassId = mappedId ?: classId ConeClassLikeLookupTagImpl(kotlinClassId) } - is JavaTypeParameter -> javaTypeParameterStack[classifier] + is JavaTypeParameter -> javaTypeParameterStack[classifier].toLookupTag() else -> return toNotNullConeKotlinType(session, javaTypeParameterStack) } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt index 75189b1e4b8..a47cda63a8d 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt @@ -73,7 +73,7 @@ class JavaClassUseSiteScope( if (overriddenInJava.typeParameters.size != base.typeParameters.size) return false val types = base.typeParameters.map { - ConeTypeParameterTypeImpl(it.symbol, false) + ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) } val substitution = ConeSubstitutorByMap(overriddenInJava.typeParameters.map { it.symbol }.zip(types).toMap()) if (!overriddenInJava.typeParameters.zip(base.typeParameters).all { (a, b) -> diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 3a9f5ba53d8..a41d4ac83f6 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -450,7 +450,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { this, ConeClassTypeImpl( firClass.symbol.toLookupTag(), - typeParameters.map { ConeTypeParameterTypeImpl(it.symbol, false) }.toTypedArray(), + typeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }.toTypedArray(), false ) ) @@ -732,7 +732,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { private fun typeParametersFromSelfType(delegatedSelfTypeRef: FirTypeRef): List { return delegatedSelfTypeRef.coneTypeSafe() ?.typeArguments - ?.map { ((it as ConeTypeParameterType).lookupTag as FirTypeParameterSymbol).fir } + ?.map { ((it as ConeTypeParameterType).lookupTag.symbol as FirTypeParameterSymbol).fir } ?: emptyList() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index d83cd45511a..e78ac3463be 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -247,7 +247,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { null, ConeClassTypeImpl( klass.symbol.toLookupTag(), - typeParameters.map { ConeTypeParameterTypeImpl(it.symbol, false) }.toTypedArray(), + typeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }.toTypedArray(), false ) ) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt index 0b16e75cafa..d899aa41e06 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt @@ -57,7 +57,7 @@ class FirTypeDeserializer( private fun typeParameterSymbol(typeParameterId: Int): ConeTypeParameterLookupTag? = - typeParameterDescriptors[typeParameterId] ?: parent?.typeParameterSymbol(typeParameterId) + typeParameterDescriptors[typeParameterId]?.toLookupTag() ?: parent?.typeParameterSymbol(typeParameterId) private fun ProtoBuf.TypeParameter.Variance.convertVariance(): Variance { @@ -150,7 +150,7 @@ class FirTypeDeserializer( val name = nameResolver.getString(proto.typeParameterName) // TODO: Optimize - ownTypeParameters.find { it.name.asString() == name } + ownTypeParameters.find { it.name.asString() == name }?.toLookupTag() } else -> null } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index dee796af94d..05fe49e54fc 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -48,7 +48,7 @@ fun ConeAbbreviatedType.directExpansionType(useSiteSession: FirSession): ConeCla fun ConeClassifierLookupTag.toSymbol(useSiteSession: FirSession): ConeClassifierSymbol? = when (this) { is ConeClassLikeLookupTag -> toSymbol(useSiteSession) - is ConeTypeParameterSymbol -> this + is ConeTypeParameterLookupTag -> this.symbol else -> error("sealed ${this::class}") } @@ -67,7 +67,7 @@ fun ConeClassifierLookupTag.constructType(typeArguments: Array, isNullable: Boolean): ConeLookupTagBasedType { return when (this) { is ConeTypeParameterSymbol -> { - ConeTypeParameterTypeImpl(this, isNullable) + ConeTypeParameterTypeImpl(this.toLookupTag(), isNullable) } is ConeClassSymbol -> { ConeClassTypeImpl(this.toLookupTag(), typeArguments, isNullable) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/InferenceUtil.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/InferenceUtil.kt index bf57c000110..a1b80b94c18 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/InferenceUtil.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/InferenceUtil.kt @@ -34,7 +34,7 @@ fun ConeInferenceContext.hasNullableSuperType(type: ConeKotlinType): Boolean { return false } -class ConeTypeVariableTypeConstructor(val debugName: String) : ConeSymbol, ConeClassifierLookupTag, TypeVariableTypeConstructorMarker { +class ConeTypeVariableTypeConstructor(val debugName: String) : ConeSymbol, ConeClassifierLookupTag(), TypeVariableTypeConstructorMarker { override val name: Name get() = Name.identifier(debugName) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/substitution/ConeSubstitutor.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/substitution/ConeSubstitutor.kt index 87963633212..4ee915d2d33 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/substitution/ConeSubstitutor.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/substitution/ConeSubstitutor.kt @@ -134,6 +134,6 @@ class ConeSubstitutorByMap(val substitution: Map() - val newTypeParameters = declaration.typeParameters.map { ConeTypeParameterTypeImpl(it.symbol, false) } + val newTypeParameters = declaration.typeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) } .map { subCandidate.substitutor.substituteOrSelf(it) } .map { finalSubstitutor.substituteOrSelf(it) } .mapIndexed { index, type -> diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt index 17b72eac58b..076af12e95e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt @@ -36,7 +36,7 @@ abstract class AbstractFirOverrideScope(val session: FirSession) : FirScope { if (member.typeParameters.size != self.typeParameters.size) return false val types = self.typeParameters.map { - ConeTypeParameterTypeImpl(it.symbol, false) + ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) } val substitution = ConeSubstitutorByMap(member.typeParameters.map { it.symbol }.zip(types).toMap()) if (!member.typeParameters.zip(self.typeParameters).all { (a, b) -> diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeAliasSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeAliasSymbol.kt index d85e9a00267..8eedfbfa4b5 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeAliasSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeAliasSymbol.kt @@ -30,4 +30,4 @@ class FirTypeAliasSymbol( class TypeAliasLookupTagImpl( override val classId: ClassId -) : ConeTypeAliasLookupTag +) : ConeTypeAliasLookupTag() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeParameterSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeParameterSymbol.kt index 91fa967d9c6..0d19e6988cd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeParameterSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirTypeParameterSymbol.kt @@ -9,16 +9,14 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.name.Name -class FirTypeParameterSymbol : AbstractFirBasedSymbol(), ConeTypeParameterSymbol, ConeTypeParameterLookupTag, - ConeClassifierLookupTagWithFixedSymbol { +class FirTypeParameterSymbol : AbstractFirBasedSymbol(), ConeTypeParameterSymbol { override val name: Name get() = fir.name - override val symbol: ConeClassifierSymbol - get() = this + private val lookupTag = ConeTypeParameterLookupTag(this) - override fun toLookupTag(): ConeTypeParameterLookupTag = this + override fun toLookupTag(): ConeTypeParameterLookupTag = lookupTag override fun equals(other: Any?): Boolean { return other is FirTypeParameterSymbol && fir == other.fir