[FIR] do not create FirParameter for catch parameter

use FirProperty instead

^KT-55034
This commit is contained in:
Ilya Kirillov
2022-11-18 16:38:15 +01:00
parent 9671e20f1f
commit c8e3103af9
24 changed files with 450 additions and 368 deletions
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.visitors.*
/*
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirCatch : FirPureAbstractElement(), FirElement {
abstract override val source: KtSourceElement?
abstract val parameter: FirValueParameter
abstract val parameter: FirProperty
abstract val block: FirBlock
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitCatch(this, data)
@@ -10,7 +10,7 @@ package org.jetbrains.kotlin.fir.expressions.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirCatch
import org.jetbrains.kotlin.fir.expressions.impl.FirCatchImpl
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.fir.visitors.*
@FirBuilderDsl
class FirCatchBuilder {
var source: KtSourceElement? = null
lateinit var parameter: FirValueParameter
lateinit var parameter: FirProperty
lateinit var block: FirBlock
fun build(): FirCatch {
@@ -8,7 +8,7 @@
package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirCatch
import org.jetbrains.kotlin.fir.visitors.*
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirCatchImpl(
override val source: KtSourceElement?,
override var parameter: FirValueParameter,
override var parameter: FirProperty,
override var block: FirBlock,
) : FirCatch() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
@@ -142,3 +142,7 @@ var FirRegularClass.isJavaRecord: Boolean? by FirDeclarationDataRegistry.data(Is
private object IsJavaRecordComponentKey : FirDeclarationDataKey()
var FirFunction.isJavaRecordComponent: Boolean? by FirDeclarationDataRegistry.data(IsJavaRecordComponentKey)
private object IsCatchParameterProperty : FirDeclarationDataKey()
var FirProperty.isCatchParameter: Boolean? by FirDeclarationDataRegistry.data(IsCatchParameterProperty)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.renderer
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.isCatchParameter
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
open class FirDeclarationRenderer {
@@ -32,8 +33,12 @@ open class FirDeclarationRenderer {
is FirAnonymousFunction -> (declaration.label?.let { "${it.name}@" } ?: "") + "fun"
is FirSimpleFunction -> "fun"
is FirProperty -> {
val prefix = if (declaration.isLocal) "l" else ""
prefix + if (declaration.isVal) "val" else "var"
if (declaration.isCatchParameter == true) {
""
} else {
val prefix = if (declaration.isLocal) "l" else ""
prefix + if (declaration.isVal) "val" else "var"
}
}
is FirPropertyAccessor -> if (declaration.isGetter) "get" else "set"
is FirField -> "field"
@@ -181,7 +181,9 @@ class FirRenderer(
annotationRenderer?.render(callableDeclaration)
visitMemberDeclaration(callableDeclaration)
val receiverParameter = callableDeclaration.receiverParameter
print(" ")
if (callableDeclaration !is FirProperty || callableDeclaration.isCatchParameter != true) {
print(" ")
}
if (receiverParameter != null) {
annotationRenderer?.render(receiverParameter, AnnotationUseSiteTarget.RECEIVER)
receiverParameter.typeRef.accept(this)
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.fir.tree.generator.FieldSets.typeArguments
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.typeParameterRefs
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.typeParameters
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.typeRefField
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.valueParameters
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.visibility
import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFieldConfigurator
import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder
@@ -176,7 +175,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
}
catchClause.configure {
+field("parameter", valueParameter).withTransform()
+field("parameter", property).withTransform()
+field(block).withTransform()
needTransformOtherChildren()
}