[FIR] Fix false positive RETURN_TYPE_MISMATCH in intellij ultimate
This commit is contained in:
+1
-1
@@ -37,7 +37,7 @@ fun errorWithLambda(): String {
|
||||
return@foo
|
||||
} foo {
|
||||
bar()
|
||||
return@foo <!RETURN_TYPE_MISMATCH!>10<!>
|
||||
return@foo 10
|
||||
}
|
||||
|
||||
return ""
|
||||
|
||||
+1
-3
@@ -25,9 +25,7 @@ object FirFunctionReturnTypeMismatchChecker : FirReturnExpressionChecker() {
|
||||
override fun check(expression: FirReturnExpression, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (expression.source == null) return
|
||||
val targetElement = expression.target.labeledElement
|
||||
if (targetElement is FirErrorFunction ||
|
||||
targetElement is FirAnonymousFunction && targetElement.isLambda && expression.target.labelName == null
|
||||
) {
|
||||
if (targetElement is FirErrorFunction || targetElement is FirAnonymousFunction && targetElement.isLambda) {
|
||||
return
|
||||
}
|
||||
val resultExpression = expression.result
|
||||
|
||||
Vendored
+1
-1
@@ -5,7 +5,7 @@ val a: () -> Int = <!INITIALIZER_TYPE_MISMATCH!>l@ {
|
||||
}<!>
|
||||
|
||||
val b: () -> Unit = l@ {
|
||||
if (flag) return@l <!RETURN_TYPE_MISMATCH!>4<!>
|
||||
if (flag) return@l 4
|
||||
}
|
||||
|
||||
val c: () -> Any = l@ {
|
||||
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
val flag = true
|
||||
|
||||
val a = b@ {
|
||||
if (flag) return@b 4
|
||||
return@b
|
||||
}
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
// FIR_IDENTICAL
|
||||
val flag = true
|
||||
|
||||
val a = b@ {
|
||||
if (flag) return@b <!RETURN_TYPE_MISMATCH!>4<!>
|
||||
return@b
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
fun test(a: Int) {
|
||||
run<Int>f@{
|
||||
if (a > 0) return@f <!ARGUMENT_TYPE_MISMATCH, RETURN_TYPE_MISMATCH!>""<!>
|
||||
if (a > 0) return@f <!ARGUMENT_TYPE_MISMATCH!>""<!>
|
||||
return@f 1
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ fun test(a: A<out CharSequence>, z: Out<CharSequence>) {
|
||||
a.bar { <!ARGUMENT_TYPE_MISMATCH, TYPE_MISMATCH!>z.id()<!> }
|
||||
|
||||
a.foo {
|
||||
z.foobar(if (1 > 2) return@foo <!ARGUMENT_TYPE_MISMATCH, RETURN_TYPE_MISMATCH!>""<!> else "")
|
||||
z.foobar(if (1 > 2) return@foo <!ARGUMENT_TYPE_MISMATCH!>""<!> else "")
|
||||
<!ARGUMENT_TYPE_MISMATCH!>""<!>
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -12,7 +12,7 @@ val a: () -> Unit = l@{
|
||||
|
||||
val b: () -> Unit = l@{
|
||||
// Error, coercion can't be applied at this position!
|
||||
if (true) return@l <!RETURN_TYPE_MISMATCH!>"hello"<!>
|
||||
if (true) return@l "hello"
|
||||
|
||||
// However, this is OK, because here coercion is applied
|
||||
"hello"
|
||||
|
||||
Vendored
+1
-1
@@ -103,7 +103,7 @@ fun main() {
|
||||
select(
|
||||
id { x, y -> <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int")!>x<!>.inv() + <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Number")!>y<!>.toByte() },
|
||||
id<(Int, Number) -> Int> { x, y -> x.inv() },
|
||||
<!RETURN_TYPE_MISMATCH!>{}<!> as (Number, Number) -> Int
|
||||
{} as (Number, Number) -> Int
|
||||
)
|
||||
|
||||
// Inferring lambda parameter types by a few expected types (a few upper constraints)
|
||||
|
||||
Reference in New Issue
Block a user