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.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; 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.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.TypeConstructor;
@@ -38,8 +39,16 @@ public class ForceResolveUtil {
} }
public static void forceResolveAllContents(@NotNull TypeConstructor typeConstructor) { public static void forceResolveAllContents(@NotNull TypeConstructor typeConstructor) {
if (typeConstructor instanceof LazyEntity) { doForceResolveAllContents(typeConstructor);
LazyEntity lazyConstructor = (LazyEntity) 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(); lazyConstructor.forceResolveAllContents();
} }
} }
@@ -319,7 +319,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti
@Override @Override
public void forceResolveAllContents() { public void forceResolveAllContents() {
getAnnotations(); ForceResolveUtil.forceResolveAllContents(getAnnotations());
getClassObjectDescriptor(); getClassObjectDescriptor();
getClassObjectType(); getClassObjectType();
getConstructors(); getConstructors();
@@ -460,7 +460,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti
@Override @Override
public void forceResolveAllContents() { public void forceResolveAllContents() {
getAnnotations(); ForceResolveUtil.forceResolveAllContents(getAnnotations());
getSupertypes(); getSupertypes();
getParameters(); 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.descriptors.impl.AbstractLazyTypeParameterDescriptor;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext; 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.LazyEntity;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils; import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils;
@@ -113,7 +114,7 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
@Override @Override
public void forceResolveAllContents() { public void forceResolveAllContents() {
getAnnotations(); ForceResolveUtil.forceResolveAllContents(getAnnotations());
getClassObjectType(); getClassObjectType();
getContainingDeclaration(); getContainingDeclaration();
getDefaultType(); getDefaultType();
@@ -29,23 +29,19 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.di.InjectorForBodyResolve; import org.jetbrains.jet.di.InjectorForBodyResolve;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.Annotated; 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.descriptors.impl.MutableClassDescriptor;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer; import org.jetbrains.jet.lang.resolve.lazy.*;
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.descriptors.LazyClassDescriptor; import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor;
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyPackageDescriptor; 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.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.TypeConstructor;
import org.jetbrains.jet.storage.LazyResolveStorageManager;
import org.jetbrains.jet.storage.MemoizedFunctionToNotNull; import org.jetbrains.jet.storage.MemoizedFunctionToNotNull;
import java.util.Collection; import java.util.Collection;
@@ -206,8 +202,8 @@ public class ResolveElementCache {
TypeConstructor constructor = ((ClassDescriptor) descriptor).getTypeConstructor(); TypeConstructor constructor = ((ClassDescriptor) descriptor).getTypeConstructor();
for (TypeParameterDescriptor parameterDescriptor : constructor.getParameters()) { for (TypeParameterDescriptor parameterDescriptor : constructor.getParameters()) {
LazyDescriptor lazyDescriptor = (LazyDescriptor) parameterDescriptor; LazyEntity lazyEntity = (LazyEntity) parameterDescriptor;
lazyDescriptor.forceResolveAllContents(); lazyEntity.forceResolveAllContents();
} }
} }
@@ -216,18 +212,15 @@ public class ResolveElementCache {
if (declaration != null) { if (declaration != null) {
Annotated descriptor = analyzer.resolveToDescriptor(declaration); Annotated descriptor = analyzer.resolveToDescriptor(declaration);
// Activate annotation resolving ForceResolveUtil.forceResolveAllContents(descriptor.getAnnotations());
for (AnnotationDescriptor annotationDescriptor : descriptor.getAnnotations()) {
// do nothing, all we need is iteration
}
} }
} }
private static void typeParameterAdditionalResolve(KotlinCodeAnalyzer analyzer, JetTypeParameter typeParameter) { private static void typeParameterAdditionalResolve(KotlinCodeAnalyzer analyzer, JetTypeParameter typeParameter) {
DeclarationDescriptor descriptor = analyzer.resolveToDescriptor(typeParameter); DeclarationDescriptor descriptor = analyzer.resolveToDescriptor(typeParameter);
assert descriptor instanceof LazyDescriptor; assert descriptor instanceof LazyEntity;
LazyDescriptor parameterDescriptor = (LazyDescriptor) descriptor; LazyEntity parameterDescriptor = (LazyEntity) descriptor;
parameterDescriptor.forceResolveAllContents(); parameterDescriptor.forceResolveAllContents();
} }