Use CastImplicitClassReceiver for implicit this with smart cast
This commit is contained in:
@@ -25,8 +25,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.hasClassValueDescriptor
|
||||
import org.jetbrains.kotlin.resolve.scopes.ImportingScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.ResolutionScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.QualifierReceiver
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.*
|
||||
import org.jetbrains.kotlin.types.ErrorUtils
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.isDynamic
|
||||
@@ -85,7 +84,7 @@ internal class ReceiverScopeTowerLevel(
|
||||
|
||||
for (possibleType in smartCastPossibleTypes) {
|
||||
possibleType.memberScope.getMembers(possibleType).mapTo(result) {
|
||||
createCandidateDescriptor(it, dispatchReceiver, unstableError, dispatchReceiverSmartCastType = possibleType)
|
||||
createCandidateDescriptor(it, dispatchReceiver.smartCastReceiver(possibleType), unstableError, dispatchReceiverSmartCastType = possibleType)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,6 +97,9 @@ internal class ReceiverScopeTowerLevel(
|
||||
return result
|
||||
}
|
||||
|
||||
private fun ReceiverValue.smartCastReceiver(targetType: KotlinType)
|
||||
= if (this is ImplicitClassReceiver) CastImplicitClassReceiver(this.classDescriptor, targetType) else this
|
||||
|
||||
override fun getVariables(name: Name, extensionReceiver: ReceiverValue?): Collection<CandidateWithBoundDispatchReceiver<VariableDescriptor>> {
|
||||
return collectMembers { getContributedVariables(name, location) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user