FE: Fix null assertion error when left is CollectionLiteral
#KT-49961 fixed
This commit is contained in:
committed by
Victor Petukhov
parent
bd299ed12c
commit
eb1d7110ec
+6
@@ -13870,6 +13870,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
|||||||
runTest("compiler/testData/diagnostics/tests/inference/kt49658Strict.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/kt49658Strict.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("kt49961.kt")
|
||||||
|
public void testKt49961() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inference/kt49961.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt51844.kt")
|
@TestMetadata("kt51844.kt")
|
||||||
public void testKt51844() throws Exception {
|
public void testKt51844() throws Exception {
|
||||||
|
|||||||
+6
@@ -13870,6 +13870,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
|
|||||||
runTest("compiler/testData/diagnostics/tests/inference/kt49658Strict.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/kt49658Strict.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("kt49961.kt")
|
||||||
|
public void testKt49961() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inference/kt49961.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt51844.kt")
|
@TestMetadata("kt51844.kt")
|
||||||
public void testKt51844() throws Exception {
|
public void testKt51844() throws Exception {
|
||||||
|
|||||||
+6
@@ -13870,6 +13870,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
|
|||||||
runTest("compiler/testData/diagnostics/tests/inference/kt49658Strict.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/kt49658Strict.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("kt49961.kt")
|
||||||
|
public void testKt49961() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inference/kt49961.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt51844.kt")
|
@TestMetadata("kt51844.kt")
|
||||||
public void testKt51844() throws Exception {
|
public void testKt51844() throws Exception {
|
||||||
|
|||||||
@@ -224,6 +224,10 @@ public class ArgumentTypeResolver {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isCollectionLiteralArgument(@NotNull KtExpression expression) {
|
||||||
|
return expression instanceof KtCollectionLiteralExpression;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public KotlinTypeInfo getArgumentTypeInfo(
|
public KotlinTypeInfo getArgumentTypeInfo(
|
||||||
@Nullable KtExpression expression,
|
@Nullable KtExpression expression,
|
||||||
|
|||||||
+2
-1
@@ -1303,7 +1303,8 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
KotlinTypeInfo leftTypeInfo = BindingContextUtils.getRecordedTypeInfo(left, context.trace.getBindingContext());
|
KotlinTypeInfo leftTypeInfo = BindingContextUtils.getRecordedTypeInfo(left, context.trace.getBindingContext());
|
||||||
boolean isLeftFunctionLiteral = ArgumentTypeResolver.isFunctionLiteralArgument(left, context);
|
boolean isLeftFunctionLiteral = ArgumentTypeResolver.isFunctionLiteralArgument(left, context);
|
||||||
boolean isLeftCallableReference = ArgumentTypeResolver.isCallableReferenceArgument(left, context);
|
boolean isLeftCallableReference = ArgumentTypeResolver.isCallableReferenceArgument(left, context);
|
||||||
if (leftTypeInfo == null && (isLeftFunctionLiteral || isLeftCallableReference)) {
|
boolean isLeftCollectionLiteral = ArgumentTypeResolver.isCollectionLiteralArgument(left);
|
||||||
|
if (leftTypeInfo == null && (isLeftFunctionLiteral || isLeftCallableReference || isLeftCollectionLiteral)) {
|
||||||
return TypeInfoFactoryKt.noTypeInfo(context);
|
return TypeInfoFactoryKt.noTypeInfo(context);
|
||||||
}
|
}
|
||||||
assert leftTypeInfo != null : "Left expression was not processed: " + expression;
|
assert leftTypeInfo != null : "Left expression was not processed: " + expression;
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
class Xyz {
|
||||||
|
fun x(): String? {
|
||||||
|
return try {
|
||||||
|
<!UNSUPPORTED!>[<!UNRESOLVED_REFERENCE!>a<!>]<!> <!USELESS_ELVIS!>?: <!UNRESOLVED_REFERENCE!>XYZ<!><!>
|
||||||
|
}
|
||||||
|
catch (e: Exception) {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
class Xyz {
|
||||||
|
fun x(): String? {
|
||||||
|
return try {
|
||||||
|
<!TYPE_MISMATCH, UNSUPPORTED!>[<!UNRESOLVED_REFERENCE!>a<!>]<!> <!USELESS_ELVIS!>?: <!UNRESOLVED_REFERENCE!>XYZ<!><!>
|
||||||
|
}
|
||||||
|
catch (e: Exception) {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public final class Xyz {
|
||||||
|
public constructor Xyz()
|
||||||
|
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
|
||||||
|
public final fun x(): kotlin.String?
|
||||||
|
}
|
||||||
Generated
+6
@@ -13876,6 +13876,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/inference/kt49658Strict.kt");
|
runTest("compiler/testData/diagnostics/tests/inference/kt49658Strict.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("kt49961.kt")
|
||||||
|
public void testKt49961() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/inference/kt49961.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("kt51844.kt")
|
@TestMetadata("kt51844.kt")
|
||||||
public void testKt51844() throws Exception {
|
public void testKt51844() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user