From e3bca3010c1810a6c70a8aa0dbe0523f73e98ce2 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Sat, 8 Aug 2015 12:29:04 +0300 Subject: [PATCH] Fixed infinite recursion --- .../diagnostics/tests/resolve/CycleInTypeArgs.kt | 3 +++ .../diagnostics/tests/resolve/CycleInTypeArgs.txt | 15 +++++++++++++++ .../checkers/JetDiagnosticsTestGenerated.java | 6 ++++++ .../impl/AbstractTypeParameterDescriptor.java | 4 ++-- 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/resolve/CycleInTypeArgs.kt create mode 100644 compiler/testData/diagnostics/tests/resolve/CycleInTypeArgs.txt 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() {