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