FIR: introduce class & type alias symbols
This commit is contained in:
@@ -7,13 +7,14 @@ package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
// May be all containers should be properties and not base classes
|
||||
// About descriptors: introduce something like FirDescriptor which is FirUnresolved at the beginning and FirSymbol(descriptor) at the end
|
||||
@BaseTransformedType
|
||||
interface FirClass : FirDeclarationContainer, FirMemberDeclaration {
|
||||
interface FirClass : FirDeclarationContainer, FirMemberDeclaration, FirSymbolOwner<FirClass> {
|
||||
// including delegated types
|
||||
val superTypes: List<FirType>
|
||||
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirTypeAlias : FirMemberDeclaration {
|
||||
interface FirTypeAlias : FirMemberDeclaration, FirSymbolOwner<FirTypeAlias> {
|
||||
val expandedType: FirType
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -21,6 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
open class FirClassImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
final override val symbol: FirBasedSymbol<FirClass>,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
modality: Modality?,
|
||||
@@ -30,6 +32,11 @@ open class FirClassImpl(
|
||||
final override val isCompanion: Boolean,
|
||||
final override val isData: Boolean
|
||||
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality, platformStatus), FirClass {
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override val superTypes = mutableListOf<FirType>()
|
||||
|
||||
override val declarations = mutableListOf<FirDeclaration>()
|
||||
|
||||
@@ -13,15 +13,18 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirEnumEntryImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
symbol: FirClassSymbol,
|
||||
name: Name
|
||||
) : FirClassImpl(
|
||||
session,
|
||||
psi,
|
||||
symbol,
|
||||
name,
|
||||
visibility = Visibilities.UNKNOWN,
|
||||
modality = Modality.FINAL,
|
||||
|
||||
+1
@@ -17,6 +17,7 @@ class FirResolvedClassImpl(val delegate: FirClass, override val descriptor: FirB
|
||||
FirResolvedClass, FirClass by delegate {
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
descriptor.bind(this)
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -17,6 +17,7 @@ class FirResolvedEnumEntryImpl(
|
||||
) : FirResolvedEnumEntry, FirEnumEntry by delegate {
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
descriptor.bind(this)
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -19,6 +19,7 @@ class FirResolvedTypeAliasImpl(val delegate: FirTypeAlias, override val descript
|
||||
get() = delegate.modality ?: Modality.FINAL
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
descriptor.bind(this)
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
@@ -21,11 +22,17 @@ import org.jetbrains.kotlin.name.Name
|
||||
class FirTypeAliasImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val symbol: FirTypeAliasSymbol,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
platformStatus: FirMemberPlatformStatus,
|
||||
override var expandedType: FirType
|
||||
) : FirAbstractMemberDeclaration(session, psi, name, visibility, Modality.FINAL, platformStatus), FirTypeAlias {
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeParameters.transformInplace(transformer, data)
|
||||
expandedType = expandedType.transformSingle(transformer, data)
|
||||
|
||||
+2
-2
@@ -19,10 +19,10 @@ import org.jetbrains.kotlin.types.Variance
|
||||
class FirTypeParameterImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val symbol: FirTypeParameterSymbol,
|
||||
name: Name,
|
||||
override val variance: Variance,
|
||||
override val isReified: Boolean,
|
||||
override val symbol: FirTypeParameterSymbol
|
||||
override val isReified: Boolean
|
||||
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirTypeParameter {
|
||||
init {
|
||||
symbol.bind(this)
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright 2010-2018 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.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.coneTypeUnsafe
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
class FirClassSymbol(override val classId: ClassId) : ConeClassSymbol, AbstractFirBasedSymbol<FirClass>() {
|
||||
override val superTypes: List<ConeClassLikeType>
|
||||
get() = fir.superTypes.map { it.coneTypeUnsafe<ConeClassLikeType>() }
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright 2010-2018 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.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeAliasSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.coneTypeUnsafe
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
class FirTypeAliasSymbol(override val classId: ClassId) : ConeTypeAliasSymbol, AbstractFirBasedSymbol<FirTypeAlias>() {
|
||||
override val expansionType: ConeClassLikeType
|
||||
get() = fir.expandedType.coneTypeUnsafe()
|
||||
|
||||
}
|
||||
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.types.impl
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.symbols.toSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirResolvedType
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -21,10 +21,12 @@ sealed class FirBuiltinType(
|
||||
val name: String
|
||||
) : FirResolvedType {
|
||||
final override val type: ConeKotlinType = ConeClassTypeImpl(
|
||||
ClassId(
|
||||
KOTLIN_PACKAGE_FQ_NAME,
|
||||
Name.identifier(name)
|
||||
).toSymbol(),
|
||||
FirClassSymbol(
|
||||
ClassId(
|
||||
KOTLIN_PACKAGE_FQ_NAME,
|
||||
Name.identifier(name)
|
||||
)
|
||||
),
|
||||
emptyList()
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user