Support force-resolving lazy annotations
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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();
|
||||
}
|
||||
|
||||
+2
-1
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user