From 7af72b98fe43a3d66a118344c75a5e86e837268f Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 3 Dec 2013 21:17:43 +0400 Subject: [PATCH] Resolve generic bounds of all classes prior to supertypes --- .../jetbrains/jet/lang/resolve/TypeHierarchyResolver.java | 7 +++++-- .../tests/generics/resolveGenericBoundsBeforeSupertypes.kt | 7 +++++++ .../jet/checkers/JetDiagnosticsTestGenerated.java | 5 +++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/generics/resolveGenericBoundsBeforeSupertypes.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java index 4913415398a..1f675219d57 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -209,13 +209,16 @@ public class TypeHierarchyResolver { private void resolveTypesInClassHeaders() { for (Map.Entry entry : context.getClasses().entrySet()) { JetClassOrObject classOrObject = entry.getKey(); - MutableClassDescriptor descriptor = entry.getValue(); if (classOrObject instanceof JetClass) { + MutableClassDescriptor descriptor = entry.getValue(); //noinspection unchecked descriptorResolver.resolveGenericBounds((JetClass) classOrObject, descriptor.getScopeForSupertypeResolution(), (List) descriptor.getTypeConstructor().getParameters(), trace); } - descriptorResolver.resolveSupertypesForMutableClassDescriptor(classOrObject, descriptor, trace); + } + + for (Map.Entry entry : context.getClasses().entrySet()) { + descriptorResolver.resolveSupertypesForMutableClassDescriptor(entry.getKey(), entry.getValue(), trace); } } diff --git a/compiler/testData/diagnostics/tests/generics/resolveGenericBoundsBeforeSupertypes.kt b/compiler/testData/diagnostics/tests/generics/resolveGenericBoundsBeforeSupertypes.kt new file mode 100644 index 00000000000..bf658a20f36 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/resolveGenericBoundsBeforeSupertypes.kt @@ -0,0 +1,7 @@ +// Tests that generic bounds in the object supertype are resolved prior to the supertype itself + +object O : Tr> + +trait Tr + +class V diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index ce287155047..ada48004162 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2986,6 +2986,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/generics/RecursiveUpperBoundWithTwoArguments.kt"); } + @TestMetadata("resolveGenericBoundsBeforeSupertypes.kt") + public void testResolveGenericBoundsBeforeSupertypes() throws Exception { + doTest("compiler/testData/diagnostics/tests/generics/resolveGenericBoundsBeforeSupertypes.kt"); + } + @TestMetadata("compiler/testData/diagnostics/tests/generics/tpAsReified") public static class TpAsReified extends AbstractDiagnosticsTestWithEagerResolve { public void testAllFilesPresentInTpAsReified() throws Exception {