[FIR] Rename FirStatusOwner back to FirMemberDeclaration

This commit is contained in:
Dmitriy Novozhilov
2021-06-29 10:18:16 +03:00
parent f400477c70
commit 5816d7ae9f
58 changed files with 242 additions and 244 deletions
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
sealed class FirCallableMemberDeclaration : FirCallableDeclaration(), FirStatusOwner {
sealed class FirCallableMemberDeclaration : FirCallableDeclaration(), FirMemberDeclaration {
abstract override val source: FirSourceElement?
abstract override val moduleData: FirModuleData
abstract override val resolvePhase: FirResolvePhase
@@ -14,18 +14,18 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
sealed interface FirStatusOwner : FirTypeParameterRefsOwner {
sealed interface FirMemberDeclaration : FirTypeParameterRefsOwner {
override val source: FirSourceElement?
override val typeParameters: List<FirTypeParameterRef>
val status: FirDeclarationStatus
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitStatusOwner(this, data)
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitMemberDeclaration(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
transformer.transformStatusOwner(this, data) as E
transformer.transformMemberDeclaration(this, data) as E
override fun <D> transformTypeParameters(transformer: FirTransformer<D>, data: D): FirStatusOwner
override fun <D> transformTypeParameters(transformer: FirTransformer<D>, data: D): FirMemberDeclaration
fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirStatusOwner
fun <D> transformStatus(transformer: FirTransformer<D>, data: D): FirMemberDeclaration
}
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirRegularClass : FirClass(), FirStatusOwner, FirControlFlowGraphOwner {
abstract class FirRegularClass : FirClass(), FirMemberDeclaration, FirControlFlowGraphOwner {
abstract override val source: FirSourceElement?
abstract override val moduleData: FirModuleData
abstract override val resolvePhase: FirResolvePhase
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirTypeAlias : FirClassLikeDeclaration(), FirStatusOwner, FirTypeParametersOwner {
abstract class FirTypeAlias : FirClassLikeDeclaration(), FirMemberDeclaration, FirTypeParametersOwner {
abstract override val source: FirSourceElement?
abstract override val moduleData: FirModuleData
abstract override val resolvePhase: FirResolvePhase
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
import org.jetbrains.kotlin.fir.declarations.FirStatusOwner
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
@@ -223,8 +223,8 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformElement(typeParametersOwner, data)
}
open fun transformStatusOwner(statusOwner: FirStatusOwner, data: D): FirStatusOwner {
return transformElement(statusOwner, data)
open fun transformMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): FirMemberDeclaration {
return transformElement(memberDeclaration, data)
}
open fun transformCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): FirCallableMemberDeclaration {
@@ -735,8 +735,8 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformTypeParametersOwner(typeParametersOwner, data)
}
final override fun visitStatusOwner(statusOwner: FirStatusOwner, data: D): FirStatusOwner {
return transformStatusOwner(statusOwner, data)
final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): FirMemberDeclaration {
return transformMemberDeclaration(memberDeclaration, data)
}
final override fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): FirCallableMemberDeclaration {
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
import org.jetbrains.kotlin.fir.declarations.FirStatusOwner
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
@@ -182,7 +182,7 @@ abstract class FirVisitor<out R, in D> {
open fun visitTypeParametersOwner(typeParametersOwner: FirTypeParametersOwner, data: D): R = visitElement(typeParametersOwner, data)
open fun visitStatusOwner(statusOwner: FirStatusOwner, data: D): R = visitElement(statusOwner, data)
open fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): R = visitElement(memberDeclaration, data)
open fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): R = visitElement(callableMemberDeclaration, data)
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
import org.jetbrains.kotlin.fir.declarations.FirStatusOwner
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
@@ -222,8 +222,8 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(typeParametersOwner)
}
open fun visitStatusOwner(statusOwner: FirStatusOwner) {
visitElement(statusOwner)
open fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) {
visitElement(memberDeclaration)
}
open fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) {
@@ -734,8 +734,8 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitTypeParametersOwner(typeParametersOwner)
}
final override fun visitStatusOwner(statusOwner: FirStatusOwner, data: Nothing?) {
visitStatusOwner(statusOwner)
final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: Nothing?) {
visitMemberDeclaration(memberDeclaration)
}
final override fun visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: Nothing?) {
@@ -217,8 +217,8 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) {
callableDeclaration.annotations.renderAnnotations()
if (callableDeclaration is FirStatusOwner) {
visitStatusOwner(callableDeclaration)
if (callableDeclaration is FirMemberDeclaration) {
visitMemberDeclaration(callableDeclaration)
} else {
visitTypedDeclaration(callableDeclaration)
}
@@ -273,7 +273,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
return itself + "[${effectiveVisibility.name}]"
}
private fun FirStatusOwner.modalityAsString(): String {
private fun FirMemberDeclaration.modalityAsString(): String {
return modality?.name?.toLowerCaseAsciiOnly() ?: run {
if (this is FirCallableMemberDeclaration && this.isOverride) {
"open?"
@@ -303,86 +303,86 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
typeParameterRef.symbol.fir.accept(this)
}
override fun visitStatusOwner(statusOwner: FirStatusOwner) {
if (statusOwner !is FirProperty || !statusOwner.isLocal) {
override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) {
if (memberDeclaration !is FirProperty || !memberDeclaration.isLocal) {
// we can't access session.effectiveVisibilityResolver from here!
// print(memberDeclaration.visibility.asString(memberDeclaration.getEffectiveVisibility(...)) + " ")
print(statusOwner.visibility.asString() + " ")
print(statusOwner.modalityAsString() + " ")
print(memberDeclaration.visibility.asString() + " ")
print(memberDeclaration.modalityAsString() + " ")
}
if (statusOwner.isExpect) {
if (memberDeclaration.isExpect) {
print("expect ")
}
if (statusOwner.isActual) {
if (memberDeclaration.isActual) {
print("actual ")
}
if (statusOwner.isExternal) {
if (memberDeclaration.isExternal) {
print("external ")
}
if (statusOwner.isOverride) {
if (memberDeclaration.isOverride) {
print("override ")
}
if (statusOwner.isStatic) {
if (memberDeclaration.isStatic) {
print("static ")
}
if (statusOwner.isInner) {
if (memberDeclaration.isInner) {
print("inner ")
}
// `companion/data/fun` modifiers are only valid for FirRegularClass, but we render them to make sure they are not
// incorrectly loaded for other declarations during deserialization.
if (statusOwner.status.isCompanion) {
if (memberDeclaration.status.isCompanion) {
print("companion ")
}
if (statusOwner.status.isData) {
if (memberDeclaration.status.isData) {
print("data ")
}
// All Java interfaces are considered `fun` (functional interfaces) for resolution purposes
// (see JavaSymbolProvider.createFirJavaClass). Don't render `fun` for Java interfaces; it's not a modifier in Java.
val isJavaInterface =
statusOwner is FirRegularClass && statusOwner.classKind == ClassKind.INTERFACE && statusOwner.isJava
if (statusOwner.status.isFun && !isJavaInterface) {
memberDeclaration is FirRegularClass && memberDeclaration.classKind == ClassKind.INTERFACE && memberDeclaration.isJava
if (memberDeclaration.status.isFun && !isJavaInterface) {
print("fun ")
}
if (statusOwner.isInline) {
if (memberDeclaration.isInline) {
print("inline ")
}
if (statusOwner.isOperator) {
if (memberDeclaration.isOperator) {
print("operator ")
}
if (statusOwner.isInfix) {
if (memberDeclaration.isInfix) {
print("infix ")
}
if (statusOwner.isTailRec) {
if (memberDeclaration.isTailRec) {
print("tailrec ")
}
if (statusOwner.isSuspend) {
if (memberDeclaration.isSuspend) {
print("suspend ")
}
if (statusOwner.isConst) {
if (memberDeclaration.isConst) {
print("const ")
}
if (statusOwner.isLateInit) {
if (memberDeclaration.isLateInit) {
print("lateinit ")
}
visitDeclaration(statusOwner as FirDeclaration)
when (statusOwner) {
visitDeclaration(memberDeclaration as FirDeclaration)
when (memberDeclaration) {
is FirClassLikeDeclaration -> {
if (statusOwner is FirRegularClass) {
print(" " + statusOwner.name)
if (memberDeclaration is FirRegularClass) {
print(" " + memberDeclaration.name)
}
if (statusOwner is FirTypeAlias) {
print(" " + statusOwner.name)
if (memberDeclaration is FirTypeAlias) {
print(" " + memberDeclaration.name)
}
statusOwner.typeParameters.renderTypeParameters()
memberDeclaration.typeParameters.renderTypeParameters()
}
is FirCallableDeclaration -> {
// Name is handled by visitCallableDeclaration
if (statusOwner.typeParameters.isNotEmpty()) {
if (memberDeclaration.typeParameters.isNotEmpty()) {
print(" ")
statusOwner.typeParameters.renderTypeParameters()
memberDeclaration.typeParameters.renderTypeParameters()
}
}
}
@@ -471,7 +471,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
override fun visitRegularClass(regularClass: FirRegularClass) {
regularClass.annotations.renderAnnotations()
visitStatusOwner(regularClass)
visitMemberDeclaration(regularClass)
renderSupertypes(regularClass)
regularClass.declarations.renderDeclarations()
}
@@ -648,7 +648,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
override fun visitTypeAlias(typeAlias: FirTypeAlias) {
typeAlias.annotations.renderAnnotations()
visitStatusOwner(typeAlias)
visitMemberDeclaration(typeAlias)
print(" = ")
typeAlias.expandedTypeRef.accept(this)
println()
@@ -11,10 +11,10 @@ import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.types.FirTypeRefComparator
import org.jetbrains.kotlin.name.Name
object FirMemberDeclarationComparator : Comparator<FirStatusOwner> {
object FirMemberDeclarationComparator : Comparator<FirMemberDeclaration> {
// Comparing different kinds of callable members by assigning distinct priorities to those members.
object TypeAndNameComparator : Comparator<FirStatusOwner> {
private val FirStatusOwner.priority: Int
object TypeAndNameComparator : Comparator<FirMemberDeclaration> {
private val FirMemberDeclaration.priority: Int
get() = when (this) {
is FirEnumEntry -> 7
is FirConstructor -> 6
@@ -27,7 +27,7 @@ object FirMemberDeclarationComparator : Comparator<FirStatusOwner> {
is FirValueParameter -> 0
}
private val FirStatusOwner.name: Name
private val FirMemberDeclaration.name: Name
get() = when (this) {
is FirCallableMemberDeclaration ->
this.symbol.callableId.callableName
@@ -37,7 +37,7 @@ object FirMemberDeclarationComparator : Comparator<FirStatusOwner> {
this.name
}
override fun compare(a: FirStatusOwner, b: FirStatusOwner): Int {
override fun compare(a: FirMemberDeclaration, b: FirMemberDeclaration): Int {
val priorityDiff = a.priority - b.priority
if (priorityDiff != 0) {
return priorityDiff
@@ -54,7 +54,7 @@ object FirMemberDeclarationComparator : Comparator<FirStatusOwner> {
}
}
override fun compare(a: FirStatusOwner, b: FirStatusOwner): Int {
override fun compare(a: FirMemberDeclaration, b: FirMemberDeclaration): Int {
if (a is FirCallableMemberDeclaration && b is FirCallableMemberDeclaration) {
return FirCallableMemberDeclarationComparator.compare(a, b)
}
@@ -10,40 +10,40 @@ import org.jetbrains.kotlin.fir.FirRenderer
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.render
inline val FirStatusOwner.modality: Modality? get() = status.modality
inline val FirStatusOwner.isAbstract: Boolean get() = status.modality == Modality.ABSTRACT
inline val FirStatusOwner.isOpen: Boolean get() = status.modality == Modality.OPEN
inline val FirStatusOwner.isFinal: Boolean
inline val FirMemberDeclaration.modality: Modality? get() = status.modality
inline val FirMemberDeclaration.isAbstract: Boolean get() = status.modality == Modality.ABSTRACT
inline val FirMemberDeclaration.isOpen: Boolean get() = status.modality == Modality.OPEN
inline val FirMemberDeclaration.isFinal: Boolean
get() {
// member with unspecified modality is final
val modality = status.modality ?: return true
return modality == Modality.FINAL
}
inline val FirStatusOwner.visibility: Visibility get() = status.visibility
inline val FirStatusOwner.effectiveVisibility: EffectiveVisibility
inline val FirMemberDeclaration.visibility: Visibility get() = status.visibility
inline val FirMemberDeclaration.effectiveVisibility: EffectiveVisibility
get() = (status as? FirResolvedDeclarationStatus)?.effectiveVisibility
?: error("Effective visibility for ${render(FirRenderer.RenderMode.NoBodies)} must be resolved")
inline val FirStatusOwner.allowsToHaveFakeOverride: Boolean
inline val FirMemberDeclaration.allowsToHaveFakeOverride: Boolean
get() = !Visibilities.isPrivate(visibility) && visibility != Visibilities.InvisibleFake
inline val FirStatusOwner.isActual: Boolean get() = status.isActual
inline val FirStatusOwner.isExpect: Boolean get() = status.isExpect
inline val FirStatusOwner.isInner: Boolean get() = status.isInner
inline val FirStatusOwner.isStatic: Boolean get() = status.isStatic
inline val FirStatusOwner.isOverride: Boolean get() = status.isOverride
inline val FirStatusOwner.isOperator: Boolean get() = status.isOperator
inline val FirStatusOwner.isInfix: Boolean get() = status.isInfix
inline val FirStatusOwner.isInline: Boolean get() = status.isInline
inline val FirStatusOwner.isTailRec: Boolean get() = status.isTailRec
inline val FirStatusOwner.isExternal: Boolean get() = status.isExternal
inline val FirStatusOwner.isSuspend: Boolean get() = status.isSuspend
inline val FirStatusOwner.isConst: Boolean get() = status.isConst
inline val FirStatusOwner.isLateInit: Boolean get() = status.isLateInit
inline val FirStatusOwner.isFromSealedClass: Boolean get() = status.isFromSealedClass
inline val FirStatusOwner.isFromEnumClass: Boolean get() = status.isFromEnumClass
inline val FirStatusOwner.isFun: Boolean get() = status.isFun
inline val FirMemberDeclaration.isActual: Boolean get() = status.isActual
inline val FirMemberDeclaration.isExpect: Boolean get() = status.isExpect
inline val FirMemberDeclaration.isInner: Boolean get() = status.isInner
inline val FirMemberDeclaration.isStatic: Boolean get() = status.isStatic
inline val FirMemberDeclaration.isOverride: Boolean get() = status.isOverride
inline val FirMemberDeclaration.isOperator: Boolean get() = status.isOperator
inline val FirMemberDeclaration.isInfix: Boolean get() = status.isInfix
inline val FirMemberDeclaration.isInline: Boolean get() = status.isInline
inline val FirMemberDeclaration.isTailRec: Boolean get() = status.isTailRec
inline val FirMemberDeclaration.isExternal: Boolean get() = status.isExternal
inline val FirMemberDeclaration.isSuspend: Boolean get() = status.isSuspend
inline val FirMemberDeclaration.isConst: Boolean get() = status.isConst
inline val FirMemberDeclaration.isLateInit: Boolean get() = status.isLateInit
inline val FirMemberDeclaration.isFromSealedClass: Boolean get() = status.isFromSealedClass
inline val FirMemberDeclaration.isFromEnumClass: Boolean get() = status.isFromEnumClass
inline val FirMemberDeclaration.isFun: Boolean get() = status.isFun
inline val FirClassLikeDeclaration.isLocal: Boolean get() = symbol.classId.isLocal
@@ -35,7 +35,7 @@ var <T> T.danglingTypeConstraints: List<DanglingTypeConstraint>?
// ----------------------------------- Utils -----------------------------------
val FirStatusOwner.containerSource: SourceElement?
val FirMemberDeclaration.containerSource: SourceElement?
get() = when (this) {
is FirCallableMemberDeclaration -> containerSource
is FirRegularClass -> sourceElement
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirStatusOwner
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.CallableId
@@ -18,7 +18,7 @@ abstract class FirCallableSymbol<D : FirCallableDeclaration> : FirBasedSymbol<D>
override fun toString(): String = "${this::class.simpleName} $callableId"
}
val FirCallableSymbol<*>.isStatic: Boolean get() = (fir as? FirStatusOwner)?.status?.isStatic == true
val FirCallableSymbol<*>.isStatic: Boolean get() = (fir as? FirMemberDeclaration)?.status?.isStatic == true
val FirCallableSymbol<*>.isExtension: Boolean
get() = when (fir) {
@@ -35,8 +35,8 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val typeParameter = element("TypeParameter", Declaration, typeParameterRef, annotatedDeclaration)
val typeParameterRefsOwner = sealedElement("TypeParameterRefsOwner", Declaration)
val typeParametersOwner = sealedElement("TypeParametersOwner", Declaration, typeParameterRefsOwner)
val statusOwner = sealedElement("StatusOwner", Declaration, typeParameterRefsOwner)
val callableMemberDeclaration = sealedElement("CallableMemberDeclaration", Declaration, callableDeclaration, statusOwner)
val memberDeclaration = sealedElement("MemberDeclaration", Declaration, typeParameterRefsOwner)
val callableMemberDeclaration = sealedElement("CallableMemberDeclaration", Declaration, callableDeclaration, memberDeclaration)
val variable = sealedElement("Variable", Declaration, callableMemberDeclaration, statement)
val valueParameter = element("ValueParameter", Declaration, variable, controlFlowGraphOwner)
@@ -46,8 +46,8 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val classLikeDeclaration = sealedElement("ClassLikeDeclaration", Declaration, annotatedDeclaration, statement)
val klass = sealedElement("Class", Declaration, classLikeDeclaration, statement, typeParameterRefsOwner)
val regularClass = element("RegularClass", Declaration, klass, statusOwner, controlFlowGraphOwner)
val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration, statusOwner, typeParametersOwner)
val regularClass = element("RegularClass", Declaration, klass, memberDeclaration, controlFlowGraphOwner)
val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration, memberDeclaration, typeParametersOwner)
val function = sealedElement("Function", Declaration, callableMemberDeclaration, targetElement, controlFlowGraphOwner, statement)
@@ -104,7 +104,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+typeParameters
}
statusOwner.configure {
memberDeclaration.configure {
+status.withTransform()
}