From a3075f90db6e7653bb857a85082014e89b077a63 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 20 Feb 2014 14:52:03 +0400 Subject: [PATCH] Forced resolution improved to handle type parameter bounds --- .../jetbrains/jet/lang/resolve/TopDownAnalyzer.java | 13 ++++++++++--- .../jet/lang/resolve/lazy/ForceResolveUtil.java | 3 ++- .../descriptors/LazyTypeParameterDescriptor.java | 4 ++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index 5aa5edb04b7..4acd0da1359 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.impl.*; import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -178,7 +179,9 @@ public class TopDownAnalyzer { private void visitClassOrObject(@NotNull JetClassOrObject classOrObject) { c.getClasses().put( classOrObject, - (ClassDescriptorWithResolutionScopes) resolveSession.getClassDescriptor(classOrObject) + ForceResolveUtil.forceResolveAllContents( + (ClassDescriptorWithResolutionScopes) resolveSession.getClassDescriptor(classOrObject) + ) ); registerDeclarations(classOrObject.getDeclarations()); } @@ -212,7 +215,9 @@ public class TopDownAnalyzer { public void visitNamedFunction(@NotNull JetNamedFunction function) { c.getFunctions().put( function, - (SimpleFunctionDescriptor) resolveSession.resolveToDescriptor(function) + ForceResolveUtil.forceResolveAllContents( + (SimpleFunctionDescriptor) resolveSession.resolveToDescriptor(function) + ) ); registerScope(function, function); } @@ -221,7 +226,9 @@ public class TopDownAnalyzer { public void visitProperty(@NotNull JetProperty property) { c.getProperties().put( property, - (PropertyDescriptor) resolveSession.resolveToDescriptor(property) + ForceResolveUtil.forceResolveAllContents( + (PropertyDescriptor) resolveSession.resolveToDescriptor(property) + ) ); registerScope(property, property); registerScope(property.getGetter(), property); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ForceResolveUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ForceResolveUtil.java index b40877f3944..1d141fbb533 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ForceResolveUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ForceResolveUtil.java @@ -34,10 +34,11 @@ public class ForceResolveUtil { private ForceResolveUtil() {} - public static void forceResolveAllContents(@NotNull DeclarationDescriptor descriptor) { + public static T forceResolveAllContents(@NotNull T descriptor) { LOG.debug("descriptor: " + descriptor); doForceResolveAllContents(descriptor); LOG.debug("<<< " + descriptor); + return descriptor; } public static void forceResolveAllContents(@NotNull JetScope scope) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java index 47f2f8ec58e..1b7d5fbac02 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java @@ -119,11 +119,11 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri getContainingDeclaration(); getDefaultType(); getIndex(); - getLowerBounds(); + ForceResolveUtil.forceResolveAllContents(getLowerBounds()); getLowerBoundsAsType(); getOriginal(); ForceResolveUtil.forceResolveAllContents(getTypeConstructor()); - getUpperBounds(); + ForceResolveUtil.forceResolveAllContents(getUpperBounds()); getUpperBoundsAsType(); getVariance(); }