[FIR] Implement Int -> Long conversions for literals and operators over them
^KT-38895 ^KT-50996 Fixed ^KT-51000 Fixed ^KT-51003 Fixed ^KT-51018 Fixed
This commit is contained in:
committed by
teamcity
parent
cc86ca2a0f
commit
52b72a7dac
+66
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirReference
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
import org.jetbrains.kotlin.fir.FirImplementationDetail
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
abstract class FirIntegerLiteralOperatorCall : FirFunctionCall() {
|
||||
abstract override val source: KtSourceElement?
|
||||
abstract override val typeRef: FirTypeRef
|
||||
abstract override val annotations: List<FirAnnotation>
|
||||
abstract override val typeArguments: List<FirTypeProjection>
|
||||
abstract override val explicitReceiver: FirExpression?
|
||||
abstract override val dispatchReceiver: FirExpression
|
||||
abstract override val extensionReceiver: FirExpression
|
||||
abstract override val argumentList: FirArgumentList
|
||||
abstract override val calleeReference: FirNamedReference
|
||||
abstract override val origin: FirFunctionCallOrigin
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitIntegerLiteralOperatorCall(this, data)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
||||
transformer.transformIntegerLiteralOperatorCall(this, data) as E
|
||||
|
||||
@FirImplementationDetail
|
||||
abstract override fun replaceSource(newSource: KtSourceElement?)
|
||||
|
||||
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
|
||||
|
||||
abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
|
||||
|
||||
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
|
||||
|
||||
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
|
||||
|
||||
abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference)
|
||||
|
||||
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
|
||||
|
||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCall
|
||||
|
||||
abstract override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCall
|
||||
|
||||
abstract override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCall
|
||||
|
||||
abstract override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCall
|
||||
|
||||
abstract override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCall
|
||||
|
||||
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCall
|
||||
}
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.builder
|
||||
|
||||
import kotlin.contracts.*
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirImplementationDetail
|
||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCallOrigin
|
||||
import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirAbstractFunctionCallBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirIntegerLiteralOperatorCallImpl
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirReference
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
@FirBuilderDsl
|
||||
open class FirIntegerLiteralOperatorCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
|
||||
override var source: KtSourceElement? = null
|
||||
override lateinit var typeRef: FirTypeRef
|
||||
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
|
||||
override var explicitReceiver: FirExpression? = null
|
||||
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
|
||||
override var extensionReceiver: FirExpression = FirNoReceiverExpression
|
||||
override var argumentList: FirArgumentList = FirEmptyArgumentList
|
||||
override lateinit var calleeReference: FirNamedReference
|
||||
override lateinit var origin: FirFunctionCallOrigin
|
||||
|
||||
override fun build(): FirIntegerLiteralOperatorCall {
|
||||
return FirIntegerLiteralOperatorCallImpl(
|
||||
source,
|
||||
typeRef,
|
||||
annotations,
|
||||
typeArguments,
|
||||
explicitReceiver,
|
||||
dispatchReceiver,
|
||||
extensionReceiver,
|
||||
argumentList,
|
||||
calleeReference,
|
||||
origin,
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildIntegerLiteralOperatorCall(init: FirIntegerLiteralOperatorCallBuilder.() -> Unit): FirIntegerLiteralOperatorCall {
|
||||
contract {
|
||||
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return FirIntegerLiteralOperatorCallBuilder().apply(init).build()
|
||||
}
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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 org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCallOrigin
|
||||
import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall
|
||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirReference
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
import org.jetbrains.kotlin.fir.FirImplementationDetail
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
internal class FirIntegerLiteralOperatorCallImpl(
|
||||
override var source: KtSourceElement?,
|
||||
override var typeRef: FirTypeRef,
|
||||
override val annotations: MutableList<FirAnnotation>,
|
||||
override val typeArguments: MutableList<FirTypeProjection>,
|
||||
override var explicitReceiver: FirExpression?,
|
||||
override var dispatchReceiver: FirExpression,
|
||||
override var extensionReceiver: FirExpression,
|
||||
override var argumentList: FirArgumentList,
|
||||
override var calleeReference: FirNamedReference,
|
||||
override val origin: FirFunctionCallOrigin,
|
||||
) : FirIntegerLiteralOperatorCall() {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
typeRef.accept(visitor, data)
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
typeArguments.forEach { it.accept(visitor, data) }
|
||||
explicitReceiver?.accept(visitor, data)
|
||||
if (dispatchReceiver !== explicitReceiver) {
|
||||
dispatchReceiver.accept(visitor, data)
|
||||
}
|
||||
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
|
||||
extensionReceiver.accept(visitor, data)
|
||||
}
|
||||
argumentList.accept(visitor, data)
|
||||
calleeReference.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCallImpl {
|
||||
typeRef = typeRef.transform(transformer, data)
|
||||
transformAnnotations(transformer, data)
|
||||
transformTypeArguments(transformer, data)
|
||||
explicitReceiver = explicitReceiver?.transform(transformer, data)
|
||||
if (dispatchReceiver !== explicitReceiver) {
|
||||
dispatchReceiver = dispatchReceiver.transform(transformer, data)
|
||||
}
|
||||
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
|
||||
extensionReceiver = extensionReceiver.transform(transformer, data)
|
||||
}
|
||||
argumentList = argumentList.transform(transformer, data)
|
||||
transformCalleeReference(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCallImpl {
|
||||
annotations.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCallImpl {
|
||||
typeArguments.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCallImpl {
|
||||
explicitReceiver = explicitReceiver?.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCallImpl {
|
||||
dispatchReceiver = dispatchReceiver.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCallImpl {
|
||||
extensionReceiver = extensionReceiver.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCallImpl {
|
||||
calleeReference = calleeReference.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
@FirImplementationDetail
|
||||
override fun replaceSource(newSource: KtSourceElement?) {
|
||||
source = newSource
|
||||
}
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
typeRef = newTypeRef
|
||||
}
|
||||
|
||||
override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) {
|
||||
typeArguments.clear()
|
||||
typeArguments.addAll(newTypeArguments)
|
||||
}
|
||||
|
||||
override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) {
|
||||
explicitReceiver = newExplicitReceiver
|
||||
}
|
||||
|
||||
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
|
||||
argumentList = newArgumentList
|
||||
}
|
||||
|
||||
override fun replaceCalleeReference(newCalleeReference: FirNamedReference) {
|
||||
calleeReference = newCalleeReference
|
||||
}
|
||||
|
||||
override fun replaceCalleeReference(newCalleeReference: FirReference) {
|
||||
require(newCalleeReference is FirNamedReference)
|
||||
replaceCalleeReference(newCalleeReference)
|
||||
}
|
||||
}
|
||||
@@ -91,6 +91,7 @@ import org.jetbrains.kotlin.fir.declarations.FirErrorProperty
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
@@ -213,6 +214,8 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
|
||||
|
||||
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: D): R = visitQualifiedAccessExpression(propertyAccessExpression, data)
|
||||
|
||||
override fun visitIntegerLiteralOperatorCall(integerLiteralOperatorCall: FirIntegerLiteralOperatorCall, data: D): R = visitFunctionCall(integerLiteralOperatorCall, data)
|
||||
|
||||
override fun visitImplicitInvokeCall(implicitInvokeCall: FirImplicitInvokeCall, data: D): R = visitFunctionCall(implicitInvokeCall, data)
|
||||
|
||||
override fun visitComponentCall(componentCall: FirComponentCall, data: D): R = visitFunctionCall(componentCall, data)
|
||||
|
||||
@@ -91,6 +91,7 @@ import org.jetbrains.kotlin.fir.declarations.FirErrorProperty
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
@@ -213,6 +214,8 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
|
||||
|
||||
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression) = visitQualifiedAccessExpression(propertyAccessExpression)
|
||||
|
||||
override fun visitIntegerLiteralOperatorCall(integerLiteralOperatorCall: FirIntegerLiteralOperatorCall) = visitFunctionCall(integerLiteralOperatorCall)
|
||||
|
||||
override fun visitImplicitInvokeCall(implicitInvokeCall: FirImplicitInvokeCall) = visitFunctionCall(implicitInvokeCall)
|
||||
|
||||
override fun visitComponentCall(componentCall: FirComponentCall) = visitFunctionCall(componentCall)
|
||||
|
||||
@@ -91,6 +91,7 @@ import org.jetbrains.kotlin.fir.declarations.FirErrorProperty
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
@@ -492,6 +493,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
||||
return transformElement(functionCall, data)
|
||||
}
|
||||
|
||||
open fun transformIntegerLiteralOperatorCall(integerLiteralOperatorCall: FirIntegerLiteralOperatorCall, data: D): FirStatement {
|
||||
return transformElement(integerLiteralOperatorCall, data)
|
||||
}
|
||||
|
||||
open fun transformImplicitInvokeCall(implicitInvokeCall: FirImplicitInvokeCall, data: D): FirStatement {
|
||||
return transformElement(implicitInvokeCall, data)
|
||||
}
|
||||
@@ -1040,6 +1045,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
||||
return transformFunctionCall(functionCall, data)
|
||||
}
|
||||
|
||||
final override fun visitIntegerLiteralOperatorCall(integerLiteralOperatorCall: FirIntegerLiteralOperatorCall, data: D): FirStatement {
|
||||
return transformIntegerLiteralOperatorCall(integerLiteralOperatorCall, data)
|
||||
}
|
||||
|
||||
final override fun visitImplicitInvokeCall(implicitInvokeCall: FirImplicitInvokeCall, data: D): FirStatement {
|
||||
return transformImplicitInvokeCall(implicitInvokeCall, data)
|
||||
}
|
||||
|
||||
@@ -91,6 +91,7 @@ import org.jetbrains.kotlin.fir.declarations.FirErrorProperty
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
@@ -321,6 +322,8 @@ abstract class FirVisitor<out R, in D> {
|
||||
|
||||
open fun visitFunctionCall(functionCall: FirFunctionCall, data: D): R = visitElement(functionCall, data)
|
||||
|
||||
open fun visitIntegerLiteralOperatorCall(integerLiteralOperatorCall: FirIntegerLiteralOperatorCall, data: D): R = visitElement(integerLiteralOperatorCall, data)
|
||||
|
||||
open fun visitImplicitInvokeCall(implicitInvokeCall: FirImplicitInvokeCall, data: D): R = visitElement(implicitInvokeCall, data)
|
||||
|
||||
open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): R = visitElement(delegatedConstructorCall, data)
|
||||
|
||||
@@ -91,6 +91,7 @@ import org.jetbrains.kotlin.fir.declarations.FirErrorProperty
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
@@ -491,6 +492,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitElement(functionCall)
|
||||
}
|
||||
|
||||
open fun visitIntegerLiteralOperatorCall(integerLiteralOperatorCall: FirIntegerLiteralOperatorCall) {
|
||||
visitElement(integerLiteralOperatorCall)
|
||||
}
|
||||
|
||||
open fun visitImplicitInvokeCall(implicitInvokeCall: FirImplicitInvokeCall) {
|
||||
visitElement(implicitInvokeCall)
|
||||
}
|
||||
@@ -1039,6 +1044,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitFunctionCall(functionCall)
|
||||
}
|
||||
|
||||
final override fun visitIntegerLiteralOperatorCall(integerLiteralOperatorCall: FirIntegerLiteralOperatorCall, data: Nothing?) {
|
||||
visitIntegerLiteralOperatorCall(integerLiteralOperatorCall)
|
||||
}
|
||||
|
||||
final override fun visitImplicitInvokeCall(implicitInvokeCall: FirImplicitInvokeCall, data: Nothing?) {
|
||||
visitImplicitInvokeCall(implicitInvokeCall)
|
||||
}
|
||||
|
||||
@@ -1321,6 +1321,10 @@ open class FirRenderer(builder: StringBuilder, protected val mode: RenderMode =
|
||||
visitCall(functionCall)
|
||||
}
|
||||
|
||||
override fun visitIntegerLiteralOperatorCall(integerLiteralOperatorCall: FirIntegerLiteralOperatorCall) {
|
||||
visitFunctionCall(integerLiteralOperatorCall)
|
||||
}
|
||||
|
||||
override fun visitImplicitInvokeCall(implicitInvokeCall: FirImplicitInvokeCall) {
|
||||
visitFunctionCall(implicitInvokeCall)
|
||||
}
|
||||
|
||||
@@ -65,6 +65,10 @@ class BuiltinTypes {
|
||||
val longType: FirImplicitBuiltinTypeRef = FirImplicitLongTypeRef(null)
|
||||
val doubleType: FirImplicitBuiltinTypeRef = FirImplicitDoubleTypeRef(null)
|
||||
val floatType: FirImplicitBuiltinTypeRef = FirImplicitFloatTypeRef(null)
|
||||
|
||||
val uIntType: FirImplicitUIntTypeRef = FirImplicitUIntTypeRef(null)
|
||||
val uLongType: FirImplicitULongTypeRef = FirImplicitULongTypeRef(null)
|
||||
|
||||
val nothingType: FirImplicitBuiltinTypeRef = FirImplicitNothingTypeRef(null)
|
||||
val nullableNothingType: FirImplicitBuiltinTypeRef = FirImplicitNullableNothingTypeRef(null)
|
||||
val charType: FirImplicitBuiltinTypeRef = FirImplicitCharTypeRef(null)
|
||||
|
||||
@@ -19,6 +19,7 @@ sealed class FirDeclarationOrigin(private val displayName: String? = null, val f
|
||||
object IntersectionOverride : FirDeclarationOrigin(fromSupertypes = true)
|
||||
object Delegated : FirDeclarationOrigin()
|
||||
object RenamedForOverride : FirDeclarationOrigin()
|
||||
object WrappedIntegerOperator : FirDeclarationOrigin()
|
||||
|
||||
class Plugin(val key: FirPluginKey) : FirDeclarationOrigin(displayName = "Plugin[$key]", generated = true)
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.approxima
|
||||
import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.createClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.createSupertypeList
|
||||
import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.getApproximatedTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.withNullability
|
||||
import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralTypeExtensions.withNullabilityAndAttributes
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||
@@ -68,7 +68,7 @@ class ConeIntegerLiteralConstantTypeImpl(
|
||||
addSignedPossibleTypes()
|
||||
}
|
||||
return if (possibleTypes.size == 1) {
|
||||
possibleTypes.single().withNullability(nullability).also {
|
||||
possibleTypes.single().withNullabilityAndAttributes(nullability, ConeAttributes.Empty).also {
|
||||
if (AbstractTypeChecker.RUN_SLOW_ASSERTIONS) {
|
||||
assert(it.isLong() || it.isULong())
|
||||
}
|
||||
@@ -149,12 +149,12 @@ private object ConeIntegerLiteralTypeExtensions {
|
||||
|
||||
fun ConeIntegerLiteralType.getApproximatedTypeImpl(expectedType: ConeKotlinType?): ConeClassLikeType {
|
||||
val expectedTypeForApproximation = (expectedType?.lowerBoundIfFlexible() as? ConeClassLikeType)
|
||||
?.withNullability(ConeNullability.NOT_NULL)
|
||||
?.withNullabilityAndAttributes(ConeNullability.NOT_NULL, ConeAttributes.Empty)
|
||||
val approximatedType = when (expectedTypeForApproximation) {
|
||||
null, !in possibleTypes -> possibleTypes.first()
|
||||
else -> expectedTypeForApproximation
|
||||
}
|
||||
return approximatedType.withNullability(nullability)
|
||||
return approximatedType.withNullabilityAndAttributes(nullability, attributes)
|
||||
}
|
||||
|
||||
|
||||
@@ -218,12 +218,12 @@ private object ConeIntegerLiteralTypeExtensions {
|
||||
return this
|
||||
}
|
||||
|
||||
fun ConeClassLikeType.withNullability(nullability: ConeNullability): ConeClassLikeType {
|
||||
if (nullability == this.nullability) return this
|
||||
fun ConeClassLikeType.withNullabilityAndAttributes(nullability: ConeNullability, attributes: ConeAttributes): ConeClassLikeType {
|
||||
if (nullability == this.nullability && attributes == this.attributes) return this
|
||||
|
||||
return when (this) {
|
||||
is ConeErrorType -> this
|
||||
is ConeClassLikeTypeImpl -> ConeClassLikeTypeImpl(lookupTag, typeArguments, nullability.isNullable)
|
||||
is ConeClassLikeTypeImpl -> ConeClassLikeTypeImpl(lookupTag, typeArguments, nullability.isNullable, attributes)
|
||||
else -> error("sealed")
|
||||
}
|
||||
}
|
||||
|
||||
+10
@@ -93,6 +93,14 @@ class FirImplicitFloatTypeRef(
|
||||
source: KtSourceElement?
|
||||
) : FirImplicitBuiltinTypeRef(source, StandardClassIds.Float)
|
||||
|
||||
class FirImplicitUIntTypeRef(
|
||||
source: KtSourceElement?
|
||||
) : FirImplicitBuiltinTypeRef(source, StandardClassIds.UInt)
|
||||
|
||||
class FirImplicitULongTypeRef(
|
||||
source: KtSourceElement?
|
||||
) : FirImplicitBuiltinTypeRef(source, StandardClassIds.ULong)
|
||||
|
||||
class FirImplicitNothingTypeRef(
|
||||
source: KtSourceElement?
|
||||
) : FirImplicitBuiltinTypeRef(source, StandardClassIds.Nothing)
|
||||
@@ -177,6 +185,8 @@ fun FirImplicitBuiltinTypeRef.withFakeSource(kind: KtFakeSourceElementKind): Fir
|
||||
is FirImplicitLongTypeRef -> FirImplicitLongTypeRef(newSource)
|
||||
is FirImplicitDoubleTypeRef -> FirImplicitDoubleTypeRef(newSource)
|
||||
is FirImplicitFloatTypeRef -> FirImplicitFloatTypeRef(newSource)
|
||||
is FirImplicitUIntTypeRef -> FirImplicitUIntTypeRef(newSource)
|
||||
is FirImplicitULongTypeRef -> FirImplicitULongTypeRef(newSource)
|
||||
is FirImplicitNothingTypeRef -> FirImplicitNothingTypeRef(newSource)
|
||||
is FirImplicitNullableNothingTypeRef -> FirImplicitNullableNothingTypeRef(newSource)
|
||||
is FirImplicitCharTypeRef -> FirImplicitCharTypeRef(newSource)
|
||||
|
||||
+1
@@ -192,6 +192,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
value = "FirFunctionCallOrigin.Regular"
|
||||
}
|
||||
}
|
||||
builder(integerLiteralOperatorCall, init = configurationForFunctionCallBuilder)
|
||||
builder(implicitInvokeCall, init = configurationForFunctionCallBuilder)
|
||||
|
||||
builder(getClassCall) {
|
||||
|
||||
+1
@@ -111,6 +111,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val qualifiedAccessExpression by element(Expression, expression, qualifiedAccess)
|
||||
val propertyAccessExpression by element(Expression, qualifiedAccessExpression)
|
||||
val functionCall by element(Expression, qualifiedAccessExpression, call)
|
||||
val integerLiteralOperatorCall by element(Expression, functionCall)
|
||||
val implicitInvokeCall by element(Expression, functionCall)
|
||||
val delegatedConstructorCall by element(Expression, resolvable, call)
|
||||
val componentCall by element(Expression, functionCall)
|
||||
|
||||
+1
@@ -560,6 +560,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
"FirSafeCallExpressionImpl",
|
||||
"FirCheckedSafeCallSubjectImpl",
|
||||
"FirArrayOfCallImpl",
|
||||
"FirIntegerLiteralOperatorCallImpl"
|
||||
)
|
||||
configureFieldInAllImplementations(
|
||||
field = "typeRef",
|
||||
|
||||
Reference in New Issue
Block a user