Extract ConeClassifierLookupTag (aka SearchSymbol)

So, for classifiers there are both Symbols and LookupTags
The difference between them is that the former are assumed to have
a reference to the actual FirDeclaration while LookupTags
effectively contain only classId and
something informative may only be obtained by FirSession

#KT-24075 Fixed
This commit is contained in:
Denis Zharkov
2019-03-05 18:15:45 +03:00
committed by Mikhail Glukhikh
parent 6b5ba272a0
commit 2dbe96c853
39 changed files with 304 additions and 216 deletions
@@ -0,0 +1,29 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.symbols
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
interface ConeClassifierLookupTag
interface ConeClassifierLookupTagWithFixedSymbol {
val symbol: ConeClassifierSymbol
}
interface ConeTypeParameterLookupTag : ConeClassifierLookupTag {
val name: Name
}
interface ConeClassLikeLookupTag : ConeClassifierLookupTag {
val classId: ClassId
}
interface ConeTypeAliasLookupTag : ConeClassLikeLookupTag
interface ConeClassLookupTag : ConeClassLikeLookupTag
class ConeClassLikeLookupTagImpl(override val classId: ClassId) : ConeClassLikeLookupTag
@@ -6,16 +6,21 @@
package org.jetbrains.kotlin.fir.symbols
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
interface ConeSymbol
interface ConeTypeParameterSymbol : ConeSymbol {
val name: Name
interface ConeClassifierSymbol : ConeSymbol {
fun toLookupTag(): ConeClassifierLookupTag
}
interface ConeClassLikeSymbol : ConeSymbol {
interface ConeTypeParameterSymbol : ConeClassifierSymbol, ConeTypeParameterLookupTag {
override fun toLookupTag(): ConeTypeParameterLookupTag = this
}
interface ConeClassLikeSymbol : ConeClassifierSymbol {
val classId: ClassId
override fun toLookupTag(): ConeClassLikeLookupTag
}
interface ConeTypeAliasSymbol : ConeClassLikeSymbol
@@ -5,9 +5,7 @@
package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
import org.jetbrains.kotlin.fir.symbols.*
sealed class ConeKotlinTypeProjection {
abstract val kind: ProjectionKind
@@ -79,7 +77,7 @@ class ConeKotlinErrorType(val reason: String) : ConeKotlinType() {
}
class ConeClassErrorType(val reason: String) : ConeClassLikeType() {
override val symbol: ConeClassLikeSymbol
override val lookupTag: ConeClassLikeLookupTag
get() = error("!")
override val typeArguments: Array<out ConeKotlinTypeProjection>
@@ -93,28 +91,28 @@ class ConeClassErrorType(val reason: String) : ConeClassLikeType() {
}
}
sealed class ConeSymbolBasedType : ConeKotlinType() {
abstract val symbol: ConeSymbol
sealed class ConeLookupTagBasedType : ConeKotlinType() {
abstract val lookupTag: ConeClassifierLookupTag
}
abstract class ConeClassLikeType : ConeSymbolBasedType() {
abstract override val symbol: ConeClassLikeSymbol
abstract class ConeClassLikeType : ConeLookupTagBasedType() {
abstract override val lookupTag: ConeClassLikeLookupTag
}
abstract class ConeAbbreviatedType : ConeClassLikeType() {
abstract val abbreviationSymbol: ConeClassLikeSymbol
abstract val abbreviationLookupTag: ConeClassLikeLookupTag
abstract val directExpansion: ConeClassLikeType
}
abstract class ConeTypeParameterType : ConeSymbolBasedType() {
abstract override val symbol: ConeTypeParameterSymbol
abstract class ConeTypeParameterType : ConeLookupTagBasedType() {
abstract override val lookupTag: ConeTypeParameterLookupTag
}
abstract class ConeFunctionType : ConeClassLikeType() {
abstract override val symbol: ConeClassLikeSymbol
abstract override val lookupTag: ConeClassLikeLookupTag
abstract val receiverType: ConeKotlinType?
abstract val parameterTypes: List<ConeKotlinType>
abstract val returnType: ConeKotlinType
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.fir.types.impl
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.types.ConeFunctionType
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.ConeKotlinTypeProjection
@@ -15,11 +15,11 @@ class ConeFunctionTypeImpl(
override val receiverType: ConeKotlinType?,
override val parameterTypes: List<ConeKotlinType>,
override val returnType: ConeKotlinType,
override val symbol: ConeClassLikeSymbol,
override val lookupTag: ConeClassLikeLookupTag,
isNullable: Boolean
) : ConeFunctionType() {
override val typeArguments: Array<out ConeKotlinTypeProjection>
get() = EMPTY_ARRAY
override val nullability: ConeNullability = ConeNullability.create(isNullable)
}
}
@@ -5,12 +5,12 @@
package org.jetbrains.kotlin.fir.types.impl
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.types.*
open class ConeClassTypeImpl(
override val symbol: ConeClassLikeSymbol,
override val lookupTag: ConeClassLikeLookupTag,
override val typeArguments: Array<ConeKotlinTypeProjection>,
isNullable: Boolean
) : ConeClassLikeType() {
@@ -18,23 +18,23 @@ open class ConeClassTypeImpl(
}
class ConeAbbreviatedTypeImpl(
override val abbreviationSymbol: ConeClassLikeSymbol,
override val abbreviationLookupTag: ConeClassLikeLookupTag,
override val typeArguments: Array<ConeKotlinTypeProjection>,
override val directExpansion: ConeClassLikeType,
isNullable: Boolean
) : ConeAbbreviatedType() {
override val symbol: ConeClassLikeSymbol
get() = abbreviationSymbol
override val lookupTag: ConeClassLikeLookupTag
get() = abbreviationLookupTag
override val nullability: ConeNullability = ConeNullability.create(isNullable)
}
class ConeTypeParameterTypeImpl(
override val symbol: ConeTypeParameterSymbol,
override val lookupTag: ConeTypeParameterLookupTag,
isNullable: Boolean
) : ConeTypeParameterType() {
override val typeArguments: Array<out ConeKotlinTypeProjection>
get() = EMPTY_ARRAY
override val nullability: ConeNullability = ConeNullability.create(isNullable)
}
}