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.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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
+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.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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user