Fix for unprocessed lambda under not-null assertion #KT-10843 Fixed
Also #EA-76890 Fixed
This commit is contained in:
+3
@@ -940,6 +940,9 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
|
|
||||||
if (ArgumentTypeResolver.isFunctionLiteralArgument(baseExpression, context)) {
|
if (ArgumentTypeResolver.isFunctionLiteralArgument(baseExpression, context)) {
|
||||||
context.trace.report(NOT_NULL_ASSERTION_ON_LAMBDA_EXPRESSION.on(operationSign));
|
context.trace.report(NOT_NULL_ASSERTION_ON_LAMBDA_EXPRESSION.on(operationSign));
|
||||||
|
if (baseTypeInfo == null) {
|
||||||
|
return TypeInfoFactoryKt.createTypeInfo(ErrorUtils.createErrorType("Unresolved lambda expression"), context);
|
||||||
|
}
|
||||||
return baseTypeInfo;
|
return baseTypeInfo;
|
||||||
}
|
}
|
||||||
assert baseTypeInfo != null : "Base expression was not processed: " + expression;
|
assert baseTypeInfo != null : "Base expression was not processed: " + expression;
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// See EA-76890 / KT-10843: NPE during analysis
|
||||||
|
fun lambda(x : Int?) = x?.<!NO_VALUE_FOR_PARAMETER, TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER, FUNCTION_CALL_EXPECTED!>let<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>l<!> {
|
||||||
|
<!CANNOT_INFER_PARAMETER_TYPE!>y<!> ->
|
||||||
|
if (<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>y<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>><!> 0) return<!UNRESOLVED_REFERENCE!>@l<!> x
|
||||||
|
<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>y<!>
|
||||||
|
}<!NOT_NULL_ASSERTION_ON_LAMBDA_EXPRESSION!>!!<!>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun lambda(/*0*/ x: kotlin.Int?): [ERROR : <ERROR FUNCTION RETURN TYPE>]
|
||||||
@@ -13386,6 +13386,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt10843.kt")
|
||||||
|
public void testKt10843() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/kt10843.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt127.kt")
|
@TestMetadata("kt127.kt")
|
||||||
public void testKt127() throws Exception {
|
public void testKt127() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/kt127.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/kt127.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user