[FIR] Introduce new FIR node for SAM conversion
#KT-62847
This commit is contained in:
committed by
Space Team
parent
ebb6f4c70f
commit
0b28e770b2
+4
@@ -186,6 +186,10 @@ class ExpressionCheckersDiagnosticComponent(
|
|||||||
checkers.allBasicExpressionCheckers.check(varargArgumentsExpression, data)
|
checkers.allBasicExpressionCheckers.check(varargArgumentsExpression, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitSamConversionExpression(samConversionExpression: FirSamConversionExpression, data: CheckerContext) {
|
||||||
|
checkers.allBasicExpressionCheckers.check(samConversionExpression, data)
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitWrappedExpression(wrappedExpression: FirWrappedExpression, data: CheckerContext) {
|
override fun visitWrappedExpression(wrappedExpression: FirWrappedExpression, data: CheckerContext) {
|
||||||
checkers.allBasicExpressionCheckers.check(wrappedExpression, data)
|
checkers.allBasicExpressionCheckers.check(wrappedExpression, data)
|
||||||
}
|
}
|
||||||
|
|||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This file was generated automatically. See compiler/fir/tree/tree-generator/Readme.md.
|
||||||
|
// DO NOT MODIFY IT MANUALLY.
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.expressions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.KtSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generated from: [org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.samConversionExpression]
|
||||||
|
*/
|
||||||
|
abstract class FirSamConversionExpression : FirExpression() {
|
||||||
|
abstract override val source: KtSourceElement?
|
||||||
|
@UnresolvedExpressionTypeAccess
|
||||||
|
abstract override val coneTypeOrNull: ConeKotlinType?
|
||||||
|
abstract override val annotations: List<FirAnnotation>
|
||||||
|
abstract val expression: FirExpression
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
|
visitor.visitSamConversionExpression(this, data)
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
override fun <E : FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
||||||
|
transformer.transformSamConversionExpression(this, data) as E
|
||||||
|
|
||||||
|
abstract override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?)
|
||||||
|
|
||||||
|
abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
|
||||||
|
|
||||||
|
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirSamConversionExpression
|
||||||
|
}
|
||||||
+62
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This file was generated automatically. See compiler/fir/tree/tree-generator/Readme.md.
|
||||||
|
// DO NOT MODIFY IT MANUALLY.
|
||||||
|
|
||||||
|
@file:Suppress("DuplicatedCode", "unused")
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.expressions.builder
|
||||||
|
|
||||||
|
import kotlin.contracts.*
|
||||||
|
import org.jetbrains.kotlin.KtSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||||
|
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||||
|
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirSamConversionExpression
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.impl.FirSamConversionExpressionImpl
|
||||||
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
|
|
||||||
|
@FirBuilderDsl
|
||||||
|
class FirSamConversionExpressionBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder {
|
||||||
|
override var source: KtSourceElement? = null
|
||||||
|
override var coneTypeOrNull: ConeKotlinType? = null
|
||||||
|
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||||
|
lateinit var expression: FirExpression
|
||||||
|
|
||||||
|
override fun build(): FirSamConversionExpression {
|
||||||
|
return FirSamConversionExpressionImpl(
|
||||||
|
source,
|
||||||
|
coneTypeOrNull,
|
||||||
|
annotations.toMutableOrEmpty(),
|
||||||
|
expression,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalContracts::class)
|
||||||
|
inline fun buildSamConversionExpression(init: FirSamConversionExpressionBuilder.() -> Unit): FirSamConversionExpression {
|
||||||
|
contract {
|
||||||
|
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
|
||||||
|
}
|
||||||
|
return FirSamConversionExpressionBuilder().apply(init).build()
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalContracts::class, UnresolvedExpressionTypeAccess::class)
|
||||||
|
inline fun buildSamConversionExpressionCopy(original: FirSamConversionExpression, init: FirSamConversionExpressionBuilder.() -> Unit): FirSamConversionExpression {
|
||||||
|
contract {
|
||||||
|
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
|
||||||
|
}
|
||||||
|
val copyBuilder = FirSamConversionExpressionBuilder()
|
||||||
|
copyBuilder.source = original.source
|
||||||
|
copyBuilder.coneTypeOrNull = original.coneTypeOrNull
|
||||||
|
copyBuilder.annotations.addAll(original.annotations)
|
||||||
|
copyBuilder.expression = original.expression
|
||||||
|
return copyBuilder.apply(init).build()
|
||||||
|
}
|
||||||
+57
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This file was generated automatically. See compiler/fir/tree/tree-generator/Readme.md.
|
||||||
|
// DO NOT MODIFY IT MANUALLY.
|
||||||
|
|
||||||
|
@file:Suppress("DuplicatedCode", "unused")
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.expressions.impl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.KtSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.MutableOrEmptyList
|
||||||
|
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirSamConversionExpression
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
|
||||||
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.transformInplace
|
||||||
|
|
||||||
|
@OptIn(UnresolvedExpressionTypeAccess::class)
|
||||||
|
internal class FirSamConversionExpressionImpl(
|
||||||
|
override val source: KtSourceElement?,
|
||||||
|
@property:UnresolvedExpressionTypeAccess
|
||||||
|
override var coneTypeOrNull: ConeKotlinType?,
|
||||||
|
override var annotations: MutableOrEmptyList<FirAnnotation>,
|
||||||
|
override var expression: FirExpression,
|
||||||
|
) : FirSamConversionExpression() {
|
||||||
|
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
annotations.forEach { it.accept(visitor, data) }
|
||||||
|
expression.accept(visitor, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirSamConversionExpressionImpl {
|
||||||
|
transformAnnotations(transformer, data)
|
||||||
|
expression = expression.transform(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirSamConversionExpressionImpl {
|
||||||
|
annotations.transformInplace(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {
|
||||||
|
coneTypeOrNull = newConeTypeOrNull
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||||
|
annotations = newAnnotations.toMutableOrEmpty()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -185,6 +185,9 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
|
|||||||
override fun visitVarargArgumentsExpression(varargArgumentsExpression: FirVarargArgumentsExpression, data: D): R =
|
override fun visitVarargArgumentsExpression(varargArgumentsExpression: FirVarargArgumentsExpression, data: D): R =
|
||||||
visitExpression(varargArgumentsExpression, data)
|
visitExpression(varargArgumentsExpression, data)
|
||||||
|
|
||||||
|
override fun visitSamConversionExpression(samConversionExpression: FirSamConversionExpression, data: D): R =
|
||||||
|
visitExpression(samConversionExpression, data)
|
||||||
|
|
||||||
override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): R =
|
override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): R =
|
||||||
visitExpression(resolvedQualifier, data)
|
visitExpression(resolvedQualifier, data)
|
||||||
|
|
||||||
|
|||||||
@@ -130,6 +130,8 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
|
|||||||
|
|
||||||
override fun visitVarargArgumentsExpression(varargArgumentsExpression: FirVarargArgumentsExpression) = visitExpression(varargArgumentsExpression)
|
override fun visitVarargArgumentsExpression(varargArgumentsExpression: FirVarargArgumentsExpression) = visitExpression(varargArgumentsExpression)
|
||||||
|
|
||||||
|
override fun visitSamConversionExpression(samConversionExpression: FirSamConversionExpression) = visitExpression(samConversionExpression)
|
||||||
|
|
||||||
override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) = visitExpression(resolvedQualifier)
|
override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) = visitExpression(resolvedQualifier)
|
||||||
|
|
||||||
override fun visitResolvedReifiedParameterReference(resolvedReifiedParameterReference: FirResolvedReifiedParameterReference) = visitExpression(resolvedReifiedParameterReference)
|
override fun visitResolvedReifiedParameterReference(resolvedReifiedParameterReference: FirResolvedReifiedParameterReference) = visitExpression(resolvedReifiedParameterReference)
|
||||||
|
|||||||
@@ -971,6 +971,14 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
|||||||
return transformVarargArgumentsExpression(varargArgumentsExpression, data)
|
return transformVarargArgumentsExpression(varargArgumentsExpression, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun transformSamConversionExpression(samConversionExpression: FirSamConversionExpression, data: D): FirStatement {
|
||||||
|
return transformElement(samConversionExpression, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun visitSamConversionExpression(samConversionExpression: FirSamConversionExpression, data: D): FirStatement {
|
||||||
|
return transformSamConversionExpression(samConversionExpression, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun transformResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): FirStatement {
|
open fun transformResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): FirStatement {
|
||||||
return transformElement(resolvedQualifier, data)
|
return transformElement(resolvedQualifier, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -377,6 +377,9 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
open fun visitVarargArgumentsExpression(varargArgumentsExpression: FirVarargArgumentsExpression, data: D): R =
|
open fun visitVarargArgumentsExpression(varargArgumentsExpression: FirVarargArgumentsExpression, data: D): R =
|
||||||
visitElement(varargArgumentsExpression, data)
|
visitElement(varargArgumentsExpression, data)
|
||||||
|
|
||||||
|
open fun visitSamConversionExpression(samConversionExpression: FirSamConversionExpression, data: D): R =
|
||||||
|
visitElement(samConversionExpression, data)
|
||||||
|
|
||||||
open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): R =
|
open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): R =
|
||||||
visitElement(resolvedQualifier, data)
|
visitElement(resolvedQualifier, data)
|
||||||
|
|
||||||
|
|||||||
@@ -971,6 +971,14 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(varargArgumentsExpression)
|
visitElement(varargArgumentsExpression)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitSamConversionExpression(samConversionExpression: FirSamConversionExpression, data: Nothing?) {
|
||||||
|
visitSamConversionExpression(samConversionExpression)
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun visitSamConversionExpression(samConversionExpression: FirSamConversionExpression) {
|
||||||
|
visitElement(samConversionExpression)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: Nothing?) {
|
final override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: Nothing?) {
|
||||||
visitResolvedQualifier(resolvedQualifier)
|
visitResolvedQualifier(resolvedQualifier)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -750,6 +750,12 @@ class FirRenderer(
|
|||||||
print(")")
|
print(")")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitSamConversionExpression(samConversionExpression: FirSamConversionExpression) {
|
||||||
|
print("SAM(")
|
||||||
|
samConversionExpression.expression.accept(this)
|
||||||
|
print(")")
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitCall(call: FirCall) {
|
override fun visitCall(call: FirCall) {
|
||||||
callArgumentsRenderer?.renderArguments(call.arguments)
|
callArgumentsRenderer?.renderArguments(call.arguments)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -416,6 +416,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
|||||||
|
|
||||||
noBuilder(constExpression)
|
noBuilder(constExpression)
|
||||||
|
|
||||||
|
builder(samConversionExpression) {
|
||||||
|
withCopy()
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
|
|
||||||
findImplementationsWithElementInParents(annotationContainer).forEach {
|
findImplementationsWithElementInParents(annotationContainer).forEach {
|
||||||
|
|||||||
+1
@@ -149,6 +149,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
|||||||
val spreadArgumentExpression by element(Expression, wrappedArgumentExpression)
|
val spreadArgumentExpression by element(Expression, wrappedArgumentExpression)
|
||||||
val namedArgumentExpression by element(Expression, wrappedArgumentExpression)
|
val namedArgumentExpression by element(Expression, wrappedArgumentExpression)
|
||||||
val varargArgumentsExpression by element(Expression, expression)
|
val varargArgumentsExpression by element(Expression, expression)
|
||||||
|
val samConversionExpression by element(Expression, expression)
|
||||||
|
|
||||||
val resolvedQualifier by element(Expression, expression)
|
val resolvedQualifier by element(Expression, expression)
|
||||||
val errorResolvedQualifier by element(Expression, resolvedQualifier, diagnosticHolder)
|
val errorResolvedQualifier by element(Expression, resolvedQualifier, diagnosticHolder)
|
||||||
|
|||||||
+4
@@ -615,6 +615,10 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
+field("varargElementType", typeRef)
|
+field("varargElementType", typeRef)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
samConversionExpression.configure {
|
||||||
|
+field("expression", expression)
|
||||||
|
}
|
||||||
|
|
||||||
resolvedQualifier.configure {
|
resolvedQualifier.configure {
|
||||||
+field("packageFqName", fqNameType)
|
+field("packageFqName", fqNameType)
|
||||||
+field("relativeClassFqName", fqNameType, nullable = true)
|
+field("relativeClassFqName", fqNameType, nullable = true)
|
||||||
|
|||||||
Reference in New Issue
Block a user