FIR: leave 'isSuspend' in functional & resolved type references only

This commit is contained in:
Mikhail Glukhikh
2020-04-20 16:22:12 +03:00
parent 96d8b0bea3
commit 29114fe7b5
27 changed files with 26 additions and 47 deletions
@@ -416,7 +416,9 @@ class Fir2IrDeclarationStorage(
val name = simpleFunction?.name
?: if (isLambda) Name.special("<anonymous>") else Name.special("<no name provided>")
val visibility = simpleFunction?.visibility ?: Visibilities.LOCAL
val isSuspend = if (isLambda) (function as FirAnonymousFunction).typeRef.isSuspend else simpleFunction?.isSuspend == true
val isSuspend =
if (isLambda) ((function as FirAnonymousFunction).typeRef as? FirResolvedTypeRef)?.isSuspend == true
else simpleFunction?.isSuspend == true
val created = function.convertWithOffsets { startOffset, endOffset ->
enterScope(descriptor)
val result = symbolTable.declareSimpleFunction(startOffset, endOffset, origin, descriptor) { symbol ->
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirComposedSuperTypeRef : FirPureAbstractElement(), FirTypeRef {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract override val isSuspend: Boolean
abstract val superTypeRefs: List<FirResolvedTypeRef>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitComposedSuperTypeRef(this, data)
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirDelegatedTypeRef : FirPureAbstractElement(), FirTypeRef {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract override val isSuspend: Boolean
abstract val delegate: FirExpression?
abstract val typeRef: FirTypeRef
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirDynamicTypeRef : FirPureAbstractElement(), FirTypeRefWithNullability {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract override val isSuspend: Boolean
abstract override val isMarkedNullable: Boolean
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDynamicTypeRef(this, data)
@@ -19,9 +19,9 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirErrorTypeRef : FirResolvedTypeRef(), FirDiagnosticHolder {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract override val isSuspend: Boolean
abstract override val type: ConeKotlinType
abstract override val delegatedTypeRef: FirTypeRef?
abstract override val isSuspend: Boolean
abstract override val diagnostic: ConeDiagnostic
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorTypeRef(this, data)
@@ -18,11 +18,11 @@ import org.jetbrains.kotlin.fir.visitors.*
interface FirFunctionTypeRef : FirTypeRefWithNullability {
override val source: FirSourceElement?
override val annotations: List<FirAnnotationCall>
override val isSuspend: Boolean
override val isMarkedNullable: Boolean
val receiverTypeRef: FirTypeRef?
val valueParameters: List<FirValueParameter>
val returnTypeRef: FirTypeRef
val isSuspend: Boolean
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitFunctionTypeRef(this, data)
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirImplicitTypeRef : FirPureAbstractElement(), FirTypeRef {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract override val isSuspend: Boolean
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitImplicitTypeRef(this, data)
@@ -18,9 +18,9 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirResolvedFunctionTypeRef : FirResolvedTypeRef(), FirFunctionTypeRef {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract override val isSuspend: Boolean
abstract override val type: ConeKotlinType
abstract override val delegatedTypeRef: FirTypeRef?
abstract override val isSuspend: Boolean
abstract override val isMarkedNullable: Boolean
abstract override val receiverTypeRef: FirTypeRef?
abstract override val valueParameters: List<FirValueParameter>
@@ -18,9 +18,9 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirResolvedTypeRef : FirPureAbstractElement(), FirTypeRef {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract override val isSuspend: Boolean
abstract val type: ConeKotlinType
abstract val delegatedTypeRef: FirTypeRef?
abstract val isSuspend: Boolean
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedTypeRef(this, data)
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.visitors.*
interface FirTypeRef : FirAnnotationContainer {
override val source: FirSourceElement?
override val annotations: List<FirAnnotationCall>
val isSuspend: Boolean
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitTypeRef(this, data)
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.visitors.*
interface FirTypeRefWithNullability : FirTypeRef {
override val source: FirSourceElement?
override val annotations: List<FirAnnotationCall>
override val isSuspend: Boolean
val isMarkedNullable: Boolean
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitTypeRefWithNullability(this, data)
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirUserTypeRef : FirPureAbstractElement(), FirTypeRefWithNullability {
abstract override val source: FirSourceElement?
abstract override val annotations: List<FirAnnotationCall>
abstract override val isSuspend: Boolean
abstract override val isMarkedNullable: Boolean
abstract val qualifier: List<FirQualifierPart>
@@ -26,21 +26,21 @@ import org.jetbrains.kotlin.fir.visitors.*
class FirFunctionTypeRefBuilder : FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
var isSuspend: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
var isMarkedNullable: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
var receiverTypeRef: FirTypeRef? = null
val valueParameters: MutableList<FirValueParameter> = mutableListOf()
lateinit var returnTypeRef: FirTypeRef
var isSuspend: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
override fun build(): FirFunctionTypeRef {
return FirFunctionTypeRefImpl(
source,
annotations,
isSuspend,
isMarkedNullable,
receiverTypeRef,
valueParameters,
returnTypeRef,
isSuspend,
)
}
@@ -26,8 +26,8 @@ import org.jetbrains.kotlin.fir.visitors.*
class FirResolvedFunctionTypeRefBuilder : FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
var isSuspend: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
lateinit var type: ConeKotlinType
var isSuspend: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
var isMarkedNullable: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
var receiverTypeRef: FirTypeRef? = null
val valueParameters: MutableList<FirValueParameter> = mutableListOf()
@@ -37,8 +37,8 @@ class FirResolvedFunctionTypeRefBuilder : FirAnnotationContainerBuilder {
return FirResolvedFunctionTypeRefImpl(
source,
annotations,
isSuspend,
type,
isSuspend,
isMarkedNullable,
receiverTypeRef,
valueParameters,
@@ -25,17 +25,17 @@ import org.jetbrains.kotlin.fir.visitors.*
class FirResolvedTypeRefBuilder : FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
var isSuspend: Boolean = false
lateinit var type: ConeKotlinType
var delegatedTypeRef: FirTypeRef? = null
var isSuspend: Boolean = false
override fun build(): FirResolvedTypeRef {
return FirResolvedTypeRefImpl(
source,
annotations,
isSuspend,
type,
delegatedTypeRef,
isSuspend,
)
}
@@ -21,8 +21,6 @@ internal class FirComposedSuperTypeRefImpl(
override val annotations: MutableList<FirAnnotationCall>,
override val superTypeRefs: MutableList<FirResolvedTypeRef>,
) : FirComposedSuperTypeRef() {
override val isSuspend: Boolean = false
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
superTypeRefs.forEach { it.accept(visitor, data) }
@@ -23,7 +23,6 @@ internal class FirDelegatedTypeRefImpl(
) : FirDelegatedTypeRef() {
override val source: FirSourceElement? get() = typeRef.source
override val annotations: List<FirAnnotationCall> get() = typeRef.annotations
override val isSuspend: Boolean = false
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
delegate?.accept(visitor, data)
@@ -20,8 +20,6 @@ internal class FirDynamicTypeRefImpl(
override val annotations: MutableList<FirAnnotationCall>,
override val isMarkedNullable: Boolean,
) : FirDynamicTypeRef() {
override val isSuspend: Boolean = false
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
}
@@ -24,9 +24,9 @@ internal class FirErrorTypeRefImpl(
override val diagnostic: ConeDiagnostic,
) : FirErrorTypeRef() {
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override val isSuspend: Boolean = false
override val type: ConeKotlinType = ConeClassErrorType(diagnostic.reason)
override val delegatedTypeRef: FirTypeRef? get() = null
override val isSuspend: Boolean = false
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
@@ -21,11 +21,11 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirFunctionTypeRefImpl(
override val source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>,
override val isSuspend: Boolean,
override val isMarkedNullable: Boolean,
override var receiverTypeRef: FirTypeRef?,
override val valueParameters: MutableList<FirValueParameter>,
override var returnTypeRef: FirTypeRef,
override val isSuspend: Boolean,
) : FirPureAbstractElement(), FirFunctionTypeRef {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
@@ -19,7 +19,6 @@ internal class FirImplicitTypeRefImpl(
override val source: FirSourceElement?,
) : FirImplicitTypeRef() {
override val annotations: List<FirAnnotationCall> get() = emptyList()
override val isSuspend: Boolean = false
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
}
@@ -21,8 +21,8 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirResolvedFunctionTypeRefImpl(
override val source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>,
override val isSuspend: Boolean,
override val type: ConeKotlinType,
override val isSuspend: Boolean,
override val isMarkedNullable: Boolean,
override var receiverTypeRef: FirTypeRef?,
override val valueParameters: MutableList<FirValueParameter>,
@@ -20,9 +20,9 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirResolvedTypeRefImpl(
override val source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>,
override val isSuspend: Boolean,
override val type: ConeKotlinType,
override var delegatedTypeRef: FirTypeRef?,
override val isSuspend: Boolean,
) : FirResolvedTypeRef() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
@@ -22,8 +22,7 @@ sealed class FirImplicitBuiltinTypeRef(
override val source: FirSourceElement?,
val id: ClassId,
typeArguments: Array<out ConeTypeProjection> = emptyArray(),
isNullable: Boolean = false,
override val isSuspend: Boolean = false
isNullable: Boolean = false
) : FirResolvedTypeRef() {
override val annotations: List<FirAnnotationCall>
get() = emptyList()
@@ -33,6 +32,9 @@ sealed class FirImplicitBuiltinTypeRef(
override val delegatedTypeRef: FirTypeRef?
get() = null
override val isSuspend: Boolean
get() = false
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
@@ -19,8 +19,7 @@ open class FirUserTypeRefImpl(
override val source: FirSourceElement?,
override val isMarkedNullable: Boolean,
override val qualifier: MutableList<FirQualifierPart>,
override val annotations: MutableList<FirAnnotationCall>,
override val isSuspend: Boolean = false
override val annotations: MutableList<FirAnnotationCall>
) : FirUserTypeRef(), FirAnnotationContainer {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
@@ -399,23 +399,12 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
useTypes(errorTypeRefImpl)
}
impl(dynamicTypeRef) {
defaultFalse("isSuspend")
}
impl(functionTypeRef) {
// Note that we intentionally do _not_ set default value (false) for `isSuspend`, since function type reference is the only
// place where type modifier `suspend` matters.
}
impl(functionTypeRef)
impl(implicitTypeRef) {
defaultEmptyList("annotations")
defaultFalse("isSuspend")
}
impl(composedSuperTypeRef) {
defaultFalse("isSuspend")
}
impl(composedSuperTypeRef)
impl(reference, "FirStubReference") {
default("source") {
@@ -466,7 +455,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
delegate = "typeRef"
}
}
defaultFalse("isSuspend")
}
noImpl(userTypeRef)
@@ -530,12 +530,12 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
typeRef.configure {
+annotations
+booleanField("isSuspend")
}
resolvedTypeRef.configure {
+field("type", coneKotlinTypeType)
+field("delegatedTypeRef", typeRef, nullable = true)
+booleanField("isSuspend")
}
delegatedTypeRef.configure {
@@ -555,6 +555,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("receiverTypeRef", typeRef, nullable = true)
+valueParameters
+returnTypeRef
+booleanField("isSuspend")
}
composedSuperTypeRef.configure {