[FIR] do not create FirParameter for catch parameter
use FirProperty instead ^KT-55034
This commit is contained in:
@@ -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)
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
+1
-2
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user