Forced resolution improved to handle type parameter bounds
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
+2
-2
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user