diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java index d37723be6e8..6ab5efd696a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java @@ -1284,7 +1284,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { if (leftType != null && isKnownToBeNotNull(left, leftType, context)) { context.trace.report(USELESS_ELVIS.on(expression, leftType)); } - else if (KtPsiUtil.isNullConstant(right)) { + else if (KtPsiUtil.isNullConstant(right) && leftType != null && !FlexibleTypesKt.isNullabilityFlexible(leftType)) { context.trace.report(USELESS_ELVIS_RIGHT_IS_NULL.on(expression)); } KotlinTypeInfo rightTypeInfo = BindingContextUtils.getRecordedTypeInfo(right, context.trace.getBindingContext()); diff --git a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.kt b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.kt index e9210652925..ee556503d25 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.kt +++ b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.kt @@ -9,11 +9,30 @@ public class J { public static J staticN; } +// FILE: JJ.java + +public class JJ { + public static JJ staticNN; +} + +// FILE: JJJ.java + +import org.jetbrains.annotations.*; + +public class JJJ { + @NotNull + public static JJJ staticNNN; +} + // FILE: k.kt fun test() { val a = J.staticN ?: null foo(a) + val b = JJ.staticNN ?: null + foo(b) + val c = JJJ.staticNNN ?: null + foo(c) } fun foo(a: Any?) { diff --git a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.txt b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.txt index 8d277bd6258..1c53626880e 100644 --- a/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.txt +++ b/compiler/testData/diagnostics/tests/platformTypes/nullabilityWarnings/uselessElvisRightIsNull.txt @@ -12,3 +12,23 @@ public open class J { // Static members @org.jetbrains.annotations.Nullable public final var staticN: J? } + +public open class JJ { + public constructor JJ() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public final var staticNN: JJ! +} + +public open class JJJ { + public constructor JJJ() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + @org.jetbrains.annotations.NotNull public final var staticNNN: JJJ +}