From 8838e46578dfbc21fde1125a963591231d441fbc Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 30 Nov 2015 19:08:19 +0300 Subject: [PATCH] Do not create KotlinTypeImpl with error scope while erasing See assertion in KotlinTypeImpl init block --- .../tests/platformTypes/rawTypes/errorType.kt | 12 ++++++++++++ .../tests/platformTypes/rawTypes/errorType.txt | 17 +++++++++++++++++ .../checkers/DiagnosticsTestGenerated.java | 6 ++++++ .../kotlin/load/java/lazy/types/RawType.kt | 2 ++ 4 files changed, 37 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/platformTypes/rawTypes/errorType.kt create mode 100644 compiler/testData/diagnostics/tests/platformTypes/rawTypes/errorType.txt diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/errorType.kt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/errorType.kt new file mode 100644 index 00000000000..594034d0c9f --- /dev/null +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/errorType.kt @@ -0,0 +1,12 @@ +// FILE: A.java +import java.util.*; + +public class A { + public void foo(Err x, List y); +} + +// FILE: B.java + +public class B extends A { + +} diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/errorType.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/errorType.txt new file mode 100644 index 00000000000..377c2f6ecde --- /dev/null +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/errorType.txt @@ -0,0 +1,17 @@ +package + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun foo(/*0*/ x: [ERROR : Unresolved java classifier: Err]!, /*1*/ y: kotlin.(Mutable)List!): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public open class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any(raw)?): kotlin.Boolean(raw) + public open override /*1*/ /*fake_override*/ fun foo(/*0*/ x: [ERROR : Unresolved java classifier: Err]!, /*1*/ y: kotlin.(Mutable)List<(raw) kotlin.Any?>!): kotlin.Unit(raw) + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int(raw) + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String(raw) +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index cab66426043..e15618aae9a 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -11903,6 +11903,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("errorType.kt") + public void testErrorType() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/platformTypes/rawTypes/errorType.kt"); + doTest(fileName); + } + @TestMetadata("genericInnerClass.kt") public void testGenericInnerClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/platformTypes/rawTypes/genericInnerClass.kt"); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt index 367787e1269..64a75a79c81 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/RawType.kt @@ -114,6 +114,8 @@ internal object RawSubstitution : TypeSubstitution() { ) } + if (type.isError) return ErrorUtils.createErrorType("Raw error type: ${type.constructor}") + val constructor = type.constructor return KotlinTypeImpl.create( type.annotations, constructor, type.isMarkedNullable,