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.ImportingScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.ResolutionScope
|
import org.jetbrains.kotlin.resolve.scopes.ResolutionScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.QualifierReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.*
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils
|
import org.jetbrains.kotlin.types.ErrorUtils
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.isDynamic
|
import org.jetbrains.kotlin.types.isDynamic
|
||||||
@@ -85,7 +84,7 @@ internal class ReceiverScopeTowerLevel(
|
|||||||
|
|
||||||
for (possibleType in smartCastPossibleTypes) {
|
for (possibleType in smartCastPossibleTypes) {
|
||||||
possibleType.memberScope.getMembers(possibleType).mapTo(result) {
|
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
|
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>> {
|
override fun getVariables(name: Name, extensionReceiver: ReceiverValue?): Collection<CandidateWithBoundDispatchReceiver<VariableDescriptor>> {
|
||||||
return collectMembers { getContributedVariables(name, location) }
|
return collectMembers { getContributedVariables(name, location) }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user