[FIR] Use builder to create synthetic properties

This commit is contained in:
Mikhail Glukhikh
2020-02-10 12:32:27 +03:00
parent 9a80850700
commit d19d52292e
6 changed files with 61 additions and 34 deletions
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
class FirSyntheticProperty private constructor(
class FirSyntheticProperty(
override val session: FirSession,
override val returnTypeRef: FirTypeRef,
override val name: Name,
@@ -37,20 +37,6 @@ class FirSyntheticProperty private constructor(
symbol.bind(this)
}
constructor(
session: FirSession,
name: Name,
symbol: FirAccessorSymbol,
delegateGetter: FirSimpleFunction,
delegateSetter: FirSimpleFunction? = null
) : this(
session, delegateGetter.returnTypeRef, name, isVar = delegateSetter != null, symbol = symbol,
status = FirDeclarationStatusImpl(delegateGetter.visibility, delegateGetter.modality),
resolvePhase = delegateGetter.resolvePhase,
getter = FirSyntheticPropertyAccessor(delegateGetter, isGetter = true),
setter = delegateSetter?.let { FirSyntheticPropertyAccessor(it, isGetter = false) }
)
override val source: FirSourceElement?
get() = null
@@ -0,0 +1,33 @@
/*
* Copyright 2010-2020 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.synthetic
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.modality
import org.jetbrains.kotlin.fir.declarations.visibility
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
import org.jetbrains.kotlin.name.Name
class FirSyntheticPropertyBuilder {
lateinit var session: FirSession
lateinit var name: Name
lateinit var symbol: FirAccessorSymbol
lateinit var delegateGetter: FirSimpleFunction
var delegateSetter: FirSimpleFunction? = null
fun build(): FirSyntheticProperty = FirSyntheticProperty(
session, delegateGetter.returnTypeRef, name, isVar = delegateSetter != null, symbol = symbol,
status = FirDeclarationStatusImpl(delegateGetter.visibility, delegateGetter.modality),
resolvePhase = delegateGetter.resolvePhase,
getter = FirSyntheticPropertyAccessor(delegateGetter, isGetter = true),
setter = delegateSetter?.let { FirSyntheticPropertyAccessor(it, isGetter = false) }
)
}
fun buildSyntheticProperty(f: FirSyntheticPropertyBuilder.() -> Unit): FirSyntheticProperty =
FirSyntheticPropertyBuilder().apply { f() }.build()