"!is" now works correctly in when-clauses
This commit is contained in:
+7
-1
@@ -177,7 +177,13 @@ public class PatternMatchingTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
context.trace.report(EXPECTED_CONDITION.on(condition));
|
context.trace.report(EXPECTED_CONDITION.on(condition));
|
||||||
}
|
}
|
||||||
if (pattern != null) {
|
if (pattern != null) {
|
||||||
newDataFlowInfo.set(checkPatternType(pattern, subjectType, subjectExpression == null, scopeToExtend, context, subjectVariables));
|
Pair<DataFlowInfo, DataFlowInfo> result = checkPatternType(pattern, subjectType, subjectExpression == null, scopeToExtend, context, subjectVariables);
|
||||||
|
if (condition.isNegated()) {
|
||||||
|
newDataFlowInfo.set(Pair.create(result.second, result.first));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
newDataFlowInfo.set(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,7 @@ fun f1(s: Int?): Int {
|
|||||||
|
|
||||||
fun f2(s: Int?): Int {
|
fun f2(s: Int?): Int {
|
||||||
return when (s) {
|
return when (s) {
|
||||||
is 4 -> s
|
!is Int -> <!TYPE_MISMATCH!>s<!>
|
||||||
is null -> <!TYPE_MISMATCH!>s<!>
|
|
||||||
else -> s
|
else -> s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -38,3 +37,17 @@ fun f5(s: Int?): Int {
|
|||||||
else -> 0
|
else -> 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun f6(s: Int?): Int {
|
||||||
|
return when {
|
||||||
|
s is Int -> s
|
||||||
|
else -> <!TYPE_MISMATCH!>s<!>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun f7(s: Int?): Int {
|
||||||
|
return when {
|
||||||
|
s !is Int -> <!TYPE_MISMATCH!>s<!>
|
||||||
|
else -> s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user