"!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));
|
||||
}
|
||||
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 {
|
||||
return when (s) {
|
||||
is 4 -> s
|
||||
is null -> <!TYPE_MISMATCH!>s<!>
|
||||
!is Int -> <!TYPE_MISMATCH!>s<!>
|
||||
else -> s
|
||||
}
|
||||
}
|
||||
@@ -38,3 +37,17 @@ fun f5(s: Int?): Int {
|
||||
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