Support force-resolving lazy annotations

This commit is contained in:
Andrey Breslav
2014-01-22 18:37:10 +04:00
parent 71dd3aaf86
commit 0f301e0d2a
4 changed files with 22 additions and 19 deletions
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.resolve.lazy;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.Annotations;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.TypeConstructor;
@@ -38,8 +39,16 @@ public class ForceResolveUtil {
}
public static void forceResolveAllContents(@NotNull TypeConstructor typeConstructor) {
if (typeConstructor instanceof LazyEntity) {
LazyEntity lazyConstructor = (LazyEntity) typeConstructor;
doForceResolveAllContents(typeConstructor);
}
public static void forceResolveAllContents(@NotNull Annotations annotations) {
doForceResolveAllContents(annotations);
}
private static void doForceResolveAllContents(Object object) {
if (object instanceof LazyEntity) {
LazyEntity lazyConstructor = (LazyEntity) object;
lazyConstructor.forceResolveAllContents();
}
}
@@ -319,7 +319,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti
@Override
public void forceResolveAllContents() {
getAnnotations();
ForceResolveUtil.forceResolveAllContents(getAnnotations());
getClassObjectDescriptor();
getClassObjectType();
getConstructors();
@@ -460,7 +460,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti
@Override
public void forceResolveAllContents() {
getAnnotations();
ForceResolveUtil.forceResolveAllContents(getAnnotations());
getSupertypes();
getParameters();
}
@@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.AbstractLazyTypeParameterDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil;
import org.jetbrains.jet.lang.resolve.lazy.LazyEntity;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils;
@@ -113,7 +114,7 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
@Override
public void forceResolveAllContents() {
getAnnotations();
ForceResolveUtil.forceResolveAllContents(getAnnotations());
getClassObjectType();
getContainingDeclaration();
getDefaultType();
@@ -29,23 +29,19 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.di.InjectorForBodyResolve;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.Annotated;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.resolve.lazy.LazyDescriptor;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
import org.jetbrains.jet.lang.resolve.lazy.*;
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor;
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyPackageDescriptor;
import org.jetbrains.jet.storage.LazyResolveStorageManager;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.types.TypeConstructor;
import org.jetbrains.jet.storage.LazyResolveStorageManager;
import org.jetbrains.jet.storage.MemoizedFunctionToNotNull;
import java.util.Collection;
@@ -206,8 +202,8 @@ public class ResolveElementCache {
TypeConstructor constructor = ((ClassDescriptor) descriptor).getTypeConstructor();
for (TypeParameterDescriptor parameterDescriptor : constructor.getParameters()) {
LazyDescriptor lazyDescriptor = (LazyDescriptor) parameterDescriptor;
lazyDescriptor.forceResolveAllContents();
LazyEntity lazyEntity = (LazyEntity) parameterDescriptor;
lazyEntity.forceResolveAllContents();
}
}
@@ -216,18 +212,15 @@ public class ResolveElementCache {
if (declaration != null) {
Annotated descriptor = analyzer.resolveToDescriptor(declaration);
// Activate annotation resolving
for (AnnotationDescriptor annotationDescriptor : descriptor.getAnnotations()) {
// do nothing, all we need is iteration
}
ForceResolveUtil.forceResolveAllContents(descriptor.getAnnotations());
}
}
private static void typeParameterAdditionalResolve(KotlinCodeAnalyzer analyzer, JetTypeParameter typeParameter) {
DeclarationDescriptor descriptor = analyzer.resolveToDescriptor(typeParameter);
assert descriptor instanceof LazyDescriptor;
assert descriptor instanceof LazyEntity;
LazyDescriptor parameterDescriptor = (LazyDescriptor) descriptor;
LazyEntity parameterDescriptor = (LazyEntity) descriptor;
parameterDescriptor.forceResolveAllContents();
}