FIR: leave 'isSuspend' in functional & resolved type references only
This commit is contained in:
+3
-1
@@ -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>
|
||||
|
||||
|
||||
+2
-2
@@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
+2
-2
@@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
-2
@@ -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) {
|
||||
}
|
||||
|
||||
+1
-1
@@ -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) }
|
||||
|
||||
+4
-2
@@ -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) {
|
||||
|
||||
+2
-14
@@ -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)
|
||||
|
||||
+2
-1
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user