FIR: introduce status & status transformer (no override resolve)
So #KT-24021 Fixed
This commit is contained in:
@@ -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)
|
||||
}
|
||||
+6
-11
@@ -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)
|
||||
}
|
||||
}
|
||||
+15
@@ -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
|
||||
}
|
||||
+8
-5
@@ -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)
|
||||
|
||||
+14
-4
@@ -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
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -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>()
|
||||
|
||||
|
||||
+128
@@ -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)
|
||||
}
|
||||
}
|
||||
+15
-7
@@ -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
|
||||
}
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
+16
-8
@@ -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 {
|
||||
|
||||
+12
-6
@@ -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)
|
||||
|
||||
+3
-3
@@ -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)
|
||||
+7
-1
@@ -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)
|
||||
}
|
||||
|
||||
+34
@@ -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!!
|
||||
}
|
||||
+4
-10
@@ -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)
|
||||
}
|
||||
}
|
||||
+16
@@ -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)
|
||||
}
|
||||
|
||||
+16
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user