Forced resolution improved to handle type parameter bounds

This commit is contained in:
Andrey Breslav
2014-02-20 14:52:03 +04:00
parent 5ea5d8a9c3
commit a3075f90db
3 changed files with 14 additions and 6 deletions
@@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.impl.*; import org.jetbrains.jet.lang.descriptors.impl.*;
import org.jetbrains.jet.lang.psi.*; 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.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -178,7 +179,9 @@ public class TopDownAnalyzer {
private void visitClassOrObject(@NotNull JetClassOrObject classOrObject) { private void visitClassOrObject(@NotNull JetClassOrObject classOrObject) {
c.getClasses().put( c.getClasses().put(
classOrObject, classOrObject,
(ClassDescriptorWithResolutionScopes) resolveSession.getClassDescriptor(classOrObject) ForceResolveUtil.forceResolveAllContents(
(ClassDescriptorWithResolutionScopes) resolveSession.getClassDescriptor(classOrObject)
)
); );
registerDeclarations(classOrObject.getDeclarations()); registerDeclarations(classOrObject.getDeclarations());
} }
@@ -212,7 +215,9 @@ public class TopDownAnalyzer {
public void visitNamedFunction(@NotNull JetNamedFunction function) { public void visitNamedFunction(@NotNull JetNamedFunction function) {
c.getFunctions().put( c.getFunctions().put(
function, function,
(SimpleFunctionDescriptor) resolveSession.resolveToDescriptor(function) ForceResolveUtil.forceResolveAllContents(
(SimpleFunctionDescriptor) resolveSession.resolveToDescriptor(function)
)
); );
registerScope(function, function); registerScope(function, function);
} }
@@ -221,7 +226,9 @@ public class TopDownAnalyzer {
public void visitProperty(@NotNull JetProperty property) { public void visitProperty(@NotNull JetProperty property) {
c.getProperties().put( c.getProperties().put(
property, property,
(PropertyDescriptor) resolveSession.resolveToDescriptor(property) ForceResolveUtil.forceResolveAllContents(
(PropertyDescriptor) resolveSession.resolveToDescriptor(property)
)
); );
registerScope(property, property); registerScope(property, property);
registerScope(property.getGetter(), property); registerScope(property.getGetter(), property);
@@ -34,10 +34,11 @@ public class ForceResolveUtil {
private ForceResolveUtil() {} private ForceResolveUtil() {}
public static void forceResolveAllContents(@NotNull DeclarationDescriptor descriptor) { public static <T extends DeclarationDescriptor> T forceResolveAllContents(@NotNull T descriptor) {
LOG.debug("descriptor: " + descriptor); LOG.debug("descriptor: " + descriptor);
doForceResolveAllContents(descriptor); doForceResolveAllContents(descriptor);
LOG.debug("<<< " + descriptor); LOG.debug("<<< " + descriptor);
return descriptor;
} }
public static void forceResolveAllContents(@NotNull JetScope scope) { public static void forceResolveAllContents(@NotNull JetScope scope) {
@@ -119,11 +119,11 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
getContainingDeclaration(); getContainingDeclaration();
getDefaultType(); getDefaultType();
getIndex(); getIndex();
getLowerBounds(); ForceResolveUtil.forceResolveAllContents(getLowerBounds());
getLowerBoundsAsType(); getLowerBoundsAsType();
getOriginal(); getOriginal();
ForceResolveUtil.forceResolveAllContents(getTypeConstructor()); ForceResolveUtil.forceResolveAllContents(getTypeConstructor());
getUpperBounds(); ForceResolveUtil.forceResolveAllContents(getUpperBounds());
getUpperBoundsAsType(); getUpperBoundsAsType();
getVariance(); getVariance();
} }