diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index 1a3f60d7b60..9e33fc83583 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -1152,33 +1152,33 @@ public class DescriptorResolver { List arguments = type.getArguments(); assert parameters.size() == arguments.size(); - List jetTypeArguments = typeElement.getTypeArgumentsAsTypes(); + List ktTypeArguments = typeElement.getTypeArgumentsAsTypes(); // A type reference from Kotlin code can yield a flexible type only if it's `ft`, whose bounds should not be checked if (FlexibleTypesKt.isFlexible(type) && !DynamicTypesKt.isDynamic(type)) { - assert jetTypeArguments.size() == 2 + assert ktTypeArguments.size() == 2 : "Flexible type cannot be denoted in Kotlin otherwise than as ft, but was: " + PsiUtilsKt.getElementTextWithContext(typeReference); // it's really ft FlexibleType flexibleType = FlexibleTypesKt.asFlexibleType(type); - checkBounds(jetTypeArguments.get(0), flexibleType.getLowerBound(), trace); - checkBounds(jetTypeArguments.get(1), flexibleType.getUpperBound(), trace); + checkBounds(ktTypeArguments.get(0), flexibleType.getLowerBound(), trace); + checkBounds(ktTypeArguments.get(1), flexibleType.getUpperBound(), trace); return; } - assert jetTypeArguments.size() <= arguments.size() : typeElement.getText() + ": " + jetTypeArguments + " - " + arguments; + // If the numbers of type arguments do not match, the error has been already reported in TypeResolver + if (ktTypeArguments.size() != arguments.size()) return; TypeSubstitutor substitutor = TypeSubstitutor.create(type); - for (int i = 0; i < jetTypeArguments.size(); i++) { - KtTypeReference jetTypeArgument = jetTypeArguments.get(i); - - if (jetTypeArgument == null) continue; + for (int i = 0; i < ktTypeArguments.size(); i++) { + KtTypeReference ktTypeArgument = ktTypeArguments.get(i); + if (ktTypeArgument == null) continue; KotlinType typeArgument = arguments.get(i).getType(); - checkBounds(jetTypeArgument, typeArgument, trace); + checkBounds(ktTypeArgument, typeArgument, trace); TypeParameterDescriptor typeParameterDescriptor = parameters.get(i); - checkBounds(jetTypeArgument, typeArgument, typeParameterDescriptor, substitutor, trace); + checkBounds(ktTypeArgument, typeArgument, typeParameterDescriptor, substitutor, trace); } } diff --git a/compiler/testData/diagnostics/tests/regressions/kt9620.kt b/compiler/testData/diagnostics/tests/regressions/kt9620.kt new file mode 100644 index 00000000000..086014b0c61 --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/kt9620.kt @@ -0,0 +1,14 @@ +// KT-9620 AssertionError in checkBounds + +interface E1, D> + +interface A +interface B +interface D +interface E2, D<B>> + +// KT-11354 AE from DescriptorResolver + +open class L() + +class M : L>() diff --git a/compiler/testData/diagnostics/tests/regressions/kt9620.txt b/compiler/testData/diagnostics/tests/regressions/kt9620.txt new file mode 100644 index 00000000000..5634315258f --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/kt9620.txt @@ -0,0 +1,45 @@ +package + +public interface A { + 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 interface B { + 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 interface D { + 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 interface E1 { + 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 interface E2 { + 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 open class L { + public constructor L() + 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 class M : L { + public constructor M() + 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 +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 94c13d3dd1b..0326caa2846 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -14898,6 +14898,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("kt9620.kt") + public void testKt9620() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/kt9620.kt"); + doTest(fileName); + } + @TestMetadata("kt9633.kt") public void testKt9633() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/kt9633.kt");