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
@@ -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();
}