K2: store imported static qualifiers in dispatch receiver field
This is a partial revert of commit 104fd4c1
#KT-55116 Fixed
This commit is contained in:
committed by
Space Team
parent
416d4f57eb
commit
aafde418cc
@@ -1,4 +1,4 @@
|
|||||||
FILE: main.kt
|
FILE: main.kt
|
||||||
public final fun test(list: R|kotlin/collections/List<kotlin/String>|, string: R|kotlin/String|): R|kotlin/Unit| {
|
public final fun test(list: R|kotlin/collections/List<kotlin/String>|, string: R|kotlin/String|): R|kotlin/Unit| {
|
||||||
R|/Matchers.assertThat|<R|ft<kotlin/collections/List<kotlin/String>, kotlin/collections/List<kotlin/String>?>|>(R|<local>/list|, R|/Matchers.hasItem|<R|kotlin/String!|>(R|<local>/string|))
|
Q|Matchers|.R|/Matchers.assertThat|<R|ft<kotlin/collections/List<kotlin/String>, kotlin/collections/List<kotlin/String>?>|>(R|<local>/list|, Q|Matchers|.R|/Matchers.hasItem|<R|kotlin/String!|>(R|<local>/string|))
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
FILE: FlexiblePrimitiveOverloading.kt
|
FILE: FlexiblePrimitiveOverloading.kt
|
||||||
public final fun foo(): R|kotlin/Unit| {
|
public final fun foo(): R|kotlin/Unit| {
|
||||||
R|java/lang/Integer.getInteger|(String(text), Int(239))
|
Q|java/lang/Integer|.R|java/lang/Integer.getInteger|(String(text), Int(239))
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -2,8 +2,8 @@ FILE: test.kt
|
|||||||
public final fun foo(): R|kotlin/Unit| {
|
public final fun foo(): R|kotlin/Unit| {
|
||||||
lval externalsMap: R|kotlin/collections/MutableMap<java/io/File, kotlin/String?>| = R|kotlin/collections/mutableMapOf|<R|java/io/File|, R|kotlin/String?|>()
|
lval externalsMap: R|kotlin/collections/MutableMap<java/io/File, kotlin/String?>| = R|kotlin/collections/mutableMapOf|<R|java/io/File|, R|kotlin/String?|>()
|
||||||
local final fun test(file: R|java/io/File|): R|kotlin/Unit| {
|
local final fun test(file: R|java/io/File|): R|kotlin/Unit| {
|
||||||
lval base: R|java/io/File!| = R|your/ContainerUtil.find|<R|java/io/File!|>(R|<local>/externalsMap|.R|SubstitutionOverride<kotlin/collections/MutableMap.keys: R|kotlin/collections/MutableSet<java/io/File>|>|, <L> = find@fun <anonymous>(it: R|java/io/File!|): R|kotlin/Boolean| <inline=NoInline> {
|
lval base: R|java/io/File!| = Q|your/ContainerUtil|.R|your/ContainerUtil.find|<R|java/io/File!|>(R|<local>/externalsMap|.R|SubstitutionOverride<kotlin/collections/MutableMap.keys: R|kotlin/collections/MutableSet<java/io/File>|>|, <L> = find@fun <anonymous>(it: R|java/io/File!|): R|kotlin/Boolean| <inline=NoInline> {
|
||||||
^ R|my/FileUtil.isAncestor|(R|<local>/it|, R|<local>/file|, Boolean(false))
|
^ Q|my/FileUtil|.R|my/FileUtil.isAncestor|(R|<local>/it|, R|<local>/file|, Boolean(false))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -22,7 +22,8 @@ import org.jetbrains.kotlin.fir.types.isUnit
|
|||||||
object FirStandaloneQualifierChecker : FirResolvedQualifierChecker() {
|
object FirStandaloneQualifierChecker : FirResolvedQualifierChecker() {
|
||||||
override fun check(expression: FirResolvedQualifier, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(expression: FirResolvedQualifier, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
val lastQualifiedAccess = context.qualifiedAccessOrAnnotationCalls.lastOrNull() as? FirQualifiedAccess
|
val lastQualifiedAccess = context.qualifiedAccessOrAnnotationCalls.lastOrNull() as? FirQualifiedAccess
|
||||||
if (lastQualifiedAccess?.explicitReceiver === expression) return
|
// Note: qualifier isn't standalone when it's in receiver (SomeClass.foo) or getClass (SomeClass::class) position
|
||||||
|
if (lastQualifiedAccess?.explicitReceiver === expression || lastQualifiedAccess?.dispatchReceiver === expression) return
|
||||||
val lastGetClass = context.getClassCalls.lastOrNull()
|
val lastGetClass = context.getClassCalls.lastOrNull()
|
||||||
if (lastGetClass?.argument === expression) return
|
if (lastGetClass?.argument === expression) return
|
||||||
// Note: if it's real Unit, it will be filtered by ClassKind.OBJECT check below
|
// Note: if it's real Unit, it will be filtered by ClassKind.OBJECT check below
|
||||||
|
|||||||
@@ -225,9 +225,7 @@ private fun FirCallableSymbol<*>.toSymbolForCall(
|
|||||||
val fakeOverrideOwnerLookupTag = when {
|
val fakeOverrideOwnerLookupTag = when {
|
||||||
// Static fake overrides
|
// Static fake overrides
|
||||||
isStatic -> {
|
isStatic -> {
|
||||||
fir.importedFromObjectOrStaticData?.let {
|
((dispatchReceiver as? FirResolvedQualifier) ?: (explicitReceiver as? FirResolvedQualifier))?.toLookupTag()
|
||||||
ConeClassLikeLookupTagImpl(it.objectClassId)
|
|
||||||
} ?: (explicitReceiver as? FirResolvedQualifier)?.toLookupTag()
|
|
||||||
}
|
}
|
||||||
// Member fake override or bound callable reference
|
// Member fake override or bound callable reference
|
||||||
dispatchReceiver !is FirNoReceiverExpression -> {
|
dispatchReceiver !is FirNoReceiverExpression -> {
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ class Candidate(
|
|||||||
private val baseSystem: ConstraintStorage,
|
private val baseSystem: ConstraintStorage,
|
||||||
override val callInfo: CallInfo,
|
override val callInfo: CallInfo,
|
||||||
val originScope: FirScope?,
|
val originScope: FirScope?,
|
||||||
val importedQualifierForStatic: FirExpression? = null,
|
|
||||||
val isFromCompanionObjectTypeScope: Boolean = false
|
val isFromCompanionObjectTypeScope: Boolean = false
|
||||||
) : AbstractCandidate() {
|
) : AbstractCandidate() {
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ class CandidateFactory private constructor(
|
|||||||
explicitReceiverKind: ExplicitReceiverKind,
|
explicitReceiverKind: ExplicitReceiverKind,
|
||||||
scope: FirScope?,
|
scope: FirScope?,
|
||||||
dispatchReceiverValue: ReceiverValue? = null,
|
dispatchReceiverValue: ReceiverValue? = null,
|
||||||
importedQualifierForStatic: FirExpression? = null,
|
|
||||||
givenExtensionReceiverOptions: List<ReceiverValue> = emptyList(),
|
givenExtensionReceiverOptions: List<ReceiverValue> = emptyList(),
|
||||||
objectsByName: Boolean = false
|
objectsByName: Boolean = false
|
||||||
): Candidate {
|
): Candidate {
|
||||||
@@ -69,7 +68,6 @@ class CandidateFactory private constructor(
|
|||||||
baseSystem,
|
baseSystem,
|
||||||
callInfo,
|
callInfo,
|
||||||
scope,
|
scope,
|
||||||
importedQualifierForStatic,
|
|
||||||
isFromCompanionObjectTypeScope = when (explicitReceiverKind) {
|
isFromCompanionObjectTypeScope = when (explicitReceiverKind) {
|
||||||
ExplicitReceiverKind.EXTENSION_RECEIVER ->
|
ExplicitReceiverKind.EXTENSION_RECEIVER ->
|
||||||
givenExtensionReceiverOptions.singleOrNull().isCandidateFromCompanionObjectTypeScope()
|
givenExtensionReceiverOptions.singleOrNull().isCandidateFromCompanionObjectTypeScope()
|
||||||
|
|||||||
@@ -544,8 +544,7 @@ internal object CheckVisibility : CheckerStage() {
|
|||||||
val visible = visibilityChecker.isVisible(
|
val visible = visibilityChecker.isVisible(
|
||||||
declaration,
|
declaration,
|
||||||
candidate.callInfo,
|
candidate.callInfo,
|
||||||
dispatchReceiverValue = null,
|
dispatchReceiverValue = null
|
||||||
importedQualifierForStatic = null
|
|
||||||
)
|
)
|
||||||
if (!visible) {
|
if (!visible) {
|
||||||
sink.yieldDiagnostic(VisibilityError)
|
sink.yieldDiagnostic(VisibilityError)
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.declarations.*
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.getExplicitBackingField
|
import org.jetbrains.kotlin.fir.declarations.utils.getExplicitBackingField
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirSmartCastExpression
|
import org.jetbrains.kotlin.fir.expressions.FirSmartCastExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
|
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
|
||||||
@@ -28,11 +27,10 @@ import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
|||||||
fun FirVisibilityChecker.isVisible(
|
fun FirVisibilityChecker.isVisible(
|
||||||
declaration: FirMemberDeclaration,
|
declaration: FirMemberDeclaration,
|
||||||
callInfo: CallInfo,
|
callInfo: CallInfo,
|
||||||
dispatchReceiverValue: ReceiverValue?,
|
dispatchReceiverValue: ReceiverValue?
|
||||||
importedQualifierForStatic: FirExpression?
|
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val staticQualifierForCallable = runIf(declaration is FirCallableDeclaration && declaration.isStatic) {
|
val staticQualifierForCallable = runIf(declaration is FirCallableDeclaration && declaration.isStatic) {
|
||||||
val explicitReceiver = callInfo.explicitReceiver ?: importedQualifierForStatic
|
val explicitReceiver = callInfo.explicitReceiver ?: (dispatchReceiverValue as? ExpressionReceiverValue)?.explicitReceiver
|
||||||
(explicitReceiver as? FirResolvedQualifier)?.symbol?.fir as? FirRegularClass
|
(explicitReceiver as? FirResolvedQualifier)?.symbol?.fir as? FirRegularClass
|
||||||
}
|
}
|
||||||
return isVisible(
|
return isVisible(
|
||||||
@@ -51,21 +49,19 @@ fun FirVisibilityChecker.isVisible(
|
|||||||
candidate: Candidate
|
candidate: Candidate
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val callInfo = candidate.callInfo
|
val callInfo = candidate.callInfo
|
||||||
val dispatchReceiverValue = candidate.dispatchReceiverValue
|
|
||||||
val importedQualifierForStatic = candidate.importedQualifierForStatic
|
|
||||||
|
|
||||||
if (!isVisible(declaration, callInfo, dispatchReceiverValue, importedQualifierForStatic)) {
|
if (!isVisible(declaration, callInfo, candidate.dispatchReceiverValue)) {
|
||||||
val dispatchReceiverWithoutSmartCastType =
|
val dispatchReceiverWithoutSmartCastType =
|
||||||
removeSmartCastTypeForAttemptToFitVisibility(dispatchReceiverValue, candidate.callInfo.session) ?: return false
|
removeSmartCastTypeForAttemptToFitVisibility(candidate.dispatchReceiverValue, candidate.callInfo.session) ?: return false
|
||||||
|
|
||||||
if (!isVisible(declaration, callInfo, dispatchReceiverWithoutSmartCastType, importedQualifierForStatic)) return false
|
if (!isVisible(declaration, callInfo, dispatchReceiverWithoutSmartCastType)) return false
|
||||||
|
|
||||||
candidate.dispatchReceiverValue = dispatchReceiverWithoutSmartCastType
|
candidate.dispatchReceiverValue = dispatchReceiverWithoutSmartCastType
|
||||||
}
|
}
|
||||||
|
|
||||||
val backingField = declaration.getBackingFieldIfApplicable()
|
val backingField = declaration.getBackingFieldIfApplicable()
|
||||||
if (backingField != null) {
|
if (backingField != null) {
|
||||||
candidate.hasVisibleBackingField = isVisible(backingField, callInfo, dispatchReceiverValue, importedQualifierForStatic)
|
candidate.hasVisibleBackingField = isVisible(backingField, callInfo, candidate.dispatchReceiverValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|||||||
-3
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve.calls.tower
|
package org.jetbrains.kotlin.fir.resolve.calls.tower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.*
|
import org.jetbrains.kotlin.fir.resolve.calls.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
@@ -75,7 +74,6 @@ private class TowerScopeLevelProcessor(
|
|||||||
override fun consumeCandidate(
|
override fun consumeCandidate(
|
||||||
symbol: FirBasedSymbol<*>,
|
symbol: FirBasedSymbol<*>,
|
||||||
dispatchReceiverValue: ReceiverValue?,
|
dispatchReceiverValue: ReceiverValue?,
|
||||||
importedQualifierForStatic: FirExpression?,
|
|
||||||
givenExtensionReceiverOptions: List<ReceiverValue>,
|
givenExtensionReceiverOptions: List<ReceiverValue>,
|
||||||
scope: FirScope,
|
scope: FirScope,
|
||||||
objectsByName: Boolean
|
objectsByName: Boolean
|
||||||
@@ -87,7 +85,6 @@ private class TowerScopeLevelProcessor(
|
|||||||
explicitReceiverKind,
|
explicitReceiverKind,
|
||||||
scope,
|
scope,
|
||||||
dispatchReceiverValue,
|
dispatchReceiverValue,
|
||||||
importedQualifierForStatic,
|
|
||||||
givenExtensionReceiverOptions,
|
givenExtensionReceiverOptions,
|
||||||
objectsByName
|
objectsByName
|
||||||
), candidateFactory.context
|
), candidateFactory.context
|
||||||
|
|||||||
+20
-39
@@ -6,10 +6,11 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.calls.tower
|
package org.jetbrains.kotlin.fir.resolve.calls.tower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.ContextReceiverGroup
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isInner
|
import org.jetbrains.kotlin.fir.declarations.utils.isInner
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirSmartCastExpression
|
import org.jetbrains.kotlin.fir.expressions.FirSmartCastExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedQualifier
|
import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedQualifier
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
@@ -25,7 +26,6 @@ import org.jetbrains.kotlin.fir.types.*
|
|||||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.HidesMembers
|
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.HidesMembers
|
||||||
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||||
import org.jetbrains.kotlin.utils.SmartList
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
|
||||||
|
|
||||||
enum class ProcessResult {
|
enum class ProcessResult {
|
||||||
FOUND, SCOPE_EMPTY;
|
FOUND, SCOPE_EMPTY;
|
||||||
@@ -54,7 +54,6 @@ abstract class TowerScopeLevel {
|
|||||||
fun consumeCandidate(
|
fun consumeCandidate(
|
||||||
symbol: T,
|
symbol: T,
|
||||||
dispatchReceiverValue: ReceiverValue?,
|
dispatchReceiverValue: ReceiverValue?,
|
||||||
importedQualifierForStatic: FirExpression?,
|
|
||||||
givenExtensionReceiverOptions: List<ReceiverValue>,
|
givenExtensionReceiverOptions: List<ReceiverValue>,
|
||||||
scope: FirScope,
|
scope: FirScope,
|
||||||
objectsByName: Boolean = false
|
objectsByName: Boolean = false
|
||||||
@@ -147,7 +146,6 @@ class MemberScopeTowerLevel(
|
|||||||
output.consumeCandidate(
|
output.consumeCandidate(
|
||||||
symbol,
|
symbol,
|
||||||
dispatchReceiverValue,
|
dispatchReceiverValue,
|
||||||
importedQualifierForStatic = null,
|
|
||||||
givenExtensionReceiverOptions = emptyList(),
|
givenExtensionReceiverOptions = emptyList(),
|
||||||
scope
|
scope
|
||||||
)
|
)
|
||||||
@@ -176,7 +174,7 @@ class MemberScopeTowerLevel(
|
|||||||
val candidates = mutableListOf<MemberWithBaseScope<T>>()
|
val candidates = mutableListOf<MemberWithBaseScope<T>>()
|
||||||
for (group in overridableGroups) {
|
for (group in overridableGroups) {
|
||||||
val visibleCandidates = group.filter {
|
val visibleCandidates = group.filter {
|
||||||
visibilityChecker.isVisible(it.member.fir, callInfo, dispatchReceiverValue, importedQualifierForStatic = null)
|
visibilityChecker.isVisible(it.member.fir, callInfo, dispatchReceiverValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
val visibleCandidatesFromSmartcast = visibleCandidates.filter { candidatesMapping.getValue(it) }
|
val visibleCandidatesFromSmartcast = visibleCandidates.filter { candidatesMapping.getValue(it) }
|
||||||
@@ -212,7 +210,6 @@ class MemberScopeTowerLevel(
|
|||||||
output.consumeCandidate(
|
output.consumeCandidate(
|
||||||
candidate,
|
candidate,
|
||||||
dispatchReceiverValue,
|
dispatchReceiverValue,
|
||||||
importedQualifierForStatic = null,
|
|
||||||
givenExtensionReceiverOptions,
|
givenExtensionReceiverOptions,
|
||||||
scope
|
scope
|
||||||
)
|
)
|
||||||
@@ -330,26 +327,20 @@ class ScopeTowerLevel(
|
|||||||
|
|
||||||
fun areThereExtensionReceiverOptions(): Boolean = givenExtensionReceiverOptions.isNotEmpty()
|
fun areThereExtensionReceiverOptions(): Boolean = givenExtensionReceiverOptions.isNotEmpty()
|
||||||
|
|
||||||
private fun FirCallableDeclaration.importedQualifierForObjectOrStatic(): FirExpression? {
|
|
||||||
val objectClassId = importedFromObjectOrStaticData?.objectClassId ?: return null
|
|
||||||
val symbol = session.symbolProvider.getClassLikeSymbolByClassId(objectClassId)
|
|
||||||
if (symbol is FirRegularClassSymbol) {
|
|
||||||
return buildResolvedQualifier {
|
|
||||||
packageFqName = objectClassId.packageFqName
|
|
||||||
relativeClassFqName = objectClassId.relativeClassName
|
|
||||||
this.symbol = symbol
|
|
||||||
}.apply {
|
|
||||||
resultType = bodyResolveComponents.typeForQualifier(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun dispatchReceiverValue(candidate: FirCallableSymbol<*>): ReceiverValue? {
|
private fun dispatchReceiverValue(candidate: FirCallableSymbol<*>): ReceiverValue? {
|
||||||
if (candidate.fir.isStatic) return null
|
candidate.fir.importedFromObjectOrStaticData?.let { data ->
|
||||||
val importedQualifierReceiver = candidate.fir.importedQualifierForObjectOrStatic()
|
val objectClassId = data.objectClassId
|
||||||
if (importedQualifierReceiver != null) {
|
val symbol = session.symbolProvider.getClassLikeSymbolByClassId(objectClassId)
|
||||||
return ExpressionReceiverValue(importedQualifierReceiver)
|
if (symbol is FirRegularClassSymbol) {
|
||||||
|
val resolvedQualifier = buildResolvedQualifier {
|
||||||
|
packageFqName = objectClassId.packageFqName
|
||||||
|
relativeClassFqName = objectClassId.relativeClassName
|
||||||
|
this.symbol = symbol
|
||||||
|
}.apply {
|
||||||
|
resultType = bodyResolveComponents.typeForQualifier(this)
|
||||||
|
}
|
||||||
|
return ExpressionReceiverValue(resolvedQualifier)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (candidate !is FirBackingFieldSymbol) {
|
if (candidate !is FirBackingFieldSymbol) {
|
||||||
@@ -404,22 +395,14 @@ class ScopeTowerLevel(
|
|||||||
val receiverExpected = withHideMembersOnly || areThereExtensionReceiverOptions()
|
val receiverExpected = withHideMembersOnly || areThereExtensionReceiverOptions()
|
||||||
if (candidateReceiverTypeRef == null == receiverExpected) return
|
if (candidateReceiverTypeRef == null == receiverExpected) return
|
||||||
val dispatchReceiverValue = dispatchReceiverValue(candidate)
|
val dispatchReceiverValue = dispatchReceiverValue(candidate)
|
||||||
val isStatic = candidate.fir.isStatic
|
if (dispatchReceiverValue == null && shouldSkipCandidateWithInconsistentExtensionReceiver(candidate)) {
|
||||||
val importedQualifierForStatic = runIf(isStatic) {
|
|
||||||
candidate.fir.importedQualifierForObjectOrStatic()
|
|
||||||
}
|
|
||||||
if (dispatchReceiverValue == null &&
|
|
||||||
importedQualifierForStatic == null &&
|
|
||||||
shouldSkipCandidateWithInconsistentExtensionReceiver(candidate)
|
|
||||||
) {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val unwrappedCandidate = candidate.fir.importedFromObjectOrStaticData?.original?.symbol.takeIf { !isStatic } ?: candidate
|
val unwrappedCandidate = candidate.fir.importedFromObjectOrStaticData?.original?.symbol ?: candidate
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
processor.consumeCandidate(
|
processor.consumeCandidate(
|
||||||
unwrappedCandidate as T,
|
unwrappedCandidate as T,
|
||||||
dispatchReceiverValue,
|
dispatchReceiverValue,
|
||||||
importedQualifierForStatic,
|
|
||||||
givenExtensionReceiverOptions,
|
givenExtensionReceiverOptions,
|
||||||
scope
|
scope
|
||||||
)
|
)
|
||||||
@@ -465,9 +448,7 @@ class ScopeTowerLevel(
|
|||||||
scope.processClassifiersByName(info.name) {
|
scope.processClassifiersByName(info.name) {
|
||||||
empty = false
|
empty = false
|
||||||
processor.consumeCandidate(
|
processor.consumeCandidate(
|
||||||
it,
|
it, dispatchReceiverValue = null,
|
||||||
dispatchReceiverValue = null,
|
|
||||||
importedQualifierForStatic = null,
|
|
||||||
givenExtensionReceiverOptions = emptyList(),
|
givenExtensionReceiverOptions = emptyList(),
|
||||||
scope = scope,
|
scope = scope,
|
||||||
objectsByName = true
|
objectsByName = true
|
||||||
|
|||||||
Reference in New Issue
Block a user