Moved logic for PRIVATE_TO_THIS visibility from ExpressionTypingUtils.normalizeReceiverValueForVisibility to ExpressionReceiver.create

This commit is contained in:
Stanislav Erokhin
2015-11-16 17:40:19 +03:00
parent 6b7bf63814
commit c7f7ba72b8
7 changed files with 37 additions and 43 deletions
@@ -44,7 +44,6 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
import java.util.*
@@ -136,8 +135,7 @@ public fun Call.resolveCandidates(
if (filterOutByVisibility) {
candidates = candidates.filter {
val thisReceiver = ExpressionTypingUtils.normalizeReceiverValueForVisibility(it.dispatchReceiver, bindingContext)
Visibilities.isVisible(thisReceiver, it.resultingDescriptor, inDescriptor)
Visibilities.isVisible(it.dispatchReceiver, it.resultingDescriptor, inDescriptor)
}
}
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
import org.jetbrains.kotlin.resolve.scopes.utils.getImplicitReceiversHierarchy
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils
fun DeclarationDescriptorWithVisibility.isVisible(
from: DeclarationDescriptor,
@@ -47,15 +46,13 @@ fun DeclarationDescriptorWithVisibility.isVisible(
val explicitReceiver = type?.let { ExpressionReceiver.create(receiver!!, it, bindingContext) }
if (explicitReceiver != null) {
val normalizeReceiver = ExpressionTypingUtils.normalizeReceiverValueForVisibility(explicitReceiver, bindingContext)
return Visibilities.isVisible(normalizeReceiver, this, from)
return Visibilities.isVisible(explicitReceiver, this, from)
}
val resolutionScope = element.getResolutionScope(bindingContext, element.getResolutionFacade())
val implicitReceivers = resolutionScope.getImplicitReceiversHierarchy()
for (implicitReceiver in implicitReceivers) {
val normalizeReceiver = ExpressionTypingUtils.normalizeReceiverValueForVisibility(implicitReceiver.getValue(), bindingContext)
if (Visibilities.isVisible(normalizeReceiver, this, from)) return true
if (Visibilities.isVisible(implicitReceiver.value, this, from)) return true
}
return false
}