[FIR] Add special node for sealed classes
This commit is contained in:
@@ -323,6 +323,10 @@ class MultiModuleHtmlFirDump(private val outputRoot: File) {
|
|||||||
visitElement(regularClass)
|
visitElement(regularClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitSealedClass(sealedClass: FirSealedClass) {
|
||||||
|
visitRegularClass(sealedClass)
|
||||||
|
}
|
||||||
|
|
||||||
fun indexDeclaration(symbolOwner: FirSymbolOwner<*>) {
|
fun indexDeclaration(symbolOwner: FirSymbolOwner<*>) {
|
||||||
symbols[symbolOwner.symbol] = location
|
symbols[symbolOwner.symbol] = location
|
||||||
symbolIds[symbolOwner.symbol] = symbolCounter++
|
symbolIds[symbolOwner.symbol] = symbolCounter++
|
||||||
|
|||||||
+19
-9
@@ -372,15 +372,25 @@ class DeclarationsConverter(
|
|||||||
isData = modifiers.isDataClass() && classKind != ClassKind.OBJECT
|
isData = modifiers.isDataClass() && classKind != ClassKind.OBJECT
|
||||||
isInline = modifiers.hasInline()
|
isInline = modifiers.hasInline()
|
||||||
}
|
}
|
||||||
val firClass = FirClassImpl(
|
val firClass = if (status.modality == Modality.SEALED) {
|
||||||
null,
|
FirSealedClassImpl(
|
||||||
session,
|
null,
|
||||||
className,
|
session,
|
||||||
status,
|
className,
|
||||||
classKind,
|
status,
|
||||||
FirClassSymbol(context.currentClassId)
|
classKind,
|
||||||
|
FirClassSymbol(context.currentClassId)
|
||||||
)
|
)
|
||||||
|
} else {
|
||||||
|
FirClassImpl(
|
||||||
|
null,
|
||||||
|
session,
|
||||||
|
className,
|
||||||
|
status,
|
||||||
|
classKind,
|
||||||
|
FirClassSymbol(context.currentClassId)
|
||||||
|
)
|
||||||
|
}
|
||||||
firClass.annotations += modifiers.annotations
|
firClass.annotations += modifiers.annotations
|
||||||
firClass.typeParameters += firTypeParameters
|
firClass.typeParameters += firTypeParameters
|
||||||
firClass.joinTypeParameters(typeConstraints)
|
firClass.joinTypeParameters(typeConstraints)
|
||||||
|
|||||||
@@ -12,10 +12,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||||
import org.jetbrains.kotlin.fir.declarations.addDeclaration
|
import org.jetbrains.kotlin.fir.declarations.addDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirImplicitThisReference
|
import org.jetbrains.kotlin.fir.references.impl.FirImplicitThisReference
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl
|
import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl
|
||||||
@@ -29,7 +26,7 @@ import org.jetbrains.kotlin.psi.KtClassOrObject
|
|||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
|
|
||||||
fun List<Pair<KtParameter?, FirProperty>>.generateComponentFunctions(
|
fun List<Pair<KtParameter?, FirProperty>>.generateComponentFunctions(
|
||||||
session: FirSession, firClass: FirClassImpl, packageFqName: FqName, classFqName: FqName,
|
session: FirSession, firClass: FirModifiableRegularClass, packageFqName: FqName, classFqName: FqName,
|
||||||
firPrimaryConstructor: FirConstructor
|
firPrimaryConstructor: FirConstructor
|
||||||
) {
|
) {
|
||||||
var componentIndex = 1
|
var componentIndex = 1
|
||||||
@@ -81,7 +78,7 @@ fun List<Pair<KtParameter?, FirProperty>>.generateComponentFunctions(
|
|||||||
private val copyName = Name.identifier("copy")
|
private val copyName = Name.identifier("copy")
|
||||||
|
|
||||||
fun List<Pair<KtParameter?, FirProperty>>.generateCopyFunction(
|
fun List<Pair<KtParameter?, FirProperty>>.generateCopyFunction(
|
||||||
session: FirSession, classOrObject: KtClassOrObject?, firClass: FirClassImpl, packageFqName: FqName, classFqName: FqName,
|
session: FirSession, classOrObject: KtClassOrObject?, firClass: FirModifiableRegularClass, packageFqName: FqName, classFqName: FqName,
|
||||||
firPrimaryConstructor: FirConstructor
|
firPrimaryConstructor: FirConstructor
|
||||||
) {
|
) {
|
||||||
val symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, copyName))
|
val symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, copyName))
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.*
|
|||||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.*
|
import org.jetbrains.kotlin.fir.types.impl.*
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -475,14 +474,25 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
|||||||
isData = (classOrObject as? KtClass)?.isData() == true
|
isData = (classOrObject as? KtClass)?.isData() == true
|
||||||
isInline = classOrObject.hasModifier(INLINE_KEYWORD)
|
isInline = classOrObject.hasModifier(INLINE_KEYWORD)
|
||||||
}
|
}
|
||||||
val firClass = FirClassImpl(
|
val firClass = if (status.modality == Modality.SEALED) {
|
||||||
classOrObject,
|
FirSealedClassImpl(
|
||||||
session,
|
classOrObject,
|
||||||
classOrObject.nameAsSafeName,
|
session,
|
||||||
status,
|
classOrObject.nameAsSafeName,
|
||||||
classKind,
|
status,
|
||||||
FirClassSymbol(context.currentClassId)
|
classKind,
|
||||||
)
|
FirClassSymbol(context.currentClassId)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
FirClassImpl(
|
||||||
|
classOrObject,
|
||||||
|
session,
|
||||||
|
classOrObject.nameAsSafeName,
|
||||||
|
status,
|
||||||
|
classKind,
|
||||||
|
FirClassSymbol(context.currentClassId)
|
||||||
|
)
|
||||||
|
}
|
||||||
classOrObject.extractAnnotationsTo(firClass)
|
classOrObject.extractAnnotationsTo(firClass)
|
||||||
classOrObject.extractTypeParametersTo(firClass)
|
classOrObject.extractTypeParametersTo(firClass)
|
||||||
val delegatedSelfType = classOrObject.toDelegatedSelfType(firClass)
|
val delegatedSelfType = classOrObject.toDelegatedSelfType(firClass)
|
||||||
|
|||||||
+24
-9
@@ -5,12 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.deserialization
|
package org.jetbrains.kotlin.fir.deserialization
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.addDeclarations
|
import org.jetbrains.kotlin.fir.declarations.addDeclarations
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirSealedClassImpl
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl
|
||||||
@@ -37,9 +39,10 @@ fun deserializeClassToSymbol(
|
|||||||
) {
|
) {
|
||||||
val flags = classProto.flags
|
val flags = classProto.flags
|
||||||
val kind = Flags.CLASS_KIND.get(flags)
|
val kind = Flags.CLASS_KIND.get(flags)
|
||||||
|
val modality = ProtoEnumFlags.modality(Flags.MODALITY.get(flags))
|
||||||
val status = FirDeclarationStatusImpl(
|
val status = FirDeclarationStatusImpl(
|
||||||
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
|
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
|
||||||
ProtoEnumFlags.modality(Flags.MODALITY.get(flags))
|
modality
|
||||||
).apply {
|
).apply {
|
||||||
isExpect = Flags.IS_EXPECT_CLASS.get(flags)
|
isExpect = Flags.IS_EXPECT_CLASS.get(flags)
|
||||||
isActual = false
|
isActual = false
|
||||||
@@ -48,14 +51,26 @@ fun deserializeClassToSymbol(
|
|||||||
isData = Flags.IS_DATA.get(classProto.flags)
|
isData = Flags.IS_DATA.get(classProto.flags)
|
||||||
isInline = Flags.IS_INLINE_CLASS.get(classProto.flags)
|
isInline = Flags.IS_INLINE_CLASS.get(classProto.flags)
|
||||||
}
|
}
|
||||||
FirClassImpl(
|
val firClass = if (modality == Modality.SEALED) {
|
||||||
null,
|
FirSealedClassImpl(
|
||||||
session,
|
null,
|
||||||
classId.shortClassName,
|
session,
|
||||||
status,
|
classId.shortClassName,
|
||||||
ProtoEnumFlags.classKind(kind),
|
status,
|
||||||
symbol
|
ProtoEnumFlags.classKind(kind),
|
||||||
).apply {
|
symbol
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
FirClassImpl(
|
||||||
|
null,
|
||||||
|
session,
|
||||||
|
classId.shortClassName,
|
||||||
|
status,
|
||||||
|
ProtoEnumFlags.classKind(kind),
|
||||||
|
symbol
|
||||||
|
)
|
||||||
|
}
|
||||||
|
firClass.apply {
|
||||||
resolvePhase = FirResolvePhase.DECLARATIONS
|
resolvePhase = FirResolvePhase.DECLARATIONS
|
||||||
val context =
|
val context =
|
||||||
parentContext?.childContext(
|
parentContext?.childContext(
|
||||||
|
|||||||
@@ -288,6 +288,10 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
regularClass.declarations.renderDeclarations()
|
regularClass.declarations.renderDeclarations()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitSealedClass(sealedClass: FirSealedClass) {
|
||||||
|
visitRegularClass(sealedClass)
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitAnonymousObject(anonymousObject: FirAnonymousObject) {
|
override fun visitAnonymousObject(anonymousObject: FirAnonymousObject) {
|
||||||
anonymousObject.annotations.renderAnnotations()
|
anonymousObject.annotations.renderAnnotations()
|
||||||
print("object : ")
|
print("object : ")
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.declarations
|
package org.jetbrains.kotlin.fir.declarations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl
|
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.declarations.impl.FirTypeParameterImpl
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||||
@@ -40,14 +40,14 @@ inline val FirMemberDeclaration.isLateInit: Boolean get() = status.isLateInit
|
|||||||
inline val FirPropertyAccessor.modality get() = status.modality
|
inline val FirPropertyAccessor.modality get() = status.modality
|
||||||
inline val FirPropertyAccessor.visibility get() = status.visibility
|
inline val FirPropertyAccessor.visibility get() = status.visibility
|
||||||
|
|
||||||
fun FirClassImpl.addDeclaration(declaration: FirDeclaration) {
|
fun FirModifiableRegularClass.addDeclaration(declaration: FirDeclaration) {
|
||||||
declarations += declaration
|
declarations += declaration
|
||||||
if (companionObject == null && declaration is FirRegularClass && declaration.isCompanion) {
|
if (companionObject == null && declaration is FirRegularClass && declaration.isCompanion) {
|
||||||
companionObject = declaration
|
companionObject = declaration
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirClassImpl.addDeclarations(declarations: Collection<FirDeclaration>) {
|
fun FirModifiableRegularClass.addDeclarations(declarations: Collection<FirDeclaration>) {
|
||||||
declarations.forEach(this::addDeclaration)
|
declarations.forEach(this::addDeclaration)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* 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.declarations
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
interface FirSealedClass : FirRegularClass {
|
||||||
|
override val psi: PsiElement?
|
||||||
|
override val session: FirSession
|
||||||
|
override val resolvePhase: FirResolvePhase
|
||||||
|
override val name: Name
|
||||||
|
override val annotations: List<FirAnnotationCall>
|
||||||
|
override val typeParameters: List<FirTypeParameter>
|
||||||
|
override val status: FirDeclarationStatus
|
||||||
|
override val supertypesComputationStatus: SupertypesComputationStatus
|
||||||
|
override val classKind: ClassKind
|
||||||
|
override val declarations: List<FirDeclaration>
|
||||||
|
override val symbol: FirClassSymbol
|
||||||
|
override val companionObject: FirRegularClass?
|
||||||
|
override val superTypeRefs: List<FirTypeRef>
|
||||||
|
val inheritors: List<ClassId>
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitSealedClass(this, data)
|
||||||
|
|
||||||
|
fun replaceInheritors(newInheritors: List<ClassId>)
|
||||||
|
}
|
||||||
@@ -33,7 +33,7 @@ class FirClassImpl(
|
|||||||
override var status: FirDeclarationStatus,
|
override var status: FirDeclarationStatus,
|
||||||
override val classKind: ClassKind,
|
override val classKind: ClassKind,
|
||||||
override val symbol: FirClassSymbol
|
override val symbol: FirClassSymbol
|
||||||
) : FirRegularClass, FirModifiableClass, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement {
|
) : FirRegularClass, FirModifiableRegularClass, FirAbstractAnnotatedElement {
|
||||||
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||||
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||||
override val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
|
override val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
|
||||||
|
|||||||
+50
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* 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.declarations.impl
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
|
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.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
interface FirModifiableRegularClass : FirRegularClass, FirModifiableClass, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement {
|
||||||
|
override val psi: PsiElement?
|
||||||
|
override val session: FirSession
|
||||||
|
override var resolvePhase: FirResolvePhase
|
||||||
|
override val name: Name
|
||||||
|
override val annotations: MutableList<FirAnnotationCall>
|
||||||
|
override val typeParameters: MutableList<FirTypeParameter>
|
||||||
|
override var status: FirDeclarationStatus
|
||||||
|
override var supertypesComputationStatus: SupertypesComputationStatus
|
||||||
|
override val classKind: ClassKind
|
||||||
|
override val declarations: MutableList<FirDeclaration>
|
||||||
|
override val symbol: FirClassSymbol
|
||||||
|
override var companionObject: FirRegularClass?
|
||||||
|
override val superTypeRefs: MutableList<FirTypeRef>
|
||||||
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirModifiableRegularClass
|
||||||
|
|
||||||
|
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase)
|
||||||
|
|
||||||
|
override fun replaceSupertypesComputationStatus(newSupertypesComputationStatus: SupertypesComputationStatus)
|
||||||
|
|
||||||
|
override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>)
|
||||||
|
}
|
||||||
+89
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* 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.declarations.impl
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||||
|
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.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
class FirSealedClassImpl(
|
||||||
|
override val psi: PsiElement?,
|
||||||
|
override val session: FirSession,
|
||||||
|
override val name: Name,
|
||||||
|
override var status: FirDeclarationStatus,
|
||||||
|
override val classKind: ClassKind,
|
||||||
|
override val symbol: FirClassSymbol
|
||||||
|
) : FirSealedClass, FirModifiableRegularClass, FirAbstractAnnotatedElement {
|
||||||
|
override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||||
|
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||||
|
override val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
|
||||||
|
override var supertypesComputationStatus: SupertypesComputationStatus = SupertypesComputationStatus.NOT_COMPUTED
|
||||||
|
override val declarations: MutableList<FirDeclaration> = mutableListOf()
|
||||||
|
override var companionObject: FirRegularClass? = null
|
||||||
|
override val superTypeRefs: MutableList<FirTypeRef> = mutableListOf()
|
||||||
|
override val inheritors: MutableList<ClassId> = mutableListOf()
|
||||||
|
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
annotations.forEach { it.accept(visitor, data) }
|
||||||
|
typeParameters.forEach { it.accept(visitor, data) }
|
||||||
|
status.accept(visitor, data)
|
||||||
|
(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) }
|
||||||
|
declarations.forEach { it.accept(visitor, data) }
|
||||||
|
superTypeRefs.forEach { it.accept(visitor, data) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirSealedClassImpl {
|
||||||
|
annotations.transformInplace(transformer, data)
|
||||||
|
typeParameters.transformInplace(transformer, data)
|
||||||
|
status = status.transformSingle(transformer, data)
|
||||||
|
(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.transformInplace(transformer, data)
|
||||||
|
declarations.transformInplace(transformer, data)
|
||||||
|
companionObject = declarations.asSequence().filterIsInstance<FirRegularClass>().firstOrNull { it.status.isCompanion }
|
||||||
|
superTypeRefs.transformInplace(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) {
|
||||||
|
resolvePhase = newResolvePhase
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replaceSupertypesComputationStatus(newSupertypesComputationStatus: SupertypesComputationStatus) {
|
||||||
|
supertypesComputationStatus = newSupertypesComputationStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replaceSuperTypeRefs(newSuperTypeRefs: List<FirTypeRef>) {
|
||||||
|
superTypeRefs.clear()
|
||||||
|
superTypeRefs.addAll(newSuperTypeRefs)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replaceInheritors(newInheritors: List<ClassId>) {
|
||||||
|
inheritors.clear()
|
||||||
|
inheritors.addAll(newInheritors)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.visitors
|
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.FirEnumEntry
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
|
||||||
@@ -85,5 +85,9 @@ abstract class FirDefaultTransformer<D> : FirTransformer<D>() {
|
|||||||
override fun transformNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: D): CompositeTransformResult<FirStatement> {
|
override fun transformNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||||
return transformWrappedArgumentExpression(namedArgumentExpression, data)
|
return transformWrappedArgumentExpression(namedArgumentExpression, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun transformSealedClass(sealedClass: FirSealedClass, data: D): CompositeTransformResult<FirStatement> {
|
||||||
|
return transformRegularClass(sealedClass, data)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.visitors
|
package org.jetbrains.kotlin.fir.visitors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
|
||||||
@@ -81,5 +82,9 @@ abstract class FirDefaultVisitor<R, D> : FirVisitor<R, D>() {
|
|||||||
override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: D): R {
|
override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: D): R {
|
||||||
return visitWrappedArgumentExpression(namedArgumentExpression, data)
|
return visitWrappedArgumentExpression(namedArgumentExpression, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitSealedClass(sealedClass: FirSealedClass, data: D): R {
|
||||||
|
return visitRegularClass(sealedClass, data)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.visitors
|
package org.jetbrains.kotlin.fir.visitors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
|
||||||
@@ -81,4 +82,8 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
|
|||||||
override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression) {
|
override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression) {
|
||||||
return visitWrappedArgumentExpression(namedArgumentExpression)
|
return visitWrappedArgumentExpression(namedArgumentExpression)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitSealedClass(sealedClass: FirSealedClass) {
|
||||||
|
return visitRegularClass(sealedClass)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.fir.declarations.FirField
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
@@ -242,6 +243,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformElement(regularClass, data)
|
return transformElement(regularClass, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun transformSealedClass(sealedClass: FirSealedClass, data: D): CompositeTransformResult<FirStatement> {
|
||||||
|
return transformElement(sealedClass, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun transformTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun transformTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformElement(typeAlias, data)
|
return transformElement(typeAlias, data)
|
||||||
}
|
}
|
||||||
@@ -666,6 +671,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformRegularClass(regularClass, data)
|
return transformRegularClass(regularClass, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitSealedClass(sealedClass: FirSealedClass, data: D): CompositeTransformResult<FirStatement> {
|
||||||
|
return transformSealedClass(sealedClass, data)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult<FirDeclaration> {
|
final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformTypeAlias(typeAlias, data)
|
return transformTypeAlias(typeAlias, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.fir.declarations.FirField
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
@@ -180,6 +181,8 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
|
|
||||||
open fun visitRegularClass(regularClass: FirRegularClass, data: D): R = visitElement(regularClass, data)
|
open fun visitRegularClass(regularClass: FirRegularClass, data: D): R = visitElement(regularClass, data)
|
||||||
|
|
||||||
|
open fun visitSealedClass(sealedClass: FirSealedClass, data: D): R = visitElement(sealedClass, data)
|
||||||
|
|
||||||
open fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): R = visitElement(typeAlias, data)
|
open fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): R = visitElement(typeAlias, data)
|
||||||
|
|
||||||
open fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): R = visitElement(enumEntry, data)
|
open fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): R = visitElement(enumEntry, data)
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.fir.declarations.FirField
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirSealedClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
@@ -240,6 +241,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(regularClass)
|
visitElement(regularClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitSealedClass(sealedClass: FirSealedClass) {
|
||||||
|
visitElement(sealedClass)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitTypeAlias(typeAlias: FirTypeAlias) {
|
open fun visitTypeAlias(typeAlias: FirTypeAlias) {
|
||||||
visitElement(typeAlias)
|
visitElement(typeAlias)
|
||||||
}
|
}
|
||||||
@@ -664,6 +669,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitRegularClass(regularClass)
|
visitRegularClass(regularClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitSealedClass(sealedClass: FirSealedClass, data: Nothing?) {
|
||||||
|
visitSealedClass(sealedClass)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: Nothing?) {
|
final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: Nothing?) {
|
||||||
visitTypeAlias(typeAlias)
|
visitTypeAlias(typeAlias)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -43,6 +43,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
|||||||
val klass = element("Class", Declaration, declaration, statement, annotationContainer)
|
val klass = element("Class", Declaration, declaration, statement, annotationContainer)
|
||||||
val classLikeDeclaration = element("ClassLikeDeclaration", Declaration, statement, memberDeclaration, symbolOwner, typeParametersOwner)
|
val classLikeDeclaration = element("ClassLikeDeclaration", Declaration, statement, memberDeclaration, symbolOwner, typeParametersOwner)
|
||||||
val regularClass = element("RegularClass", Declaration, namedDeclaration, classLikeDeclaration, klass)
|
val regularClass = element("RegularClass", Declaration, namedDeclaration, classLikeDeclaration, klass)
|
||||||
|
val sealedClass = element("SealedClass", Declaration, regularClass)
|
||||||
val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration)
|
val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration)
|
||||||
val enumEntry = element("EnumEntry", Declaration, regularClass)
|
val enumEntry = element("EnumEntry", Declaration, regularClass)
|
||||||
|
|
||||||
|
|||||||
+9
-1
@@ -61,12 +61,20 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
|||||||
kind = Interface
|
kind = Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
impl(regularClass, "FirClassImpl") {
|
val modifiableRegularClass = impl(regularClass, "FirModifiableRegularClass") {
|
||||||
parents += modifiableClass
|
parents += modifiableClass
|
||||||
parents += modifiableTypeParametersOwner
|
parents += modifiableTypeParametersOwner
|
||||||
|
kind = Interface
|
||||||
|
}
|
||||||
|
|
||||||
|
val regularClassConfig: ImplementationContext.() -> Unit = {
|
||||||
|
parents += modifiableRegularClass
|
||||||
defaultNull("companionObject")
|
defaultNull("companionObject")
|
||||||
defaultSupertypesComputationStatus()
|
defaultSupertypesComputationStatus()
|
||||||
}
|
}
|
||||||
|
impl(regularClass, "FirClassImpl", regularClassConfig)
|
||||||
|
|
||||||
|
impl(sealedClass, config = regularClassConfig)
|
||||||
|
|
||||||
impl(anonymousObject) {
|
impl(anonymousObject) {
|
||||||
parents += modifiableClass
|
parents += modifiableClass
|
||||||
|
|||||||
+4
@@ -220,6 +220,10 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
|||||||
+superTypeRefs(withReplace = true)
|
+superTypeRefs(withReplace = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sealedClass.configure {
|
||||||
|
+fieldList("inheritors", classIdType, withReplace = true)
|
||||||
|
}
|
||||||
|
|
||||||
typeAlias.configure {
|
typeAlias.configure {
|
||||||
parentArg(classLikeDeclaration, "F", typeAlias)
|
parentArg(classLikeDeclaration, "F", typeAlias)
|
||||||
+symbol("FirTypeAliasSymbol")
|
+symbol("FirTypeAliasSymbol")
|
||||||
|
|||||||
+3
-3
@@ -289,7 +289,7 @@ fun PrintWriter.printImplementation(implementation: Implementation) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
element.allFields.filter { it.type.contains("Symbol") }
|
element.allFields.filter { it.type.contains("Symbol") && it !is FieldList }
|
||||||
.takeIf { it.isNotEmpty() && !isInterface && !element.type.contains("Reference")}
|
.takeIf { it.isNotEmpty() && !isInterface && !element.type.contains("Reference")}
|
||||||
?.let { symbolFields ->
|
?.let { symbolFields ->
|
||||||
indent(1)
|
indent(1)
|
||||||
@@ -338,7 +338,7 @@ fun PrintWriter.printImplementation(implementation: Implementation) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
if (type == "FirClassImpl" && field.name == "declarations") {
|
if (type in setOf("FirClassImpl", "FirSealedClassImpl") && field.name == "declarations") {
|
||||||
indent(2)
|
indent(2)
|
||||||
println("(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) }")
|
println("(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) }")
|
||||||
}
|
}
|
||||||
@@ -413,7 +413,7 @@ fun PrintWriter.printImplementation(implementation: Implementation) {
|
|||||||
}
|
}
|
||||||
field.name in setOf("dispatchReceiver", "extensionReceiver") -> {
|
field.name in setOf("dispatchReceiver", "extensionReceiver") -> {
|
||||||
}
|
}
|
||||||
type == "FirClassImpl" && field.name == "declarations" -> {
|
type in setOf("FirClassImpl", "FirSealedClassImpl") && field.name == "declarations" -> {
|
||||||
indent(2)
|
indent(2)
|
||||||
println("(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.transformInplace(transformer, data)")
|
println("(declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.transformInplace(transformer, data)")
|
||||||
indent(2)
|
indent(2)
|
||||||
|
|||||||
@@ -59,3 +59,4 @@ val compositeTransformResultType = type("fir.visitors", "CompositeTransformResul
|
|||||||
val abstractFirBasedSymbolType = type("fir.symbols", "AbstractFirBasedSymbol")
|
val abstractFirBasedSymbolType = type("fir.symbols", "AbstractFirBasedSymbol")
|
||||||
val backingFieldSymbolType = type("fir.symbols.impl", "FirBackingFieldSymbol")
|
val backingFieldSymbolType = type("fir.symbols.impl", "FirBackingFieldSymbol")
|
||||||
val delegateFieldSymbolType = type("fir.symbols.impl", "FirDelegateFieldSymbol")
|
val delegateFieldSymbolType = type("fir.symbols.impl", "FirDelegateFieldSymbol")
|
||||||
|
val classSymbolType = type("fir.symbols.impl", "FirClassSymbol")
|
||||||
Reference in New Issue
Block a user