[FIR] Use ConeKotlinType to represent vararg's element type
We are using `ConeKotlinType` instead of `FirTypeRef` to represent that element type of vararg doesn't have any source. It has a type that was inferred. If we try to specify a source, then we could end up with the incorrect place for diagnostic. #KT-59682 Fixed
This commit is contained in:
+1
-2
@@ -11,7 +11,6 @@ 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.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@@ -24,7 +23,7 @@ abstract class FirVarargArgumentsExpression : FirExpression() {
|
||||
abstract override val coneTypeOrNull: ConeKotlinType?
|
||||
abstract override val annotations: List<FirAnnotation>
|
||||
abstract val arguments: List<FirExpression>
|
||||
abstract val varargElementType: FirTypeRef
|
||||
abstract val coneElementTypeOrNull: ConeKotlinType?
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitVarargArgumentsExpression(this, data)
|
||||
|
||||
+3
-4
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirVarargArgumentsExpressionImpl
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
|
||||
@FirBuilderDsl
|
||||
class FirVarargArgumentsExpressionBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder {
|
||||
@@ -28,7 +27,7 @@ class FirVarargArgumentsExpressionBuilder : FirAnnotationContainerBuilder, FirEx
|
||||
override var coneTypeOrNull: ConeKotlinType? = null
|
||||
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||
val arguments: MutableList<FirExpression> = mutableListOf()
|
||||
lateinit var varargElementType: FirTypeRef
|
||||
var coneElementTypeOrNull: ConeKotlinType? = null
|
||||
|
||||
override fun build(): FirVarargArgumentsExpression {
|
||||
return FirVarargArgumentsExpressionImpl(
|
||||
@@ -36,14 +35,14 @@ class FirVarargArgumentsExpressionBuilder : FirAnnotationContainerBuilder, FirEx
|
||||
coneTypeOrNull,
|
||||
annotations.toMutableOrEmpty(),
|
||||
arguments,
|
||||
varargElementType,
|
||||
coneElementTypeOrNull,
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildVarargArgumentsExpression(init: FirVarargArgumentsExpressionBuilder.() -> Unit): FirVarargArgumentsExpression {
|
||||
inline fun buildVarargArgumentsExpression(init: FirVarargArgumentsExpressionBuilder.() -> Unit = {}): FirVarargArgumentsExpression {
|
||||
contract {
|
||||
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
|
||||
+1
-4
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.fir.visitors.transformInplace
|
||||
@@ -30,19 +29,17 @@ internal class FirVarargArgumentsExpressionImpl(
|
||||
override var coneTypeOrNull: ConeKotlinType?,
|
||||
override var annotations: MutableOrEmptyList<FirAnnotation>,
|
||||
override val arguments: MutableList<FirExpression>,
|
||||
override var varargElementType: FirTypeRef,
|
||||
override val coneElementTypeOrNull: ConeKotlinType?,
|
||||
) : FirVarargArgumentsExpression() {
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
arguments.forEach { it.accept(visitor, data) }
|
||||
varargElementType.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirVarargArgumentsExpressionImpl {
|
||||
transformAnnotations(transformer, data)
|
||||
arguments.transformInplace(transformer, data)
|
||||
varargElementType = varargElementType.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user