diff --git a/compiler/testData/diagnostics/tests/resolve/CycleInTypeArgs.kt b/compiler/testData/diagnostics/tests/resolve/CycleInTypeArgs.kt new file mode 100644 index 00000000000..d8ef905f937 --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/CycleInTypeArgs.kt @@ -0,0 +1,3 @@ +class Class1X>>> + +class Class2X>>> \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/resolve/CycleInTypeArgs.txt b/compiler/testData/diagnostics/tests/resolve/CycleInTypeArgs.txt new file mode 100644 index 00000000000..a491f8c758a --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/CycleInTypeArgs.txt @@ -0,0 +1,15 @@ +package + +internal final class Class1>> { + public constructor Class1>>() + 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 +} + +internal final class Class2>> { + public constructor Class2>>() + 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/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index fa2386346d4..5785310daf2 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -11541,6 +11541,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("CycleInTypeArgs.kt") + public void testCycleInTypeArgs() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/resolve/CycleInTypeArgs.kt"); + doTest(fileName); + } + @TestMetadata("incompleteConstructorInvocation.kt") public void testIncompleteConstructorInvocation() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/resolve/incompleteConstructorInvocation.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractTypeParameterDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractTypeParameterDescriptor.java index 59e11428c9b..c37da05615c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractTypeParameterDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractTypeParameterDescriptor.java @@ -82,12 +82,12 @@ public abstract class AbstractTypeParameterDescriptor extends DeclarationDescrip ))); } }); - this.upperBounds = storageManager.createLazyValue(new Function0>() { + this.upperBounds = storageManager.createRecursionTolerantLazyValue(new Function0>() { @Override public Set invoke() { return resolveUpperBounds(); } - }); + }, Collections.singleton(ErrorUtils.createErrorType("Recursion while calculating upper bounds"))); this.upperBoundsAsType = storageManager.createLazyValue(new Function0() { @Override public JetType invoke() {