Fix for EA-64905 - assert: TypeUtils.intersect

This commit is contained in:
Andrey Breslav
2015-05-19 15:25:45 +03:00
parent 1389b62fa4
commit f7a9cc6b28
5 changed files with 22 additions and 1 deletions
@@ -0,0 +1,3 @@
fun main(args: Array<String>) {
args is Array<<!SYNTAX!><!>>
}
@@ -0,0 +1,3 @@
package
internal fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
@@ -9372,6 +9372,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/recovery"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("emptyTypeArgs.kt")
public void testEmptyTypeArgs() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/recovery/emptyTypeArgs.kt");
doTest(fileName);
}
@TestMetadata("namelessInJava.kt")
public void testNamelessInJava() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/recovery/namelessInJava.kt");
@@ -28,6 +28,13 @@ public class JetTypeChecker {
public static final JetTypeChecker DEFAULT = new JetTypeChecker(new TypeCheckingProcedure(new TypeCheckerProcedureCallbacksImpl()));
public static final JetTypeChecker ERROR_TYPES_ARE_EQUAL_TO_ANYTHING = new JetTypeChecker(new TypeCheckingProcedure(new TypeCheckerProcedureCallbacksImpl() {
@Override
public boolean assertEqualTypes(@NotNull JetType a, @NotNull JetType b, @NotNull TypeCheckingProcedure typeCheckingProcedure) {
return a.isError() || b.isError() || super.assertEqualTypes(a, b, typeCheckingProcedure);
}
}));
public static final JetTypeChecker FLEXIBLE_UNEQUAL_TO_INFLEXIBLE = new JetTypeChecker(new TypeCheckingProcedure(new TypeCheckerProcedureCallbacksImpl()) {
@Override
protected boolean heterogeneousEquivalence(JetType inflexibleType, JetType flexibleType) {
@@ -79,7 +79,9 @@ fun Collection<JetType>.singleBestRepresentative(): JetType? {
candidate ->
this.all {
other ->
candidate == other || JetTypeChecker.DEFAULT.equalTypes(candidate, other)
// We consider error types equal to anything here, so that intersections like
// {Array<String>, Array<[ERROR]>} work correctly
candidate == other || JetTypeChecker.ERROR_TYPES_ARE_EQUAL_TO_ANYTHING.equalTypes(candidate, other)
}
}
}