Make FirClass a kind of FirClassLikeDeclaration, introduce FirRegularClass/AnonymousObject symbols
This commit is contained in:
@@ -236,7 +236,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
visitDeclaration(namedDeclaration)
|
||||
if (namedDeclaration !is FirCallableDeclaration<*>) { // Handled by visitCallableDeclaration
|
||||
print(" " + namedDeclaration.name)
|
||||
if (namedDeclaration is FirClassLikeDeclaration<*>) {
|
||||
if (namedDeclaration is FirTypeParametersOwner) {
|
||||
namedDeclaration.typeParameters.renderTypeParameters()
|
||||
}
|
||||
} else if (namedDeclaration is FirMemberDeclaration) {
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
@@ -19,15 +20,17 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
abstract class FirAnonymousObject : FirPureAbstractElement(), FirClass, FirExpression {
|
||||
abstract class FirAnonymousObject : FirPureAbstractElement(), FirClass<FirAnonymousObject>, FirExpression {
|
||||
abstract override val source: FirSourceElement?
|
||||
abstract override val session: FirSession
|
||||
abstract override val resolvePhase: FirResolvePhase
|
||||
abstract override val supertypesComputationStatus: SupertypesComputationStatus
|
||||
abstract override val classKind: ClassKind
|
||||
abstract override val superTypeRefs: List<FirTypeRef>
|
||||
abstract override val declarations: List<FirDeclaration>
|
||||
abstract override val annotations: List<FirAnnotationCall>
|
||||
abstract override val typeRef: FirTypeRef
|
||||
abstract override val symbol: FirAnonymousObjectSymbol
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAnonymousObject(this, data)
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
@@ -19,10 +20,12 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
interface FirClass : FirDeclaration, FirStatement, FirAnnotationContainer {
|
||||
interface FirClass<F : FirClass<F>> : FirClassLikeDeclaration<F>, FirStatement, FirAnnotationContainer {
|
||||
override val source: FirSourceElement?
|
||||
override val session: FirSession
|
||||
override val resolvePhase: FirResolvePhase
|
||||
override val supertypesComputationStatus: SupertypesComputationStatus
|
||||
override val symbol: FirClassSymbol<F>
|
||||
val classKind: ClassKind
|
||||
val superTypeRefs: List<FirTypeRef>
|
||||
val declarations: List<FirDeclaration>
|
||||
|
||||
+2
-6
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
/*
|
||||
@@ -19,14 +18,11 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
interface FirClassLikeDeclaration<F : FirClassLikeDeclaration<F>> : FirStatement, FirMemberDeclaration, FirSymbolOwner<F>, FirTypeParametersOwner {
|
||||
interface FirClassLikeDeclaration<F : FirClassLikeDeclaration<F>> : FirDeclaration, FirStatement, FirSymbolOwner<F> {
|
||||
override val source: FirSourceElement?
|
||||
override val annotations: List<FirAnnotationCall>
|
||||
override val session: FirSession
|
||||
override val resolvePhase: FirResolvePhase
|
||||
override val name: Name
|
||||
override val typeParameters: List<FirTypeParameter>
|
||||
override val status: FirDeclarationStatus
|
||||
override val annotations: List<FirAnnotationCall>
|
||||
val supertypesComputationStatus: SupertypesComputationStatus
|
||||
override val symbol: FirClassLikeSymbol<F>
|
||||
|
||||
|
||||
@@ -9,6 +9,9 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||
|
||||
@@ -60,7 +63,13 @@ val FirTypeAlias.expandedConeType: ConeClassLikeType? get() = expandedTypeRef.co
|
||||
|
||||
val FirRegularClass.classId get() = symbol.classId
|
||||
|
||||
val FirClass.superConeTypes get() = superTypeRefs.mapNotNull { it.coneTypeSafe<ConeClassLikeType>() }
|
||||
val FirClassSymbol<*>.superConeTypes
|
||||
get() = when (this) {
|
||||
is FirRegularClassSymbol -> fir.superConeTypes
|
||||
is FirAnonymousObjectSymbol -> fir.superConeTypes
|
||||
}
|
||||
|
||||
val FirClass<*>.superConeTypes get() = superTypeRefs.mapNotNull { it.coneTypeSafe<ConeClassLikeType>() }
|
||||
|
||||
fun FirRegularClass.collectEnumEntries(): Collection<FirEnumEntry> {
|
||||
assert(classKind == ClassKind.ENUM_CLASS)
|
||||
|
||||
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
@@ -32,7 +32,7 @@ abstract class FirEnumEntry : FirPureAbstractElement(), FirRegularClass {
|
||||
abstract override val supertypesComputationStatus: SupertypesComputationStatus
|
||||
abstract override val classKind: ClassKind
|
||||
abstract override val declarations: List<FirDeclaration>
|
||||
abstract override val symbol: FirClassSymbol
|
||||
abstract override val symbol: FirRegularClassSymbol
|
||||
abstract override val companionObject: FirRegularClass?
|
||||
abstract override val superTypeRefs: List<FirTypeRef>
|
||||
abstract val arguments: List<FirExpression>
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
interface FirRegularClass : FirNamedDeclaration, FirClassLikeDeclaration<FirRegularClass>, FirClass {
|
||||
interface FirRegularClass : FirMemberDeclaration, FirTypeParametersOwner, FirClass<FirRegularClass> {
|
||||
override val source: FirSourceElement?
|
||||
override val session: FirSession
|
||||
override val resolvePhase: FirResolvePhase
|
||||
@@ -30,7 +30,7 @@ interface FirRegularClass : FirNamedDeclaration, FirClassLikeDeclaration<FirRegu
|
||||
override val supertypesComputationStatus: SupertypesComputationStatus
|
||||
override val classKind: ClassKind
|
||||
override val declarations: List<FirDeclaration>
|
||||
override val symbol: FirClassSymbol
|
||||
override val symbol: FirRegularClassSymbol
|
||||
val companionObject: FirRegularClass?
|
||||
override val superTypeRefs: List<FirTypeRef>
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirPureAbstractElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -32,7 +32,7 @@ abstract class FirSealedClass : FirPureAbstractElement(), FirRegularClass {
|
||||
abstract override val supertypesComputationStatus: SupertypesComputationStatus
|
||||
abstract override val classKind: ClassKind
|
||||
abstract override val declarations: List<FirDeclaration>
|
||||
abstract override val symbol: FirClassSymbol
|
||||
abstract override val symbol: FirRegularClassSymbol
|
||||
abstract override val companionObject: FirRegularClass?
|
||||
abstract override val superTypeRefs: List<FirTypeRef>
|
||||
abstract val inheritors: List<ClassId>
|
||||
|
||||
@@ -19,14 +19,14 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
abstract class FirTypeAlias : FirPureAbstractElement(), FirClassLikeDeclaration<FirTypeAlias> {
|
||||
abstract class FirTypeAlias : FirPureAbstractElement(), FirClassLikeDeclaration<FirTypeAlias>, FirMemberDeclaration, FirTypeParametersOwner {
|
||||
abstract override val source: FirSourceElement?
|
||||
abstract override val session: FirSession
|
||||
abstract override val resolvePhase: FirResolvePhase
|
||||
abstract override val supertypesComputationStatus: SupertypesComputationStatus
|
||||
abstract override val name: Name
|
||||
abstract override val typeParameters: List<FirTypeParameter>
|
||||
abstract override val status: FirDeclarationStatus
|
||||
abstract override val supertypesComputationStatus: SupertypesComputationStatus
|
||||
abstract override val symbol: FirTypeAliasSymbol
|
||||
abstract val expandedTypeRef: FirTypeRef
|
||||
abstract override val annotations: List<FirAnnotationCall>
|
||||
|
||||
+14
-2
@@ -11,8 +11,10 @@ import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.SupertypesComputationStatus
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
@@ -24,15 +26,21 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
class FirAnonymousObjectImpl(
|
||||
override val source: FirSourceElement?,
|
||||
override val session: FirSession
|
||||
) : FirAnonymousObject(), FirModifiableClass, FirAbstractAnnotatedElement {
|
||||
override val session: FirSession,
|
||||
override val symbol: FirAnonymousObjectSymbol
|
||||
) : FirAnonymousObject(), FirModifiableClass<FirAnonymousObject>, FirAbstractAnnotatedElement {
|
||||
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||
override var supertypesComputationStatus: SupertypesComputationStatus = SupertypesComputationStatus.NOT_COMPUTED
|
||||
override val classKind: ClassKind get() = ClassKind.OBJECT
|
||||
override val superTypeRefs: MutableList<FirTypeRef> = mutableListOf()
|
||||
override val declarations: MutableList<FirDeclaration> = mutableListOf()
|
||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
|
||||
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
superTypeRefs.forEach { it.accept(visitor, data) }
|
||||
declarations.forEach { it.accept(visitor, data) }
|
||||
@@ -52,6 +60,10 @@ class FirAnonymousObjectImpl(
|
||||
resolvePhase = newResolvePhase
|
||||
}
|
||||
|
||||
override fun replaceSupertypesComputationStatus(newSupertypesComputationStatus: SupertypesComputationStatus) {
|
||||
supertypesComputationStatus = newSupertypesComputationStatus
|
||||
}
|
||||
|
||||
override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>) {
|
||||
superTypeRefs.clear()
|
||||
superTypeRefs.addAll(newSuperTypeRefs)
|
||||
|
||||
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.SupertypesComputationStatus
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
@@ -33,7 +33,7 @@ class FirClassImpl(
|
||||
override val name: Name,
|
||||
override var status: FirDeclarationStatus,
|
||||
override val classKind: ClassKind,
|
||||
override val symbol: FirClassSymbol
|
||||
override val symbol: FirRegularClassSymbol
|
||||
) : FirPureAbstractElement(), FirRegularClass, FirModifiableRegularClass, FirAbstractAnnotatedElement {
|
||||
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||
|
||||
+3
-3
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.declarations.SupertypesComputationStatus
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
@@ -34,8 +34,8 @@ class FirEnumEntryImpl(
|
||||
override val source: FirSourceElement?,
|
||||
override val session: FirSession,
|
||||
override val name: Name,
|
||||
override val symbol: FirClassSymbol
|
||||
) : FirEnumEntry(), FirModifiableClass, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement {
|
||||
override val symbol: FirRegularClassSymbol
|
||||
) : FirEnumEntry(), FirModifiableClass<FirRegularClass>, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement {
|
||||
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||
override val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
|
||||
|
||||
+8
-2
@@ -11,8 +11,10 @@ import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.SupertypesComputationStatus
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
@@ -21,17 +23,21 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
interface FirModifiableClass : FirClass, FirAbstractAnnotatedElement {
|
||||
interface FirModifiableClass<F : FirClass<F>> : FirClass<F>, FirAbstractAnnotatedElement {
|
||||
override val source: FirSourceElement?
|
||||
override val session: FirSession
|
||||
override var resolvePhase: FirResolvePhase
|
||||
override var supertypesComputationStatus: SupertypesComputationStatus
|
||||
override val symbol: FirClassSymbol<F>
|
||||
override val classKind: ClassKind
|
||||
override val superTypeRefs: MutableList<FirTypeRef>
|
||||
override val declarations: MutableList<FirDeclaration>
|
||||
override val annotations: MutableList<FirAnnotationCall>
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableClass
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableClass<F>
|
||||
|
||||
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
|
||||
|
||||
override fun replaceSupertypesComputationStatus(newSupertypesComputationStatus: SupertypesComputationStatus)
|
||||
|
||||
override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
|
||||
}
|
||||
|
||||
+3
-3
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.SupertypesComputationStatus
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
interface FirModifiableRegularClass : FirRegularClass, FirModifiableClass, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement {
|
||||
interface FirModifiableRegularClass : FirRegularClass, FirModifiableClass<FirRegularClass>, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement {
|
||||
override val source: FirSourceElement?
|
||||
override val session: FirSession
|
||||
override var resolvePhase: FirResolvePhase
|
||||
@@ -37,7 +37,7 @@ interface FirModifiableRegularClass : FirRegularClass, FirModifiableClass, FirMo
|
||||
override var supertypesComputationStatus: SupertypesComputationStatus
|
||||
override val classKind: ClassKind
|
||||
override val declarations: MutableList<FirDeclaration>
|
||||
override val symbol: FirClassSymbol
|
||||
override val symbol: FirRegularClassSymbol
|
||||
override var companionObject: FirRegularClass?
|
||||
override val superTypeRefs: MutableList<FirTypeRef>
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableRegularClass
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.SupertypesComputationStatus
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -34,7 +34,7 @@ class FirSealedClassImpl(
|
||||
override val name: Name,
|
||||
override var status: FirDeclarationStatus,
|
||||
override val classKind: ClassKind,
|
||||
override val symbol: FirClassSymbol
|
||||
override val symbol: FirRegularClassSymbol
|
||||
) : FirSealedClass(), FirModifiableRegularClass, FirAbstractAnnotatedElement {
|
||||
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||
|
||||
+1
-1
@@ -33,8 +33,8 @@ class FirTypeAliasImpl(
|
||||
override var expandedTypeRef: FirTypeRef
|
||||
) : FirTypeAlias(), FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement {
|
||||
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||
override val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
|
||||
override var supertypesComputationStatus: SupertypesComputationStatus = SupertypesComputationStatus.NOT_COMPUTED
|
||||
override val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
|
||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||
|
||||
init {
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.symbols.ConeClassLikeLookupTag
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
data class ConeClassLookupTagWithFixedSymbol(
|
||||
override val classId: ClassId,
|
||||
val symbol: FirClassSymbol<*>
|
||||
) : ConeClassLikeLookupTag() {
|
||||
}
|
||||
@@ -6,12 +6,11 @@
|
||||
package org.jetbrains.kotlin.fir.symbols.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeAliasLookupTag
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
sealed class FirClassLikeSymbol<D>(
|
||||
val classId: ClassId
|
||||
@@ -24,10 +23,18 @@ sealed class FirClassLikeSymbol<D>(
|
||||
override fun hashCode(): Int = fir.hashCode()
|
||||
}
|
||||
|
||||
class FirClassSymbol(classId: ClassId) : FirClassLikeSymbol<FirRegularClass>(classId) {
|
||||
override fun toLookupTag(): ConeClassLikeLookupTag = ConeClassLikeLookupTagImpl(classId)
|
||||
sealed class FirClassSymbol<C : FirClass<C>>(classId: ClassId) : FirClassLikeSymbol<C>(classId) {
|
||||
private val lookupTag =
|
||||
if (classId.isLocal) ConeClassLookupTagWithFixedSymbol(classId, this)
|
||||
else ConeClassLikeLookupTagImpl(classId)
|
||||
|
||||
override fun toLookupTag(): ConeClassLikeLookupTag = lookupTag
|
||||
}
|
||||
|
||||
class FirRegularClassSymbol(classId: ClassId) : FirClassSymbol<FirRegularClass>(classId)
|
||||
|
||||
class FirAnonymousObjectSymbol : FirClassSymbol<FirAnonymousObject>(ClassId(FqName.ROOT, FqName("anonymous"), true))
|
||||
|
||||
class FirTypeAliasSymbol(classId: ClassId) : FirClassLikeSymbol<FirTypeAlias>(classId) {
|
||||
override fun toLookupTag(): TypeAliasLookupTagImpl = TypeAliasLookupTagImpl(classId)
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.visitors
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
|
||||
@@ -33,8 +33,8 @@ import org.jetbrains.kotlin.fir.declarations.FirVariable
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
@@ -234,12 +234,12 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformElement(field, data)
|
||||
}
|
||||
|
||||
open fun transformClass(klass: FirClass, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformElement(klass, data)
|
||||
open fun <F : FirClassLikeDeclaration<F>> transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformElement(classLikeDeclaration, data)
|
||||
}
|
||||
|
||||
open fun <F : FirClassLikeDeclaration<F>> transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||
return transformElement(classLikeDeclaration, data)
|
||||
open fun <F : FirClass<F>> transformClass(klass: FirClass<F>, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformElement(klass, data)
|
||||
}
|
||||
|
||||
open fun transformRegularClass(regularClass: FirRegularClass, data: D): CompositeTransformResult<FirStatement> {
|
||||
@@ -674,12 +674,12 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformField(field, data)
|
||||
}
|
||||
|
||||
final override fun visitClass(klass: FirClass, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformClass(klass, data)
|
||||
final override fun <F : FirClassLikeDeclaration<F>> visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformClassLikeDeclaration(classLikeDeclaration, data)
|
||||
}
|
||||
|
||||
final override fun <F : FirClassLikeDeclaration<F>> visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||
return transformClassLikeDeclaration(classLikeDeclaration, data)
|
||||
final override fun <F : FirClass<F>> visitClass(klass: FirClass<F>, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformClass(klass, data)
|
||||
}
|
||||
|
||||
final override fun visitRegularClass(regularClass: FirRegularClass, data: D): CompositeTransformResult<FirStatement> {
|
||||
|
||||
@@ -33,8 +33,8 @@ import org.jetbrains.kotlin.fir.declarations.FirVariable
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
@@ -178,10 +178,10 @@ abstract class FirVisitor<out R, in D> {
|
||||
|
||||
open fun visitField(field: FirField, data: D): R = visitElement(field, data)
|
||||
|
||||
open fun visitClass(klass: FirClass, data: D): R = visitElement(klass, data)
|
||||
|
||||
open fun <F : FirClassLikeDeclaration<F>> visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>, data: D): R = visitElement(classLikeDeclaration, data)
|
||||
|
||||
open fun <F : FirClass<F>> visitClass(klass: FirClass<F>, data: D): R = visitElement(klass, data)
|
||||
|
||||
open fun visitRegularClass(regularClass: FirRegularClass, data: D): R = visitElement(regularClass, data)
|
||||
|
||||
open fun visitSealedClass(sealedClass: FirSealedClass, data: D): R = visitElement(sealedClass, data)
|
||||
|
||||
@@ -33,8 +33,8 @@ import org.jetbrains.kotlin.fir.declarations.FirVariable
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
@@ -232,14 +232,14 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitElement(field)
|
||||
}
|
||||
|
||||
open fun visitClass(klass: FirClass) {
|
||||
visitElement(klass)
|
||||
}
|
||||
|
||||
open fun <F : FirClassLikeDeclaration<F>> visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>) {
|
||||
visitElement(classLikeDeclaration)
|
||||
}
|
||||
|
||||
open fun <F : FirClass<F>> visitClass(klass: FirClass<F>) {
|
||||
visitElement(klass)
|
||||
}
|
||||
|
||||
open fun visitRegularClass(regularClass: FirRegularClass) {
|
||||
visitElement(regularClass)
|
||||
}
|
||||
@@ -672,14 +672,14 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitField(field)
|
||||
}
|
||||
|
||||
final override fun visitClass(klass: FirClass, data: Nothing?) {
|
||||
visitClass(klass)
|
||||
}
|
||||
|
||||
final override fun <F : FirClassLikeDeclaration<F>> visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration<F>, data: Nothing?) {
|
||||
visitClassLikeDeclaration(classLikeDeclaration)
|
||||
}
|
||||
|
||||
final override fun <F : FirClass<F>> visitClass(klass: FirClass<F>, data: Nothing?) {
|
||||
visitClass(klass)
|
||||
}
|
||||
|
||||
final override fun visitRegularClass(regularClass: FirRegularClass, data: Nothing?) {
|
||||
visitRegularClass(regularClass)
|
||||
}
|
||||
|
||||
+4
-4
@@ -40,11 +40,11 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val valueParameter = element("ValueParameter", Declaration, variable)
|
||||
val property = element("Property", Declaration, variable, controlFlowGraphOwner, typeParametersOwner, callableMemberDeclaration)
|
||||
val field = element("Field", Declaration, variable, callableMemberDeclaration) // TODO: add noImpl
|
||||
val klass = element("Class", Declaration, declaration, statement, annotationContainer)
|
||||
val classLikeDeclaration = element("ClassLikeDeclaration", Declaration, statement, memberDeclaration, symbolOwner, typeParametersOwner)
|
||||
val regularClass = element("RegularClass", Declaration, namedDeclaration, classLikeDeclaration, klass)
|
||||
val classLikeDeclaration = element("ClassLikeDeclaration", Declaration, declaration, statement, symbolOwner)
|
||||
val klass = element("Class", Declaration, classLikeDeclaration, statement, annotationContainer)
|
||||
val regularClass = element("RegularClass", Declaration, memberDeclaration, typeParametersOwner, klass)
|
||||
val sealedClass = element("SealedClass", Declaration, regularClass)
|
||||
val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration)
|
||||
val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration, memberDeclaration, typeParametersOwner)
|
||||
val enumEntry = element("EnumEntry", Declaration, regularClass)
|
||||
|
||||
val function = element("Function", Declaration, callableDeclaration, controlFlowGraphOwner, targetElement, annotationContainer, typeParametersOwner, statement)
|
||||
|
||||
+4
-3
@@ -54,7 +54,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
val modifiableClass = impl(klass, "FirModifiableClass")
|
||||
|
||||
val modifiableRegularClass = impl(regularClass, "FirModifiableRegularClass") {
|
||||
parents += modifiableClass
|
||||
parents += modifiableClass.withArg(regularClass)
|
||||
parents += modifiableTypeParametersOwner
|
||||
}
|
||||
|
||||
@@ -68,15 +68,16 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
impl(sealedClass, config = regularClassConfig)
|
||||
|
||||
impl(anonymousObject) {
|
||||
parents += modifiableClass
|
||||
parents += modifiableClass.withArg(anonymousObject)
|
||||
default("classKind") {
|
||||
value = "ClassKind.OBJECT"
|
||||
withGetter = true
|
||||
}
|
||||
defaultSupertypesComputationStatus()
|
||||
}
|
||||
|
||||
impl(enumEntry) {
|
||||
parents += modifiableClass
|
||||
parents += modifiableClass.withArg(regularClass)
|
||||
parents += modifiableTypeParametersOwner
|
||||
default("status", "FirDeclarationStatusImpl(Visibilities.UNKNOWN, Modality.FINAL)")
|
||||
default("classKind") {
|
||||
|
||||
+17
-9
@@ -199,13 +199,6 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
||||
needTransformOtherChildren()
|
||||
}
|
||||
|
||||
klass.configure {
|
||||
+classKind
|
||||
+superTypeRefs(withReplace = true)
|
||||
+declarations
|
||||
+annotations
|
||||
}
|
||||
|
||||
classLikeDeclaration.configure {
|
||||
withArg("F", "FirClassLikeDeclaration<F>")
|
||||
parentArg(symbolOwner, "F", "F")
|
||||
@@ -213,13 +206,28 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
||||
+symbol("FirClassLikeSymbol", "F")
|
||||
}
|
||||
|
||||
klass.configure {
|
||||
withArg("F", "FirClass<F>")
|
||||
parentArg(classLikeDeclaration, "F", "F")
|
||||
+symbol("FirClassSymbol", "F")
|
||||
+classKind
|
||||
+superTypeRefs(withReplace = true)
|
||||
+declarations
|
||||
+annotations
|
||||
}
|
||||
|
||||
regularClass.configure {
|
||||
parentArg(classLikeDeclaration, "F", regularClass)
|
||||
+symbol("FirClassSymbol")
|
||||
parentArg(klass, "F", regularClass)
|
||||
+symbol("FirRegularClassSymbol")
|
||||
+field("companionObject", regularClass, nullable = true)
|
||||
+superTypeRefs(withReplace = true)
|
||||
}
|
||||
|
||||
anonymousObject.configure {
|
||||
parentArg(klass, "F", anonymousObject)
|
||||
+symbol("FirAnonymousObjectSymbol")
|
||||
}
|
||||
|
||||
sealedClass.configure {
|
||||
+fieldList("inheritors", classIdType, withReplace = true)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user