FIR: introduce status & status transformer (no override resolve)

So #KT-24021 Fixed
This commit is contained in:
Mikhail Glukhikh
2018-04-25 21:03:11 +03:00
parent 65d89a61bf
commit 914620fd1f
86 changed files with 1080 additions and 346 deletions
@@ -124,14 +124,6 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
}
}
private fun FirMemberPlatformStatus.asString(): String {
return when (this) {
FirMemberPlatformStatus.DEFAULT -> ""
FirMemberPlatformStatus.EXPECT -> "expect "
FirMemberPlatformStatus.ACTUAL -> "actual "
}
}
override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) {
memberDeclaration.annotations.renderAnnotations()
if (memberDeclaration.typeParameters.isNotEmpty()) {
@@ -140,7 +132,12 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
print("> ")
}
print(memberDeclaration.visibility.asString() + " " + memberDeclaration.modalityAsString() + " ")
print(memberDeclaration.platformStatus.asString())
if (memberDeclaration.isExpect) {
print("expect ")
}
if (memberDeclaration.isActual) {
print("actual ")
}
if (memberDeclaration is FirCallableMember && memberDeclaration.isOverride) {
print("override ")
}
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
// Good name needed (something with receiver, type parameters, return type, and name)
interface FirCallableMember : @VisitedSupertype FirDeclaration, FirMemberDeclaration, FirTypedDeclaration {
val isOverride: Boolean
val isOverride: Boolean get() = status.isOverride
val receiverType: FirType?
@@ -21,13 +21,13 @@ interface FirClass : FirDeclarationContainer, FirMemberDeclaration, FirSymbolOwn
val classKind: ClassKind
val isInner: Boolean
val isInner: Boolean get() = status.isInner
val isCompanion: Boolean
val isCompanion: Boolean get() = status.isCompanion
val isData: Boolean
val isData: Boolean get() = status.isData
val isInline: Boolean
val isInline: Boolean get() = status.isInline
override val symbol: FirClassSymbol
@@ -0,0 +1,52 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.declarations
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.BaseTransformedType
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType
interface FirDeclarationStatus : FirElement {
val visibility: Visibility
val modality: Modality?
val isExpect: Boolean
val isActual: Boolean
val isOverride: Boolean
val isOperator: Boolean
val isInfix: Boolean
val isInline: Boolean
val isTailRec: Boolean
val isExternal: Boolean
val isConst: Boolean
val isLateInit: Boolean
val isInner: Boolean
val isCompanion: Boolean
val isData: Boolean
override val psi: PsiElement?
get() = null
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitDeclarationStatus(this, data)
}
@@ -11,15 +11,15 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirMemberDeclaration : FirTypeParameterContainer, FirNamedDeclaration, FirAnnotationContainer {
val visibility: Visibility
val status: FirDeclarationStatus
val modality: Modality?
val visibility: Visibility get() = status.visibility
val platformStatus: FirMemberPlatformStatus
val modality: Modality? get() = status.modality
val isExpect: Boolean get() = platformStatus == FirMemberPlatformStatus.EXPECT
val isExpect: Boolean get() = status.isExpect
val isActual: Boolean get() = platformStatus == FirMemberPlatformStatus.ACTUAL
val isActual: Boolean get() = status.isActual
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitMemberDeclaration(this, data)
@@ -29,12 +29,7 @@ interface FirMemberDeclaration : FirTypeParameterContainer, FirNamedDeclaration,
for (typeParameter in typeParameters) {
typeParameter.accept(visitor, data)
}
status.accept(visitor, data)
super.acceptChildren(visitor, data)
}
}
enum class FirMemberPlatformStatus {
DEFAULT,
EXPECT,
ACTUAL
}
@@ -11,15 +11,15 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
@BaseTransformedType
interface FirNamedFunction : @VisitedSupertype FirFunction, FirCallableMember {
val isOperator: Boolean
val isOperator: Boolean get() = status.isOperator
val isInfix: Boolean
val isInfix: Boolean get() = status.isInfix
val isInline: Boolean
val isInline: Boolean get() = status.isInline
val isTailRec: Boolean
val isTailRec: Boolean get() = status.isTailRec
val isExternal: Boolean
val isExternal: Boolean get() = status.isExternal
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitNamedFunction(this, data)
@@ -14,9 +14,9 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
// May be should not inherit FirVariable
@BaseTransformedType
interface FirProperty : @VisitedSupertype FirDeclaration, FirCallableMember, FirVariable {
val isConst: Boolean
val isConst: Boolean get() = status.isConst
val isLateInit: Boolean
val isLateInit: Boolean get() = status.isLateInit
// Should it be nullable or have some default?
val getter: FirPropertyAccessor
@@ -14,7 +14,9 @@ interface FirPropertyAccessor : @VisitedSupertype FirFunction, FirTypedDeclarati
val isSetter: Boolean get() = !isGetter
val visibility: Visibility
val status: FirDeclarationStatus
val visibility: Visibility get() = status.visibility
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitPropertyAccessor(this, data)
@@ -25,5 +27,6 @@ interface FirPropertyAccessor : @VisitedSupertype FirFunction, FirTypedDeclarati
parameter.accept(visitor, data)
}
body?.accept(visitor, data)
status.accept(visitor, data)
}
}
@@ -0,0 +1,15 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
interface FirResolvedDeclarationStatus : FirDeclarationStatus {
override val visibility: Visibility
override val modality: Modality
}
@@ -11,8 +11,6 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirCallableMember
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -24,11 +22,16 @@ abstract class FirAbstractCallableMember(
name: Name,
visibility: Visibility,
modality: Modality?,
platformStatus: FirMemberPlatformStatus,
final override val isOverride: Boolean,
isExpect: Boolean,
isActual: Boolean,
isOverride: Boolean,
final override var receiverType: FirType?,
final override var returnType: FirType
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality, platformStatus), FirCallableMember {
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality, isExpect, isActual), FirCallableMember {
init {
status.isOverride = isOverride
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
receiverType = receiverType?.transformSingle(transformer, data)
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.transformSingle
@@ -22,14 +21,25 @@ abstract class FirAbstractMemberDeclaration(
session: FirSession,
psi: PsiElement?,
name: Name,
final override val visibility: Visibility,
override val modality: Modality?,
override val platformStatus: FirMemberPlatformStatus
visibility: Visibility,
modality: Modality?,
isExpect: Boolean,
isActual: Boolean
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirMemberDeclaration {
final override val typeParameters = mutableListOf<FirTypeParameter>()
final override var status = FirDeclarationStatusImpl(
session,
visibility,
modality
).apply {
this.isExpect = isExpect
this.isActual = isActual
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
typeParameters.transformInplace(transformer, data)
status = status.transformSingle(transformer, data)
return super<FirAbstractNamedAnnotatedDeclaration>.transformChildren(transformer, data)
}
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.types.FirType
@@ -26,21 +25,23 @@ open class FirClassImpl(
name: Name,
visibility: Visibility,
modality: Modality?,
platformStatus: FirMemberPlatformStatus,
isExpect: Boolean,
isActual: Boolean,
final override val classKind: ClassKind,
final override val isInner: Boolean,
final override val isCompanion: Boolean,
final override val isData: Boolean,
override val isInline: Boolean
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality, platformStatus), FirClass {
isInner: Boolean,
isCompanion: Boolean,
isData: Boolean,
isInline: Boolean
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality, isExpect, isActual), FirClass {
init {
symbol.bind(this)
status.isInner = isInner
status.isCompanion = isCompanion
status.isData = isData
status.isInline = isInline
}
override val modality: Modality
get() = super.modality ?: if (classKind == ClassKind.INTERFACE) Modality.ABSTRACT else Modality.FINAL
override val superTypes = mutableListOf<FirType>()
override val declarations = mutableListOf<FirDeclaration>()
@@ -48,8 +49,10 @@ open class FirClassImpl(
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirClass {
superTypes.transformInplace(transformer, data)
declarations.transformInplace(transformer, data)
val result = super<FirAbstractMemberDeclaration>.transformChildren(transformer, data) as FirClass
return super<FirAbstractMemberDeclaration>.transformChildren(transformer, data) as FirClass
// Transform declarations in last turn
declarations.transformInplace(transformer, data)
return result
}
}
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirBody
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
@@ -25,13 +24,14 @@ open class FirConstructorImpl(
session: FirSession,
psi: PsiElement?,
visibility: Visibility,
platformStatus: FirMemberPlatformStatus,
isExpect: Boolean,
isActual: Boolean,
delegatedSelfType: FirType,
final override var delegatedConstructor: FirDelegatedConstructorCall?,
override val body: FirBody?
) : FirAbstractCallableMember(
session, psi, NAME, visibility, Modality.FINAL,
platformStatus, false, null, delegatedSelfType
isExpect, isActual, isOverride = false, receiverType = null, returnType = delegatedSelfType
), FirConstructor {
override val valueParameters = mutableListOf<FirValueParameter>()
@@ -0,0 +1,128 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl.Modifier.*
open class FirDeclarationStatusImpl(
final override val session: FirSession,
override val visibility: Visibility,
override val modality: Modality?
) : FirDeclarationStatus {
protected var flags: Int = 0
private operator fun get(modifier: Modifier): Boolean = (flags and modifier.mask) != 0
private operator fun set(modifier: Modifier, value: Boolean) {
flags = if (value) {
flags or modifier.mask
} else {
flags and modifier.mask.inv()
}
}
override var isExpect: Boolean
get() = this[EXPECT]
set(value) {
this[EXPECT] = value
}
override var isActual: Boolean
get() = this[ACTUAL]
set(value) {
this[ACTUAL] = value
}
override var isOverride: Boolean
get() = this[OVERRIDE]
set(value) {
this[OVERRIDE] = value
}
override var isOperator: Boolean
get() = this[OPERATOR]
set(value) {
this[OPERATOR] = value
}
override var isInfix: Boolean
get() = this[INFIX]
set(value) {
this[INFIX] = value
}
override var isInline: Boolean
get() = this[INLINE]
set(value) {
this[INLINE] = value
}
override var isTailRec: Boolean
get() = this[TAILREC]
set(value) {
this[TAILREC] = value
}
override var isExternal: Boolean
get() = this[EXTERNAL]
set(value) {
this[EXTERNAL] = value
}
override var isConst: Boolean
get() = this[CONST]
set(value) {
this[CONST] = value
}
override var isLateInit: Boolean
get() = this[LATEINIT]
set(value) {
this[LATEINIT] = value
}
override var isInner: Boolean
get() = this[INNER]
set(value) {
this[INNER] = value
}
override var isCompanion: Boolean
get() = this[COMPANION]
set(value) {
this[COMPANION] = value
}
override var isData: Boolean
get() = this[DATA]
set(value) {
this[DATA] = value
}
private enum class Modifier(val mask: Int) {
EXPECT(0x1),
ACTUAL(0x2),
OVERRIDE(0x4),
OPERATOR(0x8),
INFIX(0x10),
INLINE(0x20),
TAILREC(0x40),
EXTERNAL(0x80),
CONST(0x100),
LATEINIT(0x200),
INNER(0x400),
COMPANION(0x800),
DATA(0x1000)
}
fun resolved(visibility: Visibility, modality: Modality): FirDeclarationStatus {
return FirResolvedDeclarationStatusImpl(session, visibility, modality, flags)
}
}
@@ -6,7 +6,9 @@
package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
@@ -22,10 +24,12 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
abstract class FirDefaultPropertyAccessor(
final override val session: FirSession,
final override val psi: PsiElement?,
final override val isGetter: Boolean
final override val isGetter: Boolean,
visibility: Visibility
) : FirPropertyAccessor {
final override val visibility =
Visibilities.UNKNOWN
override var status = FirDeclarationStatusImpl(
session, visibility, Modality.FINAL
)
final override val body: FirBody? =
null
@@ -37,14 +41,16 @@ abstract class FirDefaultPropertyAccessor(
class FirDefaultPropertyGetter(
session: FirSession,
psi: PsiElement?,
propertyType: FirType
) : FirDefaultPropertyAccessor(session, psi, isGetter = true) {
propertyType: FirType,
visibility: Visibility
) : FirDefaultPropertyAccessor(session, psi, isGetter = true, visibility = visibility) {
override val valueParameters: List<FirValueParameter> = emptyList()
override var returnType: FirType = propertyType
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
returnType = returnType.transformSingle(transformer, data)
status = status.transformSingle(transformer, data)
return this
}
@@ -53,8 +59,9 @@ class FirDefaultPropertyGetter(
class FirDefaultPropertySetter(
session: FirSession,
psi: PsiElement?,
propertyType: FirType
) : FirDefaultPropertyAccessor(session, psi, isGetter = false) {
propertyType: FirType,
visibility: Visibility
) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility) {
override val valueParameters = mutableListOf(FirDefaultSetterValueParameter(session, psi, propertyType))
override var returnType: FirType = FirImplicitUnitType(session, psi)
@@ -62,6 +69,7 @@ class FirDefaultPropertySetter(
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
valueParameters.transformInplace(transformer, data)
returnType = returnType.transformSingle(transformer, data)
status = status.transformSingle(transformer, data)
return this
}
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.name.Name
@@ -28,7 +27,8 @@ class FirEnumEntryImpl(
name,
visibility = Visibilities.UNKNOWN,
modality = Modality.FINAL,
platformStatus = FirMemberPlatformStatus.DEFAULT,
isExpect = false,
isActual = false,
classKind = ClassKind.ENUM_ENTRY,
isInner = false,
isCompanion = false,
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirBody
@@ -25,20 +24,29 @@ class FirMemberFunctionImpl(
name: Name,
visibility: Visibility,
modality: Modality?,
platformStatus: FirMemberPlatformStatus,
isExpect: Boolean,
isActual: Boolean,
isOverride: Boolean,
override val isOperator: Boolean,
override val isInfix: Boolean,
override val isInline: Boolean,
override val isTailRec: Boolean,
override val isExternal: Boolean,
isOperator: Boolean,
isInfix: Boolean,
isInline: Boolean,
isTailRec: Boolean,
isExternal: Boolean,
receiverType: FirType?,
returnType: FirType,
override val body: FirBody?
) : FirAbstractCallableMember(
session, psi, name, visibility, modality,
platformStatus, isOverride, receiverType, returnType
isExpect, isActual, isOverride, receiverType, returnType
), FirNamedFunction {
init {
status.isOperator = isOperator
status.isInfix = isInfix
status.isInline = isInline
status.isTailRec = isTailRec
status.isExternal = isExternal
}
override val valueParameters = mutableListOf<FirValueParameter>()
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -25,10 +24,11 @@ class FirMemberPropertyImpl(
name: Name,
visibility: Visibility,
modality: Modality?,
platformStatus: FirMemberPlatformStatus,
isExpect: Boolean,
isActual: Boolean,
isOverride: Boolean,
override val isConst: Boolean,
override val isLateInit: Boolean,
isConst: Boolean,
isLateInit: Boolean,
receiverType: FirType?,
returnType: FirType,
override val isVar: Boolean,
@@ -36,8 +36,14 @@ class FirMemberPropertyImpl(
override var getter: FirPropertyAccessor,
override var setter: FirPropertyAccessor,
override val delegate: FirExpression?
) : FirAbstractCallableMember(session, psi, name, visibility, modality, platformStatus, isOverride, receiverType, returnType),
FirProperty {
) : FirAbstractCallableMember(
session, psi, name, visibility, modality, isExpect, isActual, isOverride, receiverType, returnType
), FirProperty {
init {
status.isConst = isConst
status.isLateInit = isLateInit
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
getter = getter.transformSingle(transformer, data)
setter = setter.transformSingle(transformer, data)
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
import org.jetbrains.kotlin.fir.types.FirType
@@ -16,7 +15,8 @@ class FirPrimaryConstructorImpl(
session: FirSession,
psi: PsiElement?,
visibility: Visibility,
platformStatus: FirMemberPlatformStatus,
isExpect: Boolean,
isActual: Boolean,
delegatedSelfType: FirType,
delegatedConstructor: FirDelegatedConstructorCall?
) : FirConstructorImpl(session, psi, visibility, platformStatus, delegatedSelfType, delegatedConstructor, body = null)
) : FirConstructorImpl(session, psi, visibility, isExpect, isActual, delegatedSelfType, delegatedConstructor, body = null)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
@@ -19,12 +20,17 @@ class FirPropertyAccessorImpl(
session: FirSession,
psi: PsiElement?,
override val isGetter: Boolean,
override val visibility: Visibility,
visibility: Visibility,
override var returnType: FirType,
body: FirBody?
) : FirAbstractFunction(session, psi, body), FirPropertyAccessor {
override var status = FirDeclarationStatusImpl(
session, visibility, Modality.FINAL
)
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
returnType = returnType.transformSingle(transformer, data)
status = status.transformSingle(transformer, data)
return super<FirAbstractFunction>.transformChildren(transformer, data)
}
@@ -0,0 +1,34 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.declarations.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus
class FirResolvedDeclarationStatusImpl(
session: FirSession,
visibility: Visibility,
modality: Modality
) : FirDeclarationStatusImpl(session, visibility, modality), FirResolvedDeclarationStatus {
internal constructor(
session: FirSession,
visibility: Visibility,
modality: Modality,
flags: Int
) : this(session, visibility, modality) {
this.flags = flags
}
override val visibility: Visibility
get() = super.visibility
override val modality: Modality
get() = super.modality!!
}
@@ -10,10 +10,8 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.FirType
import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -25,22 +23,18 @@ class FirTypeAliasImpl(
override val symbol: FirTypeAliasSymbol,
name: Name,
visibility: Visibility,
platformStatus: FirMemberPlatformStatus,
isExpect: Boolean,
isActual: Boolean,
override var expandedType: FirType
) : FirAbstractMemberDeclaration(session, psi, name, visibility, Modality.FINAL, platformStatus), FirTypeAlias {
) : FirAbstractMemberDeclaration(session, psi, name, visibility, Modality.FINAL, isExpect, isActual), FirTypeAlias {
init {
symbol.bind(this)
}
override val modality: Modality
get() = super.modality ?: Modality.FINAL
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
annotations.transformInplace(transformer, data)
typeParameters.transformInplace(transformer, data)
expandedType = expandedType.transformSingle(transformer, data)
return this
return super<FirAbstractMemberDeclaration>.transformChildren(transformer, data)
}
}
@@ -90,6 +90,14 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformDeclaration(variable, data)
}
open fun transformDeclarationStatus(declarationStatus: FirDeclarationStatus, data: D): CompositeTransformResult<FirDeclarationStatus> {
return transformElement(declarationStatus, data)
}
open fun transformResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: D): CompositeTransformResult<FirDeclarationStatus> {
return transformDeclarationStatus(resolvedDeclarationStatus, data)
}
open fun transformImport(import: FirImport, data: D): CompositeTransformResult<FirImport> {
return transformElement(import, data)
}
@@ -198,6 +206,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformDeclaration(declaration, data)
}
final override fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus, data: D): CompositeTransformResult<FirElement> {
return transformDeclarationStatus(declarationStatus, data)
}
final override fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): CompositeTransformResult<FirElement> {
return transformDeclarationWithBody(declarationWithBody, data)
}
@@ -286,6 +298,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformVariable(variable, data)
}
final override fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: D): CompositeTransformResult<FirElement> {
return transformResolvedDeclarationStatus(resolvedDeclarationStatus, data)
}
final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult<FirElement> {
return transformAnonymousInitializer(anonymousInitializer, data)
}
@@ -90,6 +90,14 @@ abstract class FirVisitor<out R, in D> {
return visitDeclaration(variable, data)
}
open fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus, data: D): R {
return visitElement(declarationStatus, data)
}
open fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: D): R {
return visitDeclarationStatus(resolvedDeclarationStatus, data)
}
open fun visitImport(import: FirImport, data: D): R {
return visitElement(import, data)
}
@@ -90,6 +90,14 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitDeclaration(variable, null)
}
open fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus) {
visitElement(declarationStatus, null)
}
open fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus) {
visitDeclarationStatus(resolvedDeclarationStatus, null)
}
open fun visitImport(import: FirImport) {
visitElement(import, null)
}
@@ -198,6 +206,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitDeclaration(declaration)
}
final override fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus, data: Nothing?) {
visitDeclarationStatus(declarationStatus)
}
final override fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: Nothing?) {
visitDeclarationWithBody(declarationWithBody)
}
@@ -286,6 +298,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitVariable(variable)
}
final override fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: Nothing?) {
visitResolvedDeclarationStatus(resolvedDeclarationStatus)
}
final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: Nothing?) {
visitAnonymousInitializer(anonymousInitializer)
}