FIR: constructor refactoring, now there are callable members
This commit is contained in:
@@ -5,23 +5,20 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.BaseTransformedType
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@BaseTransformedType
|
||||
interface FirConstructor : FirFunction, FirAnnotationContainer {
|
||||
interface FirConstructor : @VisitedSupertype FirFunction, FirCallableMember {
|
||||
val delegatedConstructor: FirDelegatedConstructorCall?
|
||||
|
||||
val visibility: Visibility
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitConstructor(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
super<FirCallableMember>.acceptChildren(visitor, data)
|
||||
delegatedConstructor?.accept(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(visitor, data)
|
||||
|
||||
+22
-5
@@ -6,26 +6,43 @@
|
||||
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
|
||||
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
|
||||
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
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
open class FirConstructorImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
final override val visibility: Visibility,
|
||||
visibility: Visibility,
|
||||
platformStatus: FirMemberPlatformStatus,
|
||||
delegatedSelfType: FirType,
|
||||
final override var delegatedConstructor: FirDelegatedConstructorCall?,
|
||||
body: FirBody?
|
||||
) : FirAbstractFunction(session, psi, body), FirConstructor {
|
||||
override val body: FirBody?
|
||||
) : FirAbstractCallableMember(
|
||||
session, psi, NAME, visibility, Modality.FINAL,
|
||||
platformStatus, false, null, delegatedSelfType
|
||||
), FirConstructor {
|
||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data)
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
delegatedConstructor?.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractFunction>.transformChildren(transformer, data)
|
||||
return super<FirAbstractCallableMember>.transformChildren(transformer, data)
|
||||
}
|
||||
|
||||
companion object {
|
||||
val NAME = Name.special("<init>")
|
||||
}
|
||||
}
|
||||
+5
-1
@@ -8,11 +8,15 @@ 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
|
||||
|
||||
class FirPrimaryConstructorImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
visibility: Visibility,
|
||||
platformStatus: FirMemberPlatformStatus,
|
||||
delegatedSelfType: FirType,
|
||||
delegatedConstructor: FirDelegatedConstructorCall?
|
||||
) : FirConstructorImpl(session, psi, visibility, delegatedConstructor, body = null)
|
||||
) : FirConstructorImpl(session, psi, visibility, platformStatus, delegatedSelfType, delegatedConstructor, body = null)
|
||||
Reference in New Issue
Block a user