[FIR] do not use FirValueParameter for function type parameter
As it is a different abstraction, introduced FirFunctionTypeParameter instead Also, fix syntax checkers for function type parameter ^KT-55035 fixed
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
abstract class FirFunctionTypeParameter : FirPureAbstractElement(), FirElement {
|
||||
abstract override val source: KtSourceElement?
|
||||
abstract val name: Name?
|
||||
abstract val returnTypeRef: FirTypeRef
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitFunctionTypeParameter(this, data)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
||||
transformer.transformFunctionTypeParameter(this, data) as E
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.
|
||||
*/
|
||||
|
||||
@file:Suppress("DuplicatedCode")
|
||||
|
||||
package org.jetbrains.kotlin.fir.builder
|
||||
|
||||
import kotlin.contracts.*
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirFunctionTypeParameter
|
||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||
import org.jetbrains.kotlin.fir.impl.FirFunctionTypeParameterImpl
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
@FirBuilderDsl
|
||||
class FirFunctionTypeParameterBuilder {
|
||||
var source: KtSourceElement? = null
|
||||
var name: Name? = null
|
||||
lateinit var returnTypeRef: FirTypeRef
|
||||
|
||||
fun build(): FirFunctionTypeParameter {
|
||||
return FirFunctionTypeParameterImpl(
|
||||
source,
|
||||
name,
|
||||
returnTypeRef,
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildFunctionTypeParameter(init: FirFunctionTypeParameterBuilder.() -> Unit): FirFunctionTypeParameter {
|
||||
contract {
|
||||
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return FirFunctionTypeParameterBuilder().apply(init).build()
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.
|
||||
*/
|
||||
|
||||
@file:Suppress("DuplicatedCode")
|
||||
|
||||
package org.jetbrains.kotlin.fir.impl
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirFunctionTypeParameter
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
internal class FirFunctionTypeParameterImpl(
|
||||
override val source: KtSourceElement?,
|
||||
override val name: Name?,
|
||||
override var returnTypeRef: FirTypeRef,
|
||||
) : FirFunctionTypeParameter() {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
returnTypeRef.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirFunctionTypeParameterImpl {
|
||||
returnTypeRef = returnTypeRef.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.types
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.FirFunctionTypeParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
@@ -21,7 +21,7 @@ abstract class FirFunctionTypeRef : FirTypeRefWithNullability() {
|
||||
abstract override val annotations: List<FirAnnotation>
|
||||
abstract override val isMarkedNullable: Boolean
|
||||
abstract val receiverTypeRef: FirTypeRef?
|
||||
abstract val valueParameters: List<FirValueParameter>
|
||||
abstract val parameters: List<FirFunctionTypeParameter>
|
||||
abstract val returnTypeRef: FirTypeRef
|
||||
abstract val isSuspend: Boolean
|
||||
abstract val contextReceiverTypeRefs: List<FirTypeRef>
|
||||
|
||||
+4
-4
@@ -9,9 +9,9 @@ package org.jetbrains.kotlin.fir.types.builder
|
||||
|
||||
import kotlin.contracts.*
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirFunctionTypeParameter
|
||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.types.FirFunctionTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -29,7 +29,7 @@ class FirFunctionTypeRefBuilder : FirAnnotationContainerBuilder {
|
||||
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||
var isMarkedNullable: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
||||
var receiverTypeRef: FirTypeRef? = null
|
||||
val valueParameters: MutableList<FirValueParameter> = mutableListOf()
|
||||
val parameters: MutableList<FirFunctionTypeParameter> = mutableListOf()
|
||||
lateinit var returnTypeRef: FirTypeRef
|
||||
var isSuspend: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
||||
val contextReceiverTypeRefs: MutableList<FirTypeRef> = mutableListOf()
|
||||
@@ -40,7 +40,7 @@ class FirFunctionTypeRefBuilder : FirAnnotationContainerBuilder {
|
||||
annotations,
|
||||
isMarkedNullable,
|
||||
receiverTypeRef,
|
||||
valueParameters,
|
||||
parameters,
|
||||
returnTypeRef,
|
||||
isSuspend,
|
||||
contextReceiverTypeRefs,
|
||||
@@ -67,7 +67,7 @@ inline fun buildFunctionTypeRefCopy(original: FirFunctionTypeRef, init: FirFunct
|
||||
copyBuilder.annotations.addAll(original.annotations)
|
||||
copyBuilder.isMarkedNullable = original.isMarkedNullable
|
||||
copyBuilder.receiverTypeRef = original.receiverTypeRef
|
||||
copyBuilder.valueParameters.addAll(original.valueParameters)
|
||||
copyBuilder.parameters.addAll(original.parameters)
|
||||
copyBuilder.returnTypeRef = original.returnTypeRef
|
||||
copyBuilder.isSuspend = original.isSuspend
|
||||
copyBuilder.contextReceiverTypeRefs.addAll(original.contextReceiverTypeRefs)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
package org.jetbrains.kotlin.fir.types.impl
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.FirFunctionTypeParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.types.FirFunctionTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -24,7 +24,7 @@ internal class FirFunctionTypeRefImpl(
|
||||
override val annotations: MutableList<FirAnnotation>,
|
||||
override val isMarkedNullable: Boolean,
|
||||
override var receiverTypeRef: FirTypeRef?,
|
||||
override val valueParameters: MutableList<FirValueParameter>,
|
||||
override val parameters: MutableList<FirFunctionTypeParameter>,
|
||||
override var returnTypeRef: FirTypeRef,
|
||||
override val isSuspend: Boolean,
|
||||
override val contextReceiverTypeRefs: MutableList<FirTypeRef>,
|
||||
@@ -32,7 +32,7 @@ internal class FirFunctionTypeRefImpl(
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
receiverTypeRef?.accept(visitor, data)
|
||||
valueParameters.forEach { it.accept(visitor, data) }
|
||||
parameters.forEach { it.accept(visitor, data) }
|
||||
returnTypeRef.accept(visitor, data)
|
||||
contextReceiverTypeRefs.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
@@ -40,7 +40,7 @@ internal class FirFunctionTypeRefImpl(
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirFunctionTypeRefImpl {
|
||||
transformAnnotations(transformer, data)
|
||||
receiverTypeRef = receiverTypeRef?.transform(transformer, data)
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
parameters.transformInplace(transformer, data)
|
||||
returnTypeRef = returnTypeRef.transform(transformer, data)
|
||||
contextReceiverTypeRefs.transformInplace(transformer, data)
|
||||
return this
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.fir.declarations.FirReceiverParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.FirFunctionTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.fir.declarations.FirReceiverParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.FirFunctionTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.fir.declarations.FirReceiverParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.FirFunctionTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
@@ -255,6 +256,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
||||
return transformElement(enumEntry, data)
|
||||
}
|
||||
|
||||
open fun transformFunctionTypeParameter(functionTypeParameter: FirFunctionTypeParameter, data: D): FirFunctionTypeParameter {
|
||||
return transformElement(functionTypeParameter, data)
|
||||
}
|
||||
|
||||
open fun transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): FirStatement {
|
||||
return transformElement(classLikeDeclaration, data)
|
||||
}
|
||||
@@ -799,6 +804,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
||||
return transformEnumEntry(enumEntry, data)
|
||||
}
|
||||
|
||||
final override fun visitFunctionTypeParameter(functionTypeParameter: FirFunctionTypeParameter, data: D): FirFunctionTypeParameter {
|
||||
return transformFunctionTypeParameter(functionTypeParameter, data)
|
||||
}
|
||||
|
||||
final override fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): FirStatement {
|
||||
return transformClassLikeDeclaration(classLikeDeclaration, data)
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.fir.declarations.FirReceiverParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.FirFunctionTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
@@ -202,6 +203,8 @@ abstract class FirVisitor<out R, in D> {
|
||||
|
||||
open fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): R = visitElement(enumEntry, data)
|
||||
|
||||
open fun visitFunctionTypeParameter(functionTypeParameter: FirFunctionTypeParameter, data: D): R = visitElement(functionTypeParameter, data)
|
||||
|
||||
open fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): R = visitElement(classLikeDeclaration, data)
|
||||
|
||||
open fun visitClass(klass: FirClass, data: D): R = visitElement(klass, data)
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.fir.declarations.FirReceiverParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.FirFunctionTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
@@ -254,6 +255,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitElement(enumEntry)
|
||||
}
|
||||
|
||||
open fun visitFunctionTypeParameter(functionTypeParameter: FirFunctionTypeParameter) {
|
||||
visitElement(functionTypeParameter)
|
||||
}
|
||||
|
||||
open fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration) {
|
||||
visitElement(classLikeDeclaration)
|
||||
}
|
||||
@@ -798,6 +803,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitEnumEntry(enumEntry)
|
||||
}
|
||||
|
||||
final override fun visitFunctionTypeParameter(functionTypeParameter: FirFunctionTypeParameter, data: Nothing?) {
|
||||
visitFunctionTypeParameter(functionTypeParameter)
|
||||
}
|
||||
|
||||
final override fun visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: Nothing?) {
|
||||
visitClassLikeDeclaration(classLikeDeclaration)
|
||||
}
|
||||
|
||||
@@ -707,7 +707,20 @@ class FirRenderer(
|
||||
it.accept(this)
|
||||
print(".")
|
||||
}
|
||||
valueParameterRenderer.renderParameters(functionTypeRef.valueParameters)
|
||||
|
||||
printer.print("(")
|
||||
for ((index, parameter) in functionTypeRef.parameters.withIndex()) {
|
||||
if (index > 0) {
|
||||
printer.print(", ")
|
||||
}
|
||||
parameter.name?.let { name ->
|
||||
printer.print(name.asString())
|
||||
printer.print(": ")
|
||||
}
|
||||
parameter.returnTypeRef.accept(visitor)
|
||||
}
|
||||
printer.print(")")
|
||||
|
||||
print(" -> ")
|
||||
functionTypeRef.returnTypeRef.accept(this)
|
||||
print(" )")
|
||||
|
||||
@@ -77,9 +77,9 @@ val FirTypeRef.isMarkedNullable: Boolean?
|
||||
|
||||
val FirFunctionTypeRef.parametersCount: Int
|
||||
get() = if (receiverTypeRef != null)
|
||||
valueParameters.size + contextReceiverTypeRefs.size + 1
|
||||
parameters.size + contextReceiverTypeRefs.size + 1
|
||||
else
|
||||
valueParameters.size + contextReceiverTypeRefs.size
|
||||
parameters.size + contextReceiverTypeRefs.size
|
||||
|
||||
val EXTENSION_FUNCTION_ANNOTATION = ClassId.fromString("kotlin/ExtensionFunctionType")
|
||||
val INTRINSIC_CONST_EVALUATION_ANNOTATION = ClassId.fromString("kotlin/internal/IntrinsicConstEvaluation")
|
||||
|
||||
+2
@@ -45,6 +45,8 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val field by element(Declaration, variable, controlFlowGraphOwner)
|
||||
val enumEntry by element(Declaration, variable)
|
||||
|
||||
val functionTypeParameter by element(Other, baseFirElement)
|
||||
|
||||
val classLikeDeclaration by sealedElement(Declaration, memberDeclaration, statement)
|
||||
val klass by sealedElement("Class", Declaration, classLikeDeclaration, statement, typeParameterRefsOwner)
|
||||
val regularClass by element(Declaration, klass, controlFlowGraphOwner)
|
||||
|
||||
+7
-1
@@ -411,6 +411,12 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
needTransformOtherChildren()
|
||||
}
|
||||
|
||||
|
||||
functionTypeParameter.configure {
|
||||
+field("name", nameType, nullable = true)
|
||||
+field("returnTypeRef", typeRef)
|
||||
}
|
||||
|
||||
errorProperty.configure {
|
||||
+symbol("FirErrorPropertySymbol")
|
||||
}
|
||||
@@ -640,7 +646,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
|
||||
functionTypeRef.configure {
|
||||
+field("receiverTypeRef", typeRef, nullable = true)
|
||||
+valueParameters
|
||||
+fieldList("parameters", functionTypeParameter)
|
||||
+returnTypeRef
|
||||
+booleanField("isSuspend")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user