Forbid manipulations with FirWrappedArgumentExpression type reference
The type of this expression is bound to the type of wrapped expression, so it's better not to change it directly.
This commit is contained in:
+1
-1
@@ -937,7 +937,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
|
||||
}
|
||||
|
||||
override fun transformExpression(expression: FirExpression, data: Any?): CompositeTransformResult<FirStatement> {
|
||||
if (expression.resultType is FirImplicitTypeRef) {
|
||||
if (expression.resultType is FirImplicitTypeRef && expression !is FirWrappedArgumentExpression) {
|
||||
val type = FirErrorTypeRefImpl(session, expression.psi, "Type calculating for ${expression::class} is not supported")
|
||||
expression.resultType = type
|
||||
}
|
||||
|
||||
+4
@@ -17,6 +17,10 @@ interface FirWrappedArgumentExpression : FirExpression {
|
||||
override val typeRef: FirTypeRef
|
||||
get() = expression.typeRef
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
throw AssertionError("We should not try to replace type reference in ${this::class}")
|
||||
}
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitWrappedArgumentExpression(this, data)
|
||||
|
||||
|
||||
+2
-7
@@ -11,20 +11,15 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirLambdaArgumentExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirLambdaArgumentExpressionImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override var expression: FirExpression
|
||||
) : FirLambdaArgumentExpression, FirAbstractExpression(session, psi) {
|
||||
override var typeRef: FirTypeRef
|
||||
get() = super<FirLambdaArgumentExpression>.typeRef
|
||||
set(_) {}
|
||||
|
||||
) : FirLambdaArgumentExpression, FirAbstractStatement(session, psi) {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
expression = expression.transformSingle(transformer, data)
|
||||
return super<FirAbstractExpression>.transformChildren(transformer, data)
|
||||
return super<FirAbstractStatement>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+2
-7
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@@ -21,13 +20,9 @@ class FirNamedArgumentExpressionImpl(
|
||||
override val name: Name,
|
||||
override val isSpread: Boolean,
|
||||
override var expression: FirExpression
|
||||
) : FirNamedArgumentExpression, FirAbstractExpression(session, psi) {
|
||||
override var typeRef: FirTypeRef
|
||||
get() = super<FirNamedArgumentExpression>.typeRef
|
||||
set(_) {}
|
||||
|
||||
) : FirNamedArgumentExpression, FirAbstractStatement(session, psi) {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
expression = expression.transformSingle(transformer, data)
|
||||
return super<FirAbstractExpression>.transformChildren(transformer, data)
|
||||
return super<FirAbstractStatement>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+2
-7
@@ -11,20 +11,15 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirSpreadArgumentExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirSpreadArgumentExpressionImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override var expression: FirExpression
|
||||
) : FirSpreadArgumentExpression, FirAbstractExpression(session, psi) {
|
||||
override var typeRef: FirTypeRef
|
||||
get() = super<FirSpreadArgumentExpression>.typeRef
|
||||
set(_) {}
|
||||
|
||||
) : FirSpreadArgumentExpression, FirAbstractStatement(session, psi) {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
expression = expression.transformSingle(transformer, data)
|
||||
return super<FirAbstractExpression>.transformChildren(transformer, data)
|
||||
return super<FirAbstractStatement>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user