[FIR JS] Support smart casts for dynamic

This commit is contained in:
Nikolay Lunyak
2021-12-30 18:12:45 +03:00
committed by teamcity
parent bdc3b5fe6f
commit 611691ec70
24 changed files with 152 additions and 139 deletions
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirExpressionWithSmartcastToNull : FirExpressionWithSmartcast(), FirWrappedExpressionWithSmartcastToNull<FirQualifiedAccessExpression> {
abstract class FirExpressionWithSmartcastToNothing : FirExpressionWithSmartcast(), FirWrappedExpressionWithSmartcastToNothing<FirQualifiedAccessExpression> {
abstract override val source: KtSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotation>
@@ -38,11 +38,11 @@ abstract class FirExpressionWithSmartcastToNull : FirExpressionWithSmartcast(),
abstract override val smartcastStability: SmartcastStability
abstract override val smartcastTypeWithoutNullableNothing: FirTypeRef
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitExpressionWithSmartcastToNull(this, data)
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitExpressionWithSmartcastToNothing(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
transformer.transformExpressionWithSmartcastToNull(this, data) as E
transformer.transformExpressionWithSmartcastToNothing(this, data) as E
@FirImplementationDetail
abstract override fun replaceSource(newSource: KtSourceElement?)
@@ -57,15 +57,15 @@ abstract class FirExpressionWithSmartcastToNull : FirExpressionWithSmartcast(),
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing
abstract override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull
abstract override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing
abstract override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull
abstract override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing
abstract override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull
abstract override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing
abstract override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull
abstract override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing
}
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirWhenSubjectExpressionWithSmartcastToNull : FirWhenSubjectExpression(), FirWrappedExpressionWithSmartcastToNull<FirWhenSubjectExpression> {
abstract class FirWhenSubjectExpressionWithSmartcastToNothing : FirWhenSubjectExpression(), FirWrappedExpressionWithSmartcastToNothing<FirWhenSubjectExpression> {
abstract override val source: KtSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotation>
@@ -31,13 +31,13 @@ abstract class FirWhenSubjectExpressionWithSmartcastToNull : FirWhenSubjectExpre
abstract override val smartcastStability: SmartcastStability
abstract override val smartcastTypeWithoutNullableNothing: FirTypeRef
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitWhenSubjectExpressionWithSmartcastToNull(this, data)
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitWhenSubjectExpressionWithSmartcastToNothing(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
transformer.transformWhenSubjectExpressionWithSmartcastToNull(this, data) as E
transformer.transformWhenSubjectExpressionWithSmartcastToNothing(this, data) as E
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirWhenSubjectExpressionWithSmartcastToNull
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirWhenSubjectExpressionWithSmartcastToNothing
}
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
interface FirWrappedExpressionWithSmartcastToNull<E : FirExpression> : FirWrappedExpressionWithSmartcast<E> {
interface FirWrappedExpressionWithSmartcastToNothing<E : FirExpression> : FirWrappedExpressionWithSmartcast<E> {
override val source: KtSourceElement?
override val typeRef: FirTypeRef
override val originalExpression: E
@@ -28,11 +28,11 @@ interface FirWrappedExpressionWithSmartcastToNull<E : FirExpression> : FirWrappe
override val smartcastStability: SmartcastStability
val smartcastTypeWithoutNullableNothing: FirTypeRef
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitWrappedExpressionWithSmartcastToNull(this, data)
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitWrappedExpressionWithSmartcastToNothing(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
transformer.transformWrappedExpressionWithSmartcastToNull(this, data) as E
transformer.transformWrappedExpressionWithSmartcastToNothing(this, data) as E
override fun replaceTypeRef(newTypeRef: FirTypeRef)
}
@@ -99,9 +99,9 @@ import org.jetbrains.kotlin.fir.expressions.FirComponentCall
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression
import org.jetbrains.kotlin.fir.expressions.FirCheckedSafeCallSubject
import org.jetbrains.kotlin.fir.expressions.FirGetClassCall
@@ -120,7 +120,7 @@ import org.jetbrains.kotlin.fir.expressions.FirThrowExpression
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
@@ -223,7 +223,7 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
override fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression, data: D): R = visitQualifiedAccessExpression(thisReceiverExpression, data)
override fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNull(wrappedExpressionWithSmartcastToNull: FirWrappedExpressionWithSmartcastToNull<E>, data: D): R = visitWrappedExpressionWithSmartcast(wrappedExpressionWithSmartcastToNull, data)
override fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNothing(wrappedExpressionWithSmartcastToNothing: FirWrappedExpressionWithSmartcastToNothing<E>, data: D): R = visitWrappedExpressionWithSmartcast(wrappedExpressionWithSmartcastToNothing, data)
override fun visitSafeCallExpression(safeCallExpression: FirSafeCallExpression, data: D): R = visitExpression(safeCallExpression, data)
@@ -99,9 +99,9 @@ import org.jetbrains.kotlin.fir.expressions.FirComponentCall
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression
import org.jetbrains.kotlin.fir.expressions.FirCheckedSafeCallSubject
import org.jetbrains.kotlin.fir.expressions.FirGetClassCall
@@ -120,7 +120,7 @@ import org.jetbrains.kotlin.fir.expressions.FirThrowExpression
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
@@ -223,7 +223,7 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
override fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression) = visitQualifiedAccessExpression(thisReceiverExpression)
override fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNull(wrappedExpressionWithSmartcastToNull: FirWrappedExpressionWithSmartcastToNull<E>) = visitWrappedExpressionWithSmartcast(wrappedExpressionWithSmartcastToNull)
override fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNothing(wrappedExpressionWithSmartcastToNothing: FirWrappedExpressionWithSmartcastToNothing<E>) = visitWrappedExpressionWithSmartcast(wrappedExpressionWithSmartcastToNothing)
override fun visitSafeCallExpression(safeCallExpression: FirSafeCallExpression) = visitExpression(safeCallExpression)
@@ -99,9 +99,9 @@ import org.jetbrains.kotlin.fir.expressions.FirComponentCall
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression
import org.jetbrains.kotlin.fir.expressions.FirCheckedSafeCallSubject
import org.jetbrains.kotlin.fir.expressions.FirGetClassCall
@@ -120,7 +120,7 @@ import org.jetbrains.kotlin.fir.expressions.FirThrowExpression
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
@@ -526,16 +526,16 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformElement(wrappedExpressionWithSmartcast, data)
}
open fun <E : FirExpression> transformWrappedExpressionWithSmartcastToNull(wrappedExpressionWithSmartcastToNull: FirWrappedExpressionWithSmartcastToNull<E>, data: D): FirWrappedExpressionWithSmartcastToNull<E> {
return transformElement(wrappedExpressionWithSmartcastToNull, data)
open fun <E : FirExpression> transformWrappedExpressionWithSmartcastToNothing(wrappedExpressionWithSmartcastToNothing: FirWrappedExpressionWithSmartcastToNothing<E>, data: D): FirWrappedExpressionWithSmartcastToNothing<E> {
return transformElement(wrappedExpressionWithSmartcastToNothing, data)
}
open fun transformExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: D): FirStatement {
return transformElement(expressionWithSmartcast, data)
}
open fun transformExpressionWithSmartcastToNull(expressionWithSmartcastToNull: FirExpressionWithSmartcastToNull, data: D): FirStatement {
return transformElement(expressionWithSmartcastToNull, data)
open fun transformExpressionWithSmartcastToNothing(expressionWithSmartcastToNothing: FirExpressionWithSmartcastToNothing, data: D): FirStatement {
return transformElement(expressionWithSmartcastToNothing, data)
}
open fun transformSafeCallExpression(safeCallExpression: FirSafeCallExpression, data: D): FirStatement {
@@ -610,8 +610,8 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformElement(whenSubjectExpressionWithSmartcast, data)
}
open fun transformWhenSubjectExpressionWithSmartcastToNull(whenSubjectExpressionWithSmartcastToNull: FirWhenSubjectExpressionWithSmartcastToNull, data: D): FirStatement {
return transformElement(whenSubjectExpressionWithSmartcastToNull, data)
open fun transformWhenSubjectExpressionWithSmartcastToNothing(whenSubjectExpressionWithSmartcastToNothing: FirWhenSubjectExpressionWithSmartcastToNothing, data: D): FirStatement {
return transformElement(whenSubjectExpressionWithSmartcastToNothing, data)
}
open fun transformWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): FirStatement {
@@ -1082,16 +1082,16 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformWrappedExpressionWithSmartcast(wrappedExpressionWithSmartcast, data)
}
final override fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNull(wrappedExpressionWithSmartcastToNull: FirWrappedExpressionWithSmartcastToNull<E>, data: D): FirWrappedExpressionWithSmartcastToNull<E> {
return transformWrappedExpressionWithSmartcastToNull(wrappedExpressionWithSmartcastToNull, data)
final override fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNothing(wrappedExpressionWithSmartcastToNothing: FirWrappedExpressionWithSmartcastToNothing<E>, data: D): FirWrappedExpressionWithSmartcastToNothing<E> {
return transformWrappedExpressionWithSmartcastToNothing(wrappedExpressionWithSmartcastToNothing, data)
}
final override fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: D): FirStatement {
return transformExpressionWithSmartcast(expressionWithSmartcast, data)
}
final override fun visitExpressionWithSmartcastToNull(expressionWithSmartcastToNull: FirExpressionWithSmartcastToNull, data: D): FirStatement {
return transformExpressionWithSmartcastToNull(expressionWithSmartcastToNull, data)
final override fun visitExpressionWithSmartcastToNothing(expressionWithSmartcastToNothing: FirExpressionWithSmartcastToNothing, data: D): FirStatement {
return transformExpressionWithSmartcastToNothing(expressionWithSmartcastToNothing, data)
}
final override fun visitSafeCallExpression(safeCallExpression: FirSafeCallExpression, data: D): FirStatement {
@@ -1166,8 +1166,8 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformWhenSubjectExpressionWithSmartcast(whenSubjectExpressionWithSmartcast, data)
}
final override fun visitWhenSubjectExpressionWithSmartcastToNull(whenSubjectExpressionWithSmartcastToNull: FirWhenSubjectExpressionWithSmartcastToNull, data: D): FirStatement {
return transformWhenSubjectExpressionWithSmartcastToNull(whenSubjectExpressionWithSmartcastToNull, data)
final override fun visitWhenSubjectExpressionWithSmartcastToNothing(whenSubjectExpressionWithSmartcastToNothing: FirWhenSubjectExpressionWithSmartcastToNothing, data: D): FirStatement {
return transformWhenSubjectExpressionWithSmartcastToNothing(whenSubjectExpressionWithSmartcastToNothing, data)
}
final override fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): FirStatement {
@@ -99,9 +99,9 @@ import org.jetbrains.kotlin.fir.expressions.FirComponentCall
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression
import org.jetbrains.kotlin.fir.expressions.FirCheckedSafeCallSubject
import org.jetbrains.kotlin.fir.expressions.FirGetClassCall
@@ -120,7 +120,7 @@ import org.jetbrains.kotlin.fir.expressions.FirThrowExpression
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
@@ -339,11 +339,11 @@ abstract class FirVisitor<out R, in D> {
open fun <E : FirExpression> visitWrappedExpressionWithSmartcast(wrappedExpressionWithSmartcast: FirWrappedExpressionWithSmartcast<E>, data: D): R = visitElement(wrappedExpressionWithSmartcast, data)
open fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNull(wrappedExpressionWithSmartcastToNull: FirWrappedExpressionWithSmartcastToNull<E>, data: D): R = visitElement(wrappedExpressionWithSmartcastToNull, data)
open fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNothing(wrappedExpressionWithSmartcastToNothing: FirWrappedExpressionWithSmartcastToNothing<E>, data: D): R = visitElement(wrappedExpressionWithSmartcastToNothing, data)
open fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: D): R = visitElement(expressionWithSmartcast, data)
open fun visitExpressionWithSmartcastToNull(expressionWithSmartcastToNull: FirExpressionWithSmartcastToNull, data: D): R = visitElement(expressionWithSmartcastToNull, data)
open fun visitExpressionWithSmartcastToNothing(expressionWithSmartcastToNothing: FirExpressionWithSmartcastToNothing, data: D): R = visitElement(expressionWithSmartcastToNothing, data)
open fun visitSafeCallExpression(safeCallExpression: FirSafeCallExpression, data: D): R = visitElement(safeCallExpression, data)
@@ -381,7 +381,7 @@ abstract class FirVisitor<out R, in D> {
open fun visitWhenSubjectExpressionWithSmartcast(whenSubjectExpressionWithSmartcast: FirWhenSubjectExpressionWithSmartcast, data: D): R = visitElement(whenSubjectExpressionWithSmartcast, data)
open fun visitWhenSubjectExpressionWithSmartcastToNull(whenSubjectExpressionWithSmartcastToNull: FirWhenSubjectExpressionWithSmartcastToNull, data: D): R = visitElement(whenSubjectExpressionWithSmartcastToNull, data)
open fun visitWhenSubjectExpressionWithSmartcastToNothing(whenSubjectExpressionWithSmartcastToNothing: FirWhenSubjectExpressionWithSmartcastToNothing, data: D): R = visitElement(whenSubjectExpressionWithSmartcastToNothing, data)
open fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): R = visitElement(wrappedDelegateExpression, data)
@@ -99,9 +99,9 @@ import org.jetbrains.kotlin.fir.expressions.FirComponentCall
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirWrappedExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression
import org.jetbrains.kotlin.fir.expressions.FirCheckedSafeCallSubject
import org.jetbrains.kotlin.fir.expressions.FirGetClassCall
@@ -120,7 +120,7 @@ import org.jetbrains.kotlin.fir.expressions.FirThrowExpression
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcast
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
@@ -525,16 +525,16 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(wrappedExpressionWithSmartcast)
}
open fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNull(wrappedExpressionWithSmartcastToNull: FirWrappedExpressionWithSmartcastToNull<E>) {
visitElement(wrappedExpressionWithSmartcastToNull)
open fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNothing(wrappedExpressionWithSmartcastToNothing: FirWrappedExpressionWithSmartcastToNothing<E>) {
visitElement(wrappedExpressionWithSmartcastToNothing)
}
open fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast) {
visitElement(expressionWithSmartcast)
}
open fun visitExpressionWithSmartcastToNull(expressionWithSmartcastToNull: FirExpressionWithSmartcastToNull) {
visitElement(expressionWithSmartcastToNull)
open fun visitExpressionWithSmartcastToNothing(expressionWithSmartcastToNothing: FirExpressionWithSmartcastToNothing) {
visitElement(expressionWithSmartcastToNothing)
}
open fun visitSafeCallExpression(safeCallExpression: FirSafeCallExpression) {
@@ -609,8 +609,8 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(whenSubjectExpressionWithSmartcast)
}
open fun visitWhenSubjectExpressionWithSmartcastToNull(whenSubjectExpressionWithSmartcastToNull: FirWhenSubjectExpressionWithSmartcastToNull) {
visitElement(whenSubjectExpressionWithSmartcastToNull)
open fun visitWhenSubjectExpressionWithSmartcastToNothing(whenSubjectExpressionWithSmartcastToNothing: FirWhenSubjectExpressionWithSmartcastToNothing) {
visitElement(whenSubjectExpressionWithSmartcastToNothing)
}
open fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression) {
@@ -1081,16 +1081,16 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitWrappedExpressionWithSmartcast(wrappedExpressionWithSmartcast)
}
final override fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNull(wrappedExpressionWithSmartcastToNull: FirWrappedExpressionWithSmartcastToNull<E>, data: Nothing?) {
visitWrappedExpressionWithSmartcastToNull(wrappedExpressionWithSmartcastToNull)
final override fun <E : FirExpression> visitWrappedExpressionWithSmartcastToNothing(wrappedExpressionWithSmartcastToNothing: FirWrappedExpressionWithSmartcastToNothing<E>, data: Nothing?) {
visitWrappedExpressionWithSmartcastToNothing(wrappedExpressionWithSmartcastToNothing)
}
final override fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: Nothing?) {
visitExpressionWithSmartcast(expressionWithSmartcast)
}
final override fun visitExpressionWithSmartcastToNull(expressionWithSmartcastToNull: FirExpressionWithSmartcastToNull, data: Nothing?) {
visitExpressionWithSmartcastToNull(expressionWithSmartcastToNull)
final override fun visitExpressionWithSmartcastToNothing(expressionWithSmartcastToNothing: FirExpressionWithSmartcastToNothing, data: Nothing?) {
visitExpressionWithSmartcastToNothing(expressionWithSmartcastToNothing)
}
final override fun visitSafeCallExpression(safeCallExpression: FirSafeCallExpression, data: Nothing?) {
@@ -1165,8 +1165,8 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitWhenSubjectExpressionWithSmartcast(whenSubjectExpressionWithSmartcast)
}
final override fun visitWhenSubjectExpressionWithSmartcastToNull(whenSubjectExpressionWithSmartcastToNull: FirWhenSubjectExpressionWithSmartcastToNull, data: Nothing?) {
visitWhenSubjectExpressionWithSmartcastToNull(whenSubjectExpressionWithSmartcastToNull)
final override fun visitWhenSubjectExpressionWithSmartcastToNothing(whenSubjectExpressionWithSmartcastToNothing: FirWhenSubjectExpressionWithSmartcastToNothing, data: Nothing?) {
visitWhenSubjectExpressionWithSmartcastToNothing(whenSubjectExpressionWithSmartcastToNothing)
}
final override fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: Nothing?) {
@@ -5,13 +5,13 @@
package org.jetbrains.kotlin.fir.expressions.builder
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionWithSmartcastToNullImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionWithSmartcastToNothingImpl
class FirExpressionWithSmartcastToNullBuilder : FirWrappedExpressionWithSmartcastToNullBuilder<FirQualifiedAccessExpression>() {
override fun build(): FirExpressionWithSmartcastToNull {
return FirExpressionWithSmartcastToNullImpl(
class FirExpressionWithSmartcastToNothingBuilder : FirWrappedExpressionWithSmartcastToNothingBuilder<FirQualifiedAccessExpression>() {
override fun build(): FirExpressionWithSmartcastToNothing {
return FirExpressionWithSmartcastToNothingImpl(
originalExpression,
smartcastType,
typesFromSmartCast,
@@ -21,6 +21,6 @@ class FirExpressionWithSmartcastToNullBuilder : FirWrappedExpressionWithSmartcas
}
}
inline fun buildExpressionWithSmartcastToNull(init: FirExpressionWithSmartcastToNullBuilder.() -> Unit): FirExpressionWithSmartcastToNull {
return FirExpressionWithSmartcastToNullBuilder().apply(init).build()
inline fun buildExpressionWithSmartcastToNothing(init: FirExpressionWithSmartcastToNothingBuilder.() -> Unit): FirExpressionWithSmartcastToNothing {
return FirExpressionWithSmartcastToNothingBuilder().apply(init).build()
}
@@ -6,12 +6,12 @@
package org.jetbrains.kotlin.fir.expressions.builder
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.impl.FirWhenSubjectExpressionWithSmartcastToNullImpl
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.impl.FirWhenSubjectExpressionWithSmartcastToNothingImpl
class FirWhenSubjectExpressionWithSmartcastToNullBuilder : FirWrappedExpressionWithSmartcastToNullBuilder<FirWhenSubjectExpression>() {
override fun build(): FirWhenSubjectExpressionWithSmartcastToNull {
return FirWhenSubjectExpressionWithSmartcastToNullImpl(
class FirWhenSubjectExpressionWithSmartcastToNothingBuilder : FirWrappedExpressionWithSmartcastToNothingBuilder<FirWhenSubjectExpression>() {
override fun build(): FirWhenSubjectExpressionWithSmartcastToNothing {
return FirWhenSubjectExpressionWithSmartcastToNothingImpl(
originalExpression,
smartcastType,
typesFromSmartCast,
@@ -21,6 +21,6 @@ class FirWhenSubjectExpressionWithSmartcastToNullBuilder : FirWrappedExpressionW
}
}
fun buildWhenSubjectExpressionWithSmartcastToNull(init: FirWhenSubjectExpressionWithSmartcastToNullBuilder.() -> Unit): FirWhenSubjectExpressionWithSmartcastToNull {
return FirWhenSubjectExpressionWithSmartcastToNullBuilder().apply(init).build()
fun buildWhenSubjectExpressionWithSmartcastToNothing(init: FirWhenSubjectExpressionWithSmartcastToNothingBuilder.() -> Unit): FirWhenSubjectExpressionWithSmartcastToNothing {
return FirWhenSubjectExpressionWithSmartcastToNothingBuilder().apply(init).build()
}
@@ -19,6 +19,6 @@ abstract class FirWrappedExpressionWithSmartcastBuilder<E : FirExpression> {
abstract fun build(): E
}
abstract class FirWrappedExpressionWithSmartcastToNullBuilder<E : FirExpression> : FirWrappedExpressionWithSmartcastBuilder<E>() {
abstract class FirWrappedExpressionWithSmartcastToNothingBuilder<E : FirExpression> : FirWrappedExpressionWithSmartcastBuilder<E>() {
lateinit var smartcastTypeWithoutNullableNothing: FirTypeRef
}
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNull
import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcastToNothing
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -21,13 +21,13 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.fir.visitors.transformSingle
import org.jetbrains.kotlin.types.SmartcastStability
class FirExpressionWithSmartcastToNullImpl(
class FirExpressionWithSmartcastToNothingImpl(
override var originalExpression: FirQualifiedAccessExpression,
override val smartcastType: FirTypeRef,
override val typesFromSmartCast: Collection<ConeKotlinType>,
override val smartcastStability: SmartcastStability,
override val smartcastTypeWithoutNullableNothing: FirTypeRef
) : FirExpressionWithSmartcastToNull() {
) : FirExpressionWithSmartcastToNothing() {
init {
assert(originalExpression.typeRef is FirResolvedTypeRef)
}
@@ -48,7 +48,7 @@ class FirExpressionWithSmartcastToNullImpl(
// purpose only.
override val typeRef: FirTypeRef get() = if (isStable) smartcastType else originalType
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing {
originalExpression = originalExpression.transformSingle(transformer, data)
return this
}
@@ -57,27 +57,27 @@ class FirExpressionWithSmartcastToNullImpl(
originalExpression.accept(visitor, data)
}
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull {
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing {
throw IllegalStateException()
}
override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull {
override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing {
throw IllegalStateException()
}
override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull {
override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing {
throw IllegalStateException()
}
override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull {
override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing {
throw IllegalStateException()
}
override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull {
override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing {
throw IllegalStateException()
}
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull {
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNothing {
throw IllegalStateException()
}
@@ -16,13 +16,13 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.types.SmartcastStability
class FirWhenSubjectExpressionWithSmartcastToNullImpl(
class FirWhenSubjectExpressionWithSmartcastToNothingImpl(
override var originalExpression: FirWhenSubjectExpression,
override val smartcastType: FirTypeRef,
override val typesFromSmartCast: Collection<ConeKotlinType>,
override val smartcastStability: SmartcastStability,
override val smartcastTypeWithoutNullableNothing: FirTypeRef
) : FirWhenSubjectExpressionWithSmartcastToNull() {
) : FirWhenSubjectExpressionWithSmartcastToNothing() {
init {
assert(originalExpression.typeRef is FirResolvedTypeRef)
}
@@ -37,7 +37,7 @@ class FirWhenSubjectExpressionWithSmartcastToNullImpl(
override fun replaceTypeRef(newTypeRef: FirTypeRef) {}
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirWhenSubjectExpressionWithSmartcastToNullImpl {
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirWhenSubjectExpressionWithSmartcastToNothingImpl {
throw IllegalStateException()
}
@@ -45,7 +45,7 @@ class FirWhenSubjectExpressionWithSmartcastToNullImpl(
originalExpression.accept(visitor, data)
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirWhenSubjectExpressionWithSmartcastToNullImpl {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirWhenSubjectExpressionWithSmartcastToNothingImpl {
originalExpression = originalExpression.transform(transformer, data)
return this
}
@@ -121,9 +121,9 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val callableReferenceAccess by element(Expression, qualifiedAccessExpression)
val thisReceiverExpression by element(Expression, qualifiedAccessExpression)
val wrappedExpressionWithSmartcast by element(Expression)
val wrappedExpressionWithSmartcastToNull by element(Expression, wrappedExpressionWithSmartcast)
val wrappedExpressionWithSmartcastToNothing by element(Expression, wrappedExpressionWithSmartcast)
val expressionWithSmartcast by element(Expression, qualifiedAccessExpression, wrappedExpressionWithSmartcast)
val expressionWithSmartcastToNull by element(Expression, expressionWithSmartcast, wrappedExpressionWithSmartcastToNull)
val expressionWithSmartcastToNothing by element(Expression, expressionWithSmartcast, wrappedExpressionWithSmartcastToNothing)
val safeCallExpression by element(Expression, expression)
val checkedSafeCallSubject by element(Expression, expression)
val getClassCall by element(Expression, expression, call)
@@ -143,7 +143,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val variableAssignment by element(Expression, qualifiedAccess)
val whenSubjectExpression by element(Expression, expression)
val whenSubjectExpressionWithSmartcast by element(Expression, whenSubjectExpression, wrappedExpressionWithSmartcast)
val whenSubjectExpressionWithSmartcastToNull by element(Expression, whenSubjectExpression, wrappedExpressionWithSmartcastToNull)
val whenSubjectExpressionWithSmartcastToNothing by element(Expression, whenSubjectExpression, wrappedExpressionWithSmartcastToNothing)
val wrappedDelegateExpression by element(Expression, wrappedExpression)
@@ -190,10 +190,10 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
}
noImpl(expressionWithSmartcast)
noImpl(expressionWithSmartcastToNull)
noImpl(expressionWithSmartcastToNothing)
noImpl(whenSubjectExpressionWithSmartcast)
noImpl(whenSubjectExpressionWithSmartcastToNull)
noImpl(whenSubjectExpressionWithSmartcastToNothing)
impl(getClassCall) {
default("argument") {
@@ -501,7 +501,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+smartcastStability
}
wrappedExpressionWithSmartcastToNull.configure {
wrappedExpressionWithSmartcastToNothing.configure {
withArg("E", expression)
parentArg(wrappedExpressionWithSmartcast, "E", "E")
+field("smartcastTypeWithoutNullableNothing", typeRef)
@@ -511,8 +511,8 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
parentArg(wrappedExpressionWithSmartcast, "E", qualifiedAccessExpression)
}
expressionWithSmartcastToNull.configure {
parentArg(wrappedExpressionWithSmartcastToNull, "E", qualifiedAccessExpression)
expressionWithSmartcastToNothing.configure {
parentArg(wrappedExpressionWithSmartcastToNothing, "E", qualifiedAccessExpression)
}
safeCallExpression.configure {
@@ -585,8 +585,8 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
parentArg(wrappedExpressionWithSmartcast, "E", whenSubjectExpression)
}
whenSubjectExpressionWithSmartcastToNull.configure {
parentArg(wrappedExpressionWithSmartcastToNull, "E", whenSubjectExpression)
whenSubjectExpressionWithSmartcastToNothing.configure {
parentArg(wrappedExpressionWithSmartcastToNothing, "E", whenSubjectExpression)
}
wrappedExpression.configure {