x?.y != null and x?.call() != null provoke now x != null, a set of tests #KT-2127 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
9001b9bcc0
commit
11f50186fa
+10
-11
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue.Kind.STABLE_V
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
interface IdentifierInfo {
|
||||
|
||||
@@ -72,7 +73,8 @@ interface IdentifierInfo {
|
||||
}
|
||||
|
||||
class Qualified(
|
||||
val receiverInfo: IdentifierInfo, val selectorInfo: IdentifierInfo, val safe: Boolean
|
||||
val receiverInfo: IdentifierInfo, val selectorInfo: IdentifierInfo,
|
||||
val safe: Boolean, val receiverType: KotlinType?
|
||||
) : IdentifierInfo {
|
||||
override val kind: DataFlowValue.Kind get() = if (receiverInfo.kind.isStable()) selectorInfo.kind else OTHER
|
||||
|
||||
@@ -89,16 +91,13 @@ interface IdentifierInfo {
|
||||
|
||||
companion object {
|
||||
|
||||
fun qualified(receiverInfo: IdentifierInfo?, selectorInfo: IdentifierInfo, safe: Boolean): IdentifierInfo {
|
||||
return if (selectorInfo == NO || receiverInfo === NO) {
|
||||
NO
|
||||
}
|
||||
else if (receiverInfo == null || receiverInfo is PackageOrClass) {
|
||||
selectorInfo
|
||||
}
|
||||
else {
|
||||
Qualified(receiverInfo, selectorInfo, safe)
|
||||
}
|
||||
fun qualified(
|
||||
receiverInfo: IdentifierInfo, receiverType: KotlinType?,
|
||||
selectorInfo: IdentifierInfo, safe: Boolean
|
||||
) = when (receiverInfo) {
|
||||
NO -> NO
|
||||
is PackageOrClass -> selectorInfo
|
||||
else -> Qualified(receiverInfo, selectorInfo, safe, receiverType)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user