[FIR] Resolve infix calls to infix functions only
Implements INFIX_MODIFIER_REQUIRED diagnostics
This commit is contained in:
committed by
TeamCityServer
parent
df14deb5a0
commit
b1c8669b43
+3
@@ -233,6 +233,9 @@ object DIAGNOSTICS_LIST : DiagnosticList() {
|
||||
parameter<FirNamedFunctionSymbol>("functionSymbol")
|
||||
parameter<String>("name")
|
||||
}
|
||||
val INFIX_MODIFIER_REQUIRED by error<PsiElement> {
|
||||
parameter<FirNamedFunctionSymbol>("functionSymbol")
|
||||
}
|
||||
}
|
||||
|
||||
val INLINE_CLASSES by object : DiagnosticGroup("Inline classes") {
|
||||
|
||||
@@ -209,6 +209,7 @@ object FirErrors {
|
||||
val REDUNDANT_OPEN_IN_INTERFACE by warning0<KtModifierListOwner>(SourceElementPositioningStrategies.OPEN_MODIFIER)
|
||||
val WRONG_MODIFIER_TARGET by error2<PsiElement, KtModifierKeywordToken, String>()
|
||||
val OPERATOR_MODIFIER_REQUIRED by error2<PsiElement, FirNamedFunctionSymbol, String>()
|
||||
val INFIX_MODIFIER_REQUIRED by error1<PsiElement, FirNamedFunctionSymbol>()
|
||||
|
||||
// Inline classes
|
||||
val INLINE_CLASS_NOT_TOP_LEVEL by error0<KtDeclaration>(SourceElementPositioningStrategies.INLINE_OR_VALUE_MODIFIER)
|
||||
|
||||
+5
-3
@@ -82,9 +82,11 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
|
||||
|
||||
override fun visitFunctionCall(functionCall: FirFunctionCall, data: CheckerContext) {
|
||||
val targetSymbol = functionCall.toResolvedCallableSymbol()
|
||||
checkReceiversOfQualifiedAccessExpression(functionCall, targetSymbol, data)
|
||||
checkArgumentsOfCall(functionCall, targetSymbol, data)
|
||||
checkQualifiedAccess(functionCall, targetSymbol, data)
|
||||
if (targetSymbol != null) {
|
||||
checkReceiversOfQualifiedAccessExpression(functionCall, targetSymbol, data)
|
||||
checkArgumentsOfCall(functionCall, targetSymbol, data)
|
||||
checkQualifiedAccess(functionCall, targetSymbol, data)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: CheckerContext) {
|
||||
|
||||
+2
@@ -154,6 +154,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INCOMPATIBLE_MODI
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INCOMPATIBLE_TYPES
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INCOMPATIBLE_TYPES_WARNING
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INFERENCE_ERROR
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INFIX_MODIFIER_REQUIRED
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INITIALIZER_REQUIRED_FOR_DESTRUCTURING_DECLARATION
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INITIALIZER_TYPE_MISMATCH
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INLINE_CLASS_CANNOT_BE_RECURSIVE
|
||||
@@ -539,6 +540,7 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension {
|
||||
map.put(INCOMPATIBLE_MODIFIERS, "Modifier ''{0}'' is incompatible with ''{1}''", TO_STRING, TO_STRING)
|
||||
map.put(REDUNDANT_OPEN_IN_INTERFACE, "Modifier 'open' is redundant for abstract interface members")
|
||||
map.put(WRONG_MODIFIER_TARGET, "Modifier ''{0}'' is not applicable to ''{1}''", TO_STRING, TO_STRING)
|
||||
map.put(INFIX_MODIFIER_REQUIRED, "''infix'' modifier is required on ''{0}''", TO_STRING)
|
||||
|
||||
// Classes and interfaces
|
||||
map.put(SUPERTYPE_NOT_INITIALIZED, "This type has a constructor, and thus must be initialized here")
|
||||
|
||||
+1
@@ -142,6 +142,7 @@ private fun mapInapplicableCandidateError(
|
||||
)
|
||||
is UnsafeCall -> mapUnsafeCallError(diagnostic.candidate, rootCause, source, qualifiedAccessSource)
|
||||
is ManyLambdaExpressionArguments -> FirErrors.MANY_LAMBDA_EXPRESSION_ARGUMENTS.on(rootCause.argument.source ?: source)
|
||||
is InfixCallOfNonInfixFunction -> FirErrors.INFIX_MODIFIER_REQUIRED.on(source, rootCause.function)
|
||||
else -> null
|
||||
}
|
||||
}.ifEmpty { listOf(FirErrors.INAPPLICABLE_CANDIDATE.on(source, diagnostic.candidate.symbol)) }
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@ object CommonExpressionCheckers : ExpressionCheckers() {
|
||||
get() = setOf(
|
||||
FirConventionFunctionCallChecker,
|
||||
FirDivisionByZeroChecker,
|
||||
FirConstructorCallChecker
|
||||
FirConstructorCallChecker,
|
||||
)
|
||||
|
||||
override val tryExpressionCheckers: Set<FirTryExpressionChecker>
|
||||
|
||||
@@ -1889,6 +1889,7 @@ open class RawFirBuilder(
|
||||
}
|
||||
explicitReceiver = leftArgument
|
||||
argumentList = buildUnaryArgumentList(rightArgument)
|
||||
origin = if (conventionCallName != null) FirFunctionCallOrigin.REGULAR else FirFunctionCallOrigin.INFIX
|
||||
}
|
||||
} else {
|
||||
val firOperation = operationToken.toFirOperation()
|
||||
|
||||
@@ -153,15 +153,28 @@ class FirCallResolver(
|
||||
towerResolver.reset()
|
||||
val result = towerResolver.runResolver(info, transformer.resolutionContext)
|
||||
val bestCandidates = result.bestCandidates()
|
||||
var reducedCandidates = if (!result.currentApplicability.isSuccess) {
|
||||
bestCandidates.toSet()
|
||||
} else {
|
||||
|
||||
fun chooseMostSpecific(): Set<Candidate> {
|
||||
val onSuperReference = (explicitReceiver as? FirQualifiedAccessExpression)?.calleeReference is FirSuperReference
|
||||
conflictResolver.chooseMaximallySpecificCandidates(
|
||||
return conflictResolver.chooseMaximallySpecificCandidates(
|
||||
bestCandidates, discriminateGenerics = true, discriminateAbstracts = onSuperReference
|
||||
)
|
||||
}
|
||||
|
||||
var reducedCandidates = if (!result.currentApplicability.isSuccess) {
|
||||
val distinctApplicabilities = bestCandidates.flatMapTo(mutableSetOf()) { candidate ->
|
||||
candidate.diagnostics.map { it.applicability }
|
||||
}
|
||||
//if all candidates have the same kind on inApplicability - try to choose the most specific one
|
||||
if (distinctApplicabilities.size == 1 && distinctApplicabilities.single() > CandidateApplicability.INAPPLICABLE) {
|
||||
chooseMostSpecific()
|
||||
} else {
|
||||
bestCandidates.toSet()
|
||||
}
|
||||
} else {
|
||||
chooseMostSpecific()
|
||||
}
|
||||
|
||||
reducedCandidates = overloadByLambdaReturnTypeResolver.reduceCandidates(qualifiedAccess, bestCandidates, reducedCandidates)
|
||||
|
||||
return ResolutionResult(info, result.currentApplicability, reducedCandidates)
|
||||
|
||||
@@ -39,6 +39,7 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
|
||||
CheckDispatchReceiver,
|
||||
CheckExtensionReceiver,
|
||||
CheckArguments,
|
||||
CheckInfixCall,
|
||||
EagerResolveOfCallableReferences,
|
||||
CheckLowPriorityInOverloadResolution,
|
||||
PostponedVariablesInitializerResolutionStage
|
||||
|
||||
+4
-1
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
|
||||
import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability
|
||||
@@ -101,4 +102,6 @@ class NullForNotNullType(
|
||||
|
||||
class ManyLambdaExpressionArguments(
|
||||
val argument: FirExpression
|
||||
) : ResolutionDiagnostic(INAPPLICABLE_ARGUMENTS_MAPPING_ERROR)
|
||||
) : ResolutionDiagnostic(INAPPLICABLE_ARGUMENTS_MAPPING_ERROR)
|
||||
|
||||
class InfixCallOfNonInfixFunction(val function: FirNamedFunctionSymbol) : ResolutionDiagnostic(INAPPLICABLE_MODIFIER)
|
||||
+15
-3
@@ -9,15 +9,14 @@ import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.FirSymbolOwner
|
||||
import org.jetbrains.kotlin.fir.FirVisibilityChecker
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.*
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.SyntheticSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.typeContext
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -267,3 +266,16 @@ internal object PostponedVariablesInitializerResolutionStage : ResolutionStage()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal object CheckInfixCall : CheckerStage() {
|
||||
override suspend fun check(candidate: Candidate, callInfo: CallInfo, sink: CheckerSink, context: ResolutionContext) {
|
||||
if (callInfo.callSite is FirFunctionCall) {
|
||||
if (callInfo.callSite.origin == FirFunctionCallOrigin.INFIX) {
|
||||
val functionSymbol = candidate.symbol as? FirNamedFunctionSymbol ?: return
|
||||
if (!functionSymbol.fir.isInfix) {
|
||||
sink.reportDiagnostic(InfixCallOfNonInfixFunction(functionSymbol))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
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.builder.FirCallBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessBuilder
|
||||
@@ -43,6 +44,7 @@ class FirIntegerOperatorCall @FirImplementationDetail constructor(
|
||||
extensionReceiver,
|
||||
argumentList,
|
||||
calleeReference,
|
||||
FirFunctionCallOrigin.OPERATOR
|
||||
)
|
||||
|
||||
@FirBuilderDsl
|
||||
|
||||
@@ -28,6 +28,7 @@ abstract class FirComponentCall : FirFunctionCall() {
|
||||
abstract override val extensionReceiver: FirExpression
|
||||
abstract override val argumentList: FirArgumentList
|
||||
abstract override val calleeReference: FirNamedReference
|
||||
abstract override val origin: FirFunctionCallOrigin
|
||||
abstract override val explicitReceiver: FirExpression
|
||||
abstract val componentIndex: Int
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
|
||||
abstract override val extensionReceiver: FirExpression
|
||||
abstract override val argumentList: FirArgumentList
|
||||
abstract override val calleeReference: FirNamedReference
|
||||
abstract val origin: FirFunctionCallOrigin
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitFunctionCall(this, data)
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
|
||||
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.visitImplicitInvokeCall(this, data)
|
||||
|
||||
|
||||
+2
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCallOrigin
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessBuilder
|
||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||
@@ -34,5 +35,6 @@ interface FirAbstractFunctionCallBuilder : FirQualifiedAccessBuilder, FirCallBui
|
||||
abstract override var argumentList: FirArgumentList
|
||||
abstract var typeRef: FirTypeRef
|
||||
abstract var calleeReference: FirNamedReference
|
||||
abstract var origin: FirFunctionCallOrigin
|
||||
override fun build(): FirFunctionCall
|
||||
}
|
||||
|
||||
+1
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
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.builder.FirCallBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirComponentCallImpl
|
||||
|
||||
+3
@@ -15,6 +15,7 @@ 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.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCallOrigin
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirAbstractFunctionCallBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirFunctionCallImpl
|
||||
@@ -42,6 +43,7 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio
|
||||
override var extensionReceiver: FirExpression = FirNoReceiverExpression
|
||||
override var argumentList: FirArgumentList = FirEmptyArgumentList
|
||||
override lateinit var calleeReference: FirNamedReference
|
||||
override var origin: FirFunctionCallOrigin = FirFunctionCallOrigin.REGULAR
|
||||
|
||||
@OptIn(FirImplementationDetail::class)
|
||||
override fun build(): FirFunctionCall {
|
||||
@@ -55,6 +57,7 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio
|
||||
extensionReceiver,
|
||||
argumentList,
|
||||
calleeReference,
|
||||
origin,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+8
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
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.FirImplicitInvokeCall
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirAbstractFunctionCallBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
|
||||
@@ -62,6 +63,13 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn
|
||||
set(_) {
|
||||
throw IllegalStateException()
|
||||
}
|
||||
|
||||
@Deprecated("Modification of 'origin' has no impact for FirImplicitInvokeCallBuilder", level = DeprecationLevel.HIDDEN)
|
||||
override var origin: FirFunctionCallOrigin
|
||||
get() = throw IllegalStateException()
|
||||
set(_) {
|
||||
throw IllegalStateException()
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
|
||||
+2
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCallOrigin
|
||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirReference
|
||||
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
|
||||
@@ -38,6 +39,7 @@ internal class FirComponentCallImpl(
|
||||
) : FirComponentCall() {
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
|
||||
override var calleeReference: FirNamedReference = FirSimpleNamedReference(source, Name.identifier("component$componentIndex"), null)
|
||||
override val origin: FirFunctionCallOrigin = FirFunctionCallOrigin.REGULAR
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
typeRef.accept(visitor, data)
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCallOrigin
|
||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirReference
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
@@ -32,6 +33,7 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
|
||||
override var extensionReceiver: FirExpression,
|
||||
override var argumentList: FirArgumentList,
|
||||
override var calleeReference: FirNamedReference,
|
||||
override val origin: FirFunctionCallOrigin,
|
||||
) : FirFunctionCall() {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
typeRef.accept(visitor, data)
|
||||
|
||||
+2
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
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.FirImplicitInvokeCall
|
||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirReference
|
||||
@@ -34,6 +35,7 @@ internal class FirImplicitInvokeCallImpl(
|
||||
override var calleeReference: FirNamedReference,
|
||||
) : FirImplicitInvokeCall() {
|
||||
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
|
||||
override val origin: FirFunctionCallOrigin = FirFunctionCallOrigin.REGULAR
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
typeRef.accept(visitor, data)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
enum class FirFunctionCallOrigin {
|
||||
REGULAR, INFIX, OPERATOR
|
||||
}
|
||||
+6
-1
@@ -176,7 +176,12 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
useTypes(emptyArgumentListType)
|
||||
}
|
||||
|
||||
builder(functionCall, init = configurationForFunctionCallBuilder)
|
||||
builder(functionCall) {
|
||||
configurationForFunctionCallBuilder()
|
||||
default("origin") {
|
||||
value = "FirFunctionCallOrigin.REGULAR"
|
||||
}
|
||||
}
|
||||
builder(implicitInvokeCall, init = configurationForFunctionCallBuilder)
|
||||
|
||||
builder(qualifiedAccessExpression) {
|
||||
|
||||
+12
@@ -153,6 +153,18 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
kind = OpenClass
|
||||
}
|
||||
|
||||
fun ImplementationContext.defaultFunctionOrigin() {
|
||||
default("origin", "FirFunctionCallOrigin.REGULAR")
|
||||
}
|
||||
|
||||
impl(implicitInvokeCall) {
|
||||
defaultFunctionOrigin()
|
||||
}
|
||||
|
||||
impl(componentCall) {
|
||||
defaultFunctionOrigin()
|
||||
}
|
||||
|
||||
impl(qualifiedAccessExpression)
|
||||
|
||||
noImpl(expressionWithSmartcast)
|
||||
|
||||
+1
@@ -207,6 +207,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
|
||||
functionCall.configure {
|
||||
+field("calleeReference", namedReference)
|
||||
+field("origin", functionCallOrigin)
|
||||
}
|
||||
|
||||
comparisonExpression.configure {
|
||||
|
||||
@@ -86,3 +86,5 @@ val annotationResolveStatusType = generatedType("expressions", "FirAnnotationRes
|
||||
val exhaustivenessStatusType = generatedType("expressions", "ExhaustivenessStatus")
|
||||
|
||||
val callableReferenceMappedArgumentsType = type("fir.resolve.calls", "CallableReferenceMappedArguments")
|
||||
|
||||
val functionCallOrigin = type("fir.expressions", "FirFunctionCallOrigin")
|
||||
|
||||
Reference in New Issue
Block a user