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:
committed by
Mikhail Glukhikh
parent
6b5ba272a0
commit
2dbe96c853
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user