USELESS_ELVIS_RIGHT_IS_NULL : build fix (add to different files in DiagnosticsTestGenerated), do not report if USELESS_ELVIS already exists
(cherry picked from commit c71b656)
This commit is contained in:
committed by
Mikhail Glukhikh
parent
df86840515
commit
d08d8af407
+3
-3
@@ -1190,6 +1190,9 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
if (leftType != null && isKnownToBeNotNull(left, leftType, context)) {
|
if (leftType != null && isKnownToBeNotNull(left, leftType, context)) {
|
||||||
context.trace.report(USELESS_ELVIS.on(expression, leftType));
|
context.trace.report(USELESS_ELVIS.on(expression, leftType));
|
||||||
}
|
}
|
||||||
|
else if (KtPsiUtil.isNullConstant(right)) {
|
||||||
|
context.trace.report(USELESS_ELVIS_RIGHT_IS_NULL.on(expression));
|
||||||
|
}
|
||||||
KotlinTypeInfo rightTypeInfo = BindingContextUtils.getRecordedTypeInfo(right, context.trace.getBindingContext());
|
KotlinTypeInfo rightTypeInfo = BindingContextUtils.getRecordedTypeInfo(right, context.trace.getBindingContext());
|
||||||
if (rightTypeInfo == null && ArgumentTypeResolver.isFunctionLiteralArgument(right, context)) {
|
if (rightTypeInfo == null && ArgumentTypeResolver.isFunctionLiteralArgument(right, context)) {
|
||||||
// the type is computed later in call completer according to the '?:' semantics as a function
|
// the type is computed later in call completer according to the '?:' semantics as a function
|
||||||
@@ -1198,9 +1201,6 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
assert rightTypeInfo != null : "Right expression was not processed: " + expression;
|
assert rightTypeInfo != null : "Right expression was not processed: " + expression;
|
||||||
boolean loopBreakContinuePossible = leftTypeInfo.getJumpOutPossible() || rightTypeInfo.getJumpOutPossible();
|
boolean loopBreakContinuePossible = leftTypeInfo.getJumpOutPossible() || rightTypeInfo.getJumpOutPossible();
|
||||||
KotlinType rightType = rightTypeInfo.getType();
|
KotlinType rightType = rightTypeInfo.getType();
|
||||||
if (rightType != null && KtPsiUtil.isNullConstant(right)) {
|
|
||||||
context.trace.report(USELESS_ELVIS_RIGHT_IS_NULL.on(expression));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only left argument DFA is taken into account here: we cannot be sure that right argument is joined
|
// Only left argument DFA is taken into account here: we cannot be sure that right argument is joined
|
||||||
// (we merge it with right DFA if right argument contains no jump outside)
|
// (we merge it with right DFA if right argument contains no jump outside)
|
||||||
|
|||||||
+2
-2
@@ -27,9 +27,9 @@ val b = null ?: ( l() ?: false)
|
|||||||
|
|
||||||
val bb = null ?: ( l() ?: null!!)
|
val bb = null ?: ( l() ?: null!!)
|
||||||
|
|
||||||
val bbb = null ?: ( l() ?: null)
|
val bbb = null ?: ( l() <!USELESS_ELVIS_RIGHT_IS_NULL!>?: null<!>)
|
||||||
|
|
||||||
val bbbb = ( l() ?: null) ?: ( l() ?: null)
|
val bbbb = ( l() <!USELESS_ELVIS_RIGHT_IS_NULL!>?: null<!>) ?: ( l() <!USELESS_ELVIS_RIGHT_IS_NULL!>?: null<!>)
|
||||||
|
|
||||||
fun f(x : Long?): Long {
|
fun f(x : Long?): Long {
|
||||||
var a = x ?: (<!TYPE_MISMATCH!>fun() {}<!> <!USELESS_ELVIS!><!USELESS_ELVIS_ON_LAMBDA_EXPRESSION!>?:<!> <!TYPE_MISMATCH!>fun() {}<!><!>)
|
var a = x ?: (<!TYPE_MISMATCH!>fun() {}<!> <!USELESS_ELVIS!><!USELESS_ELVIS_ON_LAMBDA_EXPRESSION!>?:<!> <!TYPE_MISMATCH!>fun() {}<!><!>)
|
||||||
|
|||||||
+1
-1
@@ -5,5 +5,5 @@ operator fun String.invoke(i: Int) {}
|
|||||||
fun foo(s: String?) {
|
fun foo(s: String?) {
|
||||||
<!UNSAFE_CALL!>s<!>(1)
|
<!UNSAFE_CALL!>s<!>(1)
|
||||||
|
|
||||||
<!UNSAFE_CALL!>(s ?: null)<!>(1)
|
<!UNSAFE_CALL!>(s <!USELESS_ELVIS_RIGHT_IS_NULL!>?: null<!>)<!>(1)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ fun baz(s: String?, r: String?): String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun withNull(s: String?): String {
|
fun withNull(s: String?): String {
|
||||||
val t = s ?: null
|
val t = s <!USELESS_ELVIS_RIGHT_IS_NULL!>?: null<!>
|
||||||
// Error: nullable
|
// Error: nullable
|
||||||
return <!TYPE_MISMATCH!>t<!>
|
return <!TYPE_MISMATCH!>t<!>
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user