From db6a6470f97cbeb69f0e92dcdf6697a2273241ff Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 7 Mar 2014 20:19:45 +0400 Subject: [PATCH] FINAL_UPPER_BOUNDS checked for classes in LAZY mode --- .../jet/lang/resolve/DeclarationsChecker.java | 11 +++++++++++ .../jet/lang/resolve/DescriptorResolver.java | 10 +++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java index 6a2a02e195b..c84c3d4b65f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java @@ -146,10 +146,12 @@ public class DeclarationsChecker { for (JetTypeParameter jetTypeParameter : jetClass.getTypeParameters()) { checkBoundsForTypeInClassHeader(jetTypeParameter.getExtendsBound()); + checkFinalUpperBounds(jetTypeParameter.getExtendsBound(), false); } for (JetTypeConstraint constraint : jetClass.getTypeConstraints()) { checkBoundsForTypeInClassHeader(constraint.getBoundTypeReference()); + checkFinalUpperBounds(constraint.getBoundTypeReference(), constraint.isClassObjectConstraint()); } } @@ -162,6 +164,15 @@ public class DeclarationsChecker { } } + private void checkFinalUpperBounds(@Nullable JetTypeReference typeReference, boolean isClassObjectConstraint) { + if (typeReference != null) { + JetType type = trace.getBindingContext().get(TYPE, typeReference); + if (type != null) { + DescriptorResolver.checkUpperBoundType(typeReference, type, isClassObjectConstraint, trace); + } + } + } + private void checkSupertypesForConsistency(@NotNull ClassDescriptor classDescriptor) { Multimap multimap = SubstitutionUtils .buildDeepSubstitutionMultimap(classDescriptor.getDefaultType()); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 1020895dcf8..ddece8f5f1f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -701,11 +701,11 @@ public class DescriptorResolver { } } - for (UpperBoundCheckerTask checkerTask : deferredUpperBoundCheckerTasks) { - checkUpperBoundType(checkerTask.upperBound, checkerTask.upperBoundType, checkerTask.isClassObjectConstraint, trace); - } - if (!(declaration instanceof JetClass)) { + for (UpperBoundCheckerTask checkerTask : deferredUpperBoundCheckerTasks) { + checkUpperBoundType(checkerTask.upperBound, checkerTask.upperBoundType, checkerTask.isClassObjectConstraint, trace); + } + checkNamesInConstraints(declaration, descriptor, scope, trace); } } @@ -747,7 +747,7 @@ public class DescriptorResolver { } } - private static void checkUpperBoundType( + public static void checkUpperBoundType( JetTypeReference upperBound, JetType upperBoundType, boolean isClassObjectConstraint,