[FIR] Introduce unchecked not-null cast as internal operation for !!, ?:
This commit is contained in:
committed by
Mikhail Glukhikh
parent
b469eb293b
commit
aa96837758
@@ -919,4 +919,9 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
override fun visitErrorExpression(errorExpression: FirErrorExpression) {
|
||||
print("ERROR_EXPR(${errorExpression.reason})")
|
||||
}
|
||||
|
||||
override fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast) {
|
||||
uncheckedNotNullCast.expression.accept(this)
|
||||
print("!")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright 2010-2019 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.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirUncheckedNotNullCast : FirCall {
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitUncheckedNotNullCast(this, data)
|
||||
|
||||
val expression: FirExpression get() = arguments[0]
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2010-2019 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.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirUncheckedNotNullCast
|
||||
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
|
||||
class FirUncheckedNotNullCastImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
expression: FirExpression
|
||||
) : FirAbstractCall(session, psi), FirUncheckedNotNullCast {
|
||||
init {
|
||||
arguments += expression
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -236,6 +236,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformCall(stringConcatenationCall, data)
|
||||
}
|
||||
|
||||
open fun transformUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformCall(uncheckedNotNullCast, data)
|
||||
}
|
||||
|
||||
open fun transformClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformExpression(classReferenceExpression, data)
|
||||
}
|
||||
@@ -732,6 +736,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformTypedDeclaration(typedDeclaration, data)
|
||||
}
|
||||
|
||||
final override fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformUncheckedNotNullCast(uncheckedNotNullCast, data)
|
||||
}
|
||||
|
||||
final override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformUserTypeRef(userTypeRef, data)
|
||||
}
|
||||
|
||||
@@ -236,6 +236,10 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitCall(stringConcatenationCall, data)
|
||||
}
|
||||
|
||||
open fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: D): R {
|
||||
return visitCall(uncheckedNotNullCast, data)
|
||||
}
|
||||
|
||||
open fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): R {
|
||||
return visitExpression(classReferenceExpression, data)
|
||||
}
|
||||
|
||||
+8
@@ -236,6 +236,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitCall(stringConcatenationCall, null)
|
||||
}
|
||||
|
||||
open fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast) {
|
||||
visitCall(uncheckedNotNullCast, null)
|
||||
}
|
||||
|
||||
open fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression) {
|
||||
visitExpression(classReferenceExpression, null)
|
||||
}
|
||||
@@ -732,6 +736,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitTypedDeclaration(typedDeclaration)
|
||||
}
|
||||
|
||||
final override fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: Nothing?) {
|
||||
visitUncheckedNotNullCast(uncheckedNotNullCast)
|
||||
}
|
||||
|
||||
final override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: Nothing?) {
|
||||
visitUserTypeRef(userTypeRef)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user