Introduce typeRef for FirExpression
This helps both body resolve & conversion to IR
This commit is contained in:
+3
-3
@@ -100,13 +100,13 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
|
||||
)
|
||||
}
|
||||
FirOperation.AS -> {
|
||||
bindingContext[resolved] = resolved.typeRef
|
||||
bindingContext[resolved] = resolved.conversionTypeRef
|
||||
}
|
||||
FirOperation.SAFE_AS -> {
|
||||
bindingContext[resolved] =
|
||||
resolved.typeRef.withReplacedConeType(
|
||||
resolved.conversionTypeRef.withReplacedConeType(
|
||||
session,
|
||||
resolved.typeRef.coneTypeUnsafe().withNullability(ConeNullability.NULLABLE)
|
||||
resolved.conversionTypeRef.coneTypeUnsafe().withNullability(ConeNullability.NULLABLE)
|
||||
)
|
||||
}
|
||||
else -> error("Unknown type operator")
|
||||
|
||||
@@ -618,7 +618,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
print(" ")
|
||||
print(typeOperatorCall.operation.operator)
|
||||
print(" ")
|
||||
typeOperatorCall.typeRef.accept(this)
|
||||
typeOperatorCall.conversionTypeRef.accept(this)
|
||||
print(")")
|
||||
}
|
||||
|
||||
@@ -853,7 +853,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
print(operatorCall.operation.operator)
|
||||
if (operatorCall is FirTypeOperatorCall) {
|
||||
print("/")
|
||||
operatorCall.typeRef.accept(this)
|
||||
operatorCall.conversionTypeRef.accept(this)
|
||||
}
|
||||
visitCall(operatorCall)
|
||||
}
|
||||
@@ -882,7 +882,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
classReferenceExpression.annotations.renderAnnotations()
|
||||
print("<getClass>")
|
||||
print("(")
|
||||
classReferenceExpression.typeRef.accept(this)
|
||||
classReferenceExpression.classTypeRef.accept(this)
|
||||
print(")")
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ interface FirAnonymousFunction : @VisitedSupertype FirFunction, FirExpression, F
|
||||
parameter.accept(visitor, data)
|
||||
}
|
||||
body?.accept(visitor, data)
|
||||
// Don't call super<FirExpression>.acceptChildren (annotations are already processed)
|
||||
typeRef.accept(visitor, data)
|
||||
// Don't call super<FirExpression>.acceptChildren (annotations & typeRef are already processed)
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ interface FirEnumEntry : @VisitedSupertype FirRegularClass, FirCall {
|
||||
for (argument in arguments) {
|
||||
argument.accept(visitor, data)
|
||||
}
|
||||
typeRef.accept(visitor, data)
|
||||
super<FirRegularClass>.acceptChildren(visitor, data)
|
||||
}
|
||||
}
|
||||
+8
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirAnonymousFunctionImpl(
|
||||
@@ -20,9 +21,16 @@ class FirAnonymousFunctionImpl(
|
||||
override var returnTypeRef: FirTypeRef,
|
||||
override var receiverTypeRef: FirTypeRef?
|
||||
) : FirAbstractFunction(session, psi), FirAnonymousFunction, FirModifiableFunction {
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null)
|
||||
|
||||
override var label: FirLabel? = null
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||
receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data)
|
||||
label = label?.transformSingle(transformer, data)
|
||||
|
||||
+9
@@ -11,7 +11,9 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@@ -19,15 +21,22 @@ class FirAnonymousObjectImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirAbstractAnnotatedDeclaration(session, psi), FirAnonymousObject, FirModifiableClass {
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null)
|
||||
|
||||
override val superTypeRefs = mutableListOf<FirTypeRef>()
|
||||
|
||||
override val declarations = mutableListOf<FirDeclaration>()
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||
return super<FirAnonymousObject>.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
superTypeRefs.transformInplace(transformer, data)
|
||||
declarations.transformInplace(transformer, data)
|
||||
|
||||
|
||||
@@ -11,8 +11,14 @@ import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirEnumEntryImpl(
|
||||
@@ -35,5 +41,18 @@ class FirEnumEntryImpl(
|
||||
isData = false,
|
||||
isInline = false
|
||||
), FirEnumEntry {
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null)
|
||||
|
||||
override val arguments = mutableListOf<FirExpression>()
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirRegularClass {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
arguments.transformInplace(transformer, data)
|
||||
|
||||
return super<FirClassImpl>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@ class FirErrorLoop(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val reason: String
|
||||
) : FirAbstractElement(session, psi), FirErrorExpression, FirLoop {
|
||||
) : FirAbstractElement(session, psi), FirErrorStatement, FirLoop {
|
||||
override val annotations: List<FirAnnotationCall> = listOf()
|
||||
|
||||
override val condition: FirExpression = FirErrorExpressionImpl(session, psi, reason)
|
||||
@@ -25,7 +25,7 @@ class FirErrorLoop(
|
||||
override val block: FirBlock = FirEmptyExpressionBlock(session)
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||
return super<FirErrorExpression>.accept(visitor, data)
|
||||
return super<FirErrorStatement>.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
|
||||
@@ -22,6 +22,7 @@ interface FirArraySetCall : @VisitedSupertype FirCall, FirAssignment {
|
||||
index.accept(visitor, data)
|
||||
}
|
||||
acceptAnnotations(visitor, data)
|
||||
typeRef.accept(visitor, data)
|
||||
super<FirAssignment>.acceptChildren(visitor, data)
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@ interface FirBlock : FirExpression {
|
||||
for (statement in statements) {
|
||||
statement.accept(visitor, data)
|
||||
}
|
||||
typeRef.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirClassReferenceExpression : FirExpression {
|
||||
val typeRef: FirTypeRef
|
||||
val classTypeRef: FirTypeRef
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitClassReferenceExpression(this, data)
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirErrorStatement : FirStatement {
|
||||
val reason: String
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitErrorStatement(this, data)
|
||||
}
|
||||
@@ -7,11 +7,21 @@ package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirResolvedCallableReference
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirExpression : FirStatement {
|
||||
val typeRef: FirTypeRef
|
||||
|
||||
fun replaceTypeRef(newTypeRef: FirTypeRef)
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitExpression(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super.acceptChildren(visitor, data)
|
||||
typeRef.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
|
||||
fun FirExpression.toResolvedCallableReference(): FirResolvedCallableReference? {
|
||||
|
||||
@@ -23,6 +23,7 @@ interface FirFunctionCall : @VisitedSupertype FirCall, FirQualifiedAccess, FirTy
|
||||
for (typeArgument in typeArguments) {
|
||||
typeArgument.accept(visitor, data)
|
||||
}
|
||||
typeRef.accept(visitor, data)
|
||||
super<FirQualifiedAccess>.acceptChildren(visitor, data)
|
||||
}
|
||||
}
|
||||
+1
@@ -14,5 +14,6 @@ interface FirQualifiedAccessExpression : @VisitedSupertype FirQualifiedAccess, F
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super<FirQualifiedAccess>.acceptChildren(visitor, data)
|
||||
typeRef.accept(visitor, data)
|
||||
}
|
||||
}
|
||||
@@ -12,13 +12,13 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
interface FirTypeOperatorCall : FirOperatorCall {
|
||||
val argument: FirExpression get() = arguments.first()
|
||||
|
||||
val typeRef: FirTypeRef
|
||||
val conversionTypeRef: FirTypeRef
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitTypeOperatorCall(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
typeRef.accept(visitor, data)
|
||||
conversionTypeRef.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
abstract class FirAbstractBlock(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirAbstractAnnotatedElement(session, psi), FirBlock {
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null)
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractAnnotatedElement>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+19
-1
@@ -6,10 +6,28 @@
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
abstract class FirAbstractExpression(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirAbstractStatement(session, psi), FirExpression
|
||||
) : FirAbstractStatement(session, psi), FirExpression {
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null)
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractStatement>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+10
@@ -13,6 +13,9 @@ import org.jetbrains.kotlin.fir.expressions.FirArraySetCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
@@ -22,12 +25,19 @@ class FirArraySetCallImpl(
|
||||
value: FirExpression,
|
||||
operation: FirOperation
|
||||
) : FirAbstractAssignment(session, psi, value, operation, false), FirArraySetCall {
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null)
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
override val indexes = mutableListOf<FirExpression>()
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
super<FirArraySetCall>.accept(visitor, data)
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
indexes.transformInplace(transformer, data)
|
||||
|
||||
return super<FirAbstractAssignment>.transformChildren(transformer, data)
|
||||
|
||||
@@ -16,11 +16,11 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
class FirBlockImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirAbstractAnnotatedElement(session, psi), FirBlock {
|
||||
) : FirAbstractBlock(session, psi), FirBlock {
|
||||
override val statements = mutableListOf<FirStatement>()
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
statements.transformInplace(transformer, data)
|
||||
return super<FirAbstractAnnotatedElement>.transformChildren(transformer, data)
|
||||
return super<FirAbstractBlock>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+18
-1
@@ -6,10 +6,27 @@
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirCallableReferenceAccessImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirAbstractQualifiedAccess(session, psi), FirCallableReferenceAccess
|
||||
) : FirAbstractQualifiedAccess(session, psi), FirCallableReferenceAccess {
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null)
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractQualifiedAccess>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -16,10 +16,10 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
class FirClassReferenceExpressionImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override var typeRef: FirTypeRef
|
||||
override var classTypeRef: FirTypeRef
|
||||
) : FirAbstractExpression(session, psi), FirClassReferenceExpression {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
classTypeRef = classTypeRef.transformSingle(transformer, data)
|
||||
return super<FirAbstractExpression>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -10,6 +10,6 @@ import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
|
||||
class FirEmptyExpressionBlock(
|
||||
session: FirSession
|
||||
) : FirAbstractAnnotatedElement(session, null), FirBlock {
|
||||
) : FirAbstractBlock(session, null), FirBlock {
|
||||
override val statements = listOf()
|
||||
}
|
||||
+18
-1
@@ -6,11 +6,28 @@
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirQualifiedAccessExpressionImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
safe: Boolean = false
|
||||
) : FirAbstractQualifiedAccess(session, psi, safe), FirQualifiedAccessExpression
|
||||
) : FirAbstractQualifiedAccess(session, psi, safe), FirQualifiedAccessExpression {
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null)
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractQualifiedAccess>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -15,12 +15,12 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
class FirSingleExpressionBlock(
|
||||
session: FirSession,
|
||||
private var statement: FirStatement
|
||||
) : FirAbstractAnnotatedElement(session, statement.psi), FirBlock {
|
||||
) : FirAbstractBlock(session, statement.psi), FirBlock {
|
||||
override val statements
|
||||
get() = listOf(statement)
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
statement = statement.transformSingle(transformer, data)
|
||||
return super<FirAbstractAnnotatedElement>.transformChildren(transformer, data)
|
||||
return super<FirAbstractBlock>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -18,10 +18,10 @@ class FirTypeOperatorCallImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val operation: FirOperation,
|
||||
override var typeRef: FirTypeRef
|
||||
override var conversionTypeRef: FirTypeRef
|
||||
) : FirAbstractCall(session, psi), FirTypeOperatorCall {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeRef = typeRef.transformSingle(transformer, data)
|
||||
conversionTypeRef = conversionTypeRef.transformSingle(transformer, data)
|
||||
return super<FirAbstractCall>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+8
@@ -180,6 +180,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformClass(modifiableClass, data)
|
||||
}
|
||||
|
||||
open fun transformErrorStatement(errorStatement: FirErrorStatement, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformStatement(errorStatement, data)
|
||||
}
|
||||
|
||||
open fun transformExpression(expression: FirExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformStatement(expression, data)
|
||||
}
|
||||
@@ -504,6 +508,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformErrorExpression(errorExpression, data)
|
||||
}
|
||||
|
||||
final override fun visitErrorStatement(errorStatement: FirErrorStatement, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformErrorStatement(errorStatement, data)
|
||||
}
|
||||
|
||||
final override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformErrorTypeRef(errorTypeRef, data)
|
||||
}
|
||||
|
||||
@@ -180,6 +180,10 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitClass(modifiableClass, data)
|
||||
}
|
||||
|
||||
open fun visitErrorStatement(errorStatement: FirErrorStatement, data: D): R {
|
||||
return visitStatement(errorStatement, data)
|
||||
}
|
||||
|
||||
open fun visitExpression(expression: FirExpression, data: D): R {
|
||||
return visitStatement(expression, data)
|
||||
}
|
||||
|
||||
+8
@@ -180,6 +180,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitClass(modifiableClass, null)
|
||||
}
|
||||
|
||||
open fun visitErrorStatement(errorStatement: FirErrorStatement) {
|
||||
visitStatement(errorStatement, null)
|
||||
}
|
||||
|
||||
open fun visitExpression(expression: FirExpression) {
|
||||
visitStatement(expression, null)
|
||||
}
|
||||
@@ -504,6 +508,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitErrorExpression(errorExpression)
|
||||
}
|
||||
|
||||
final override fun visitErrorStatement(errorStatement: FirErrorStatement, data: Nothing?) {
|
||||
visitErrorStatement(errorStatement)
|
||||
}
|
||||
|
||||
final override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: Nothing?) {
|
||||
visitErrorTypeRef(errorTypeRef)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user