LazinessTokens introduced to enable/disable building lazy types
This commit is contained in:
@@ -37,6 +37,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationRe
|
|||||||
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl;
|
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSourceElementFactoryImpl;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSourceElementFactoryImpl;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaFlexibleTypeCapabilitiesProvider;
|
import org.jetbrains.jet.lang.resolve.java.JavaFlexibleTypeCapabilitiesProvider;
|
||||||
|
import org.jetbrains.jet.context.LazyResolveToken;
|
||||||
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
|
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
||||||
@@ -94,6 +95,7 @@ public class InjectorForLazyResolveWithJava {
|
|||||||
private final JavaPropertyInitializerEvaluatorImpl javaPropertyInitializerEvaluator;
|
private final JavaPropertyInitializerEvaluatorImpl javaPropertyInitializerEvaluator;
|
||||||
private final JavaSourceElementFactoryImpl javaSourceElementFactory;
|
private final JavaSourceElementFactoryImpl javaSourceElementFactory;
|
||||||
private final JavaFlexibleTypeCapabilitiesProvider javaFlexibleTypeCapabilitiesProvider;
|
private final JavaFlexibleTypeCapabilitiesProvider javaFlexibleTypeCapabilitiesProvider;
|
||||||
|
private final LazyResolveToken lazyResolveToken;
|
||||||
private final AdditionalCheckerProvider additionalCheckerProvider;
|
private final AdditionalCheckerProvider additionalCheckerProvider;
|
||||||
private final AnnotationResolver annotationResolver;
|
private final AnnotationResolver annotationResolver;
|
||||||
private final CallResolver callResolver;
|
private final CallResolver callResolver;
|
||||||
@@ -157,6 +159,7 @@ public class InjectorForLazyResolveWithJava {
|
|||||||
this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(globalJavaResolverContext, module);
|
this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(globalJavaResolverContext, module);
|
||||||
this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, module);
|
this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, module);
|
||||||
this.javaFlexibleTypeCapabilitiesProvider = new JavaFlexibleTypeCapabilitiesProvider();
|
this.javaFlexibleTypeCapabilitiesProvider = new JavaFlexibleTypeCapabilitiesProvider();
|
||||||
|
this.lazyResolveToken = new LazyResolveToken();
|
||||||
this.additionalCheckerProvider = org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider.INSTANCE$;
|
this.additionalCheckerProvider = org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider.INSTANCE$;
|
||||||
this.annotationResolver = new AnnotationResolver();
|
this.annotationResolver = new AnnotationResolver();
|
||||||
this.callResolver = new CallResolver();
|
this.callResolver = new CallResolver();
|
||||||
@@ -171,7 +174,7 @@ public class InjectorForLazyResolveWithJava {
|
|||||||
this.descriptorResolver = new DescriptorResolver();
|
this.descriptorResolver = new DescriptorResolver();
|
||||||
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
||||||
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
||||||
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, module, javaFlexibleTypeCapabilitiesProvider, storageManager);
|
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, module, javaFlexibleTypeCapabilitiesProvider, storageManager, lazyResolveToken);
|
||||||
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
||||||
this.candidateResolver = new CandidateResolver();
|
this.candidateResolver = new CandidateResolver();
|
||||||
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
||||||
|
|||||||
+4
-1
@@ -55,6 +55,7 @@ import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
|||||||
import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver;
|
import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
||||||
|
import org.jetbrains.jet.context.LazinessToken;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
|
import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
|
||||||
@@ -123,6 +124,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
private final DelegatedPropertyResolver delegatedPropertyResolver;
|
private final DelegatedPropertyResolver delegatedPropertyResolver;
|
||||||
private final TypeResolver typeResolver;
|
private final TypeResolver typeResolver;
|
||||||
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||||
|
private final LazinessToken lazinessToken;
|
||||||
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
||||||
private final CallCompleter callCompleter;
|
private final CallCompleter callCompleter;
|
||||||
private final CandidateResolver candidateResolver;
|
private final CandidateResolver candidateResolver;
|
||||||
@@ -196,7 +198,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
this.descriptorResolver = new DescriptorResolver();
|
this.descriptorResolver = new DescriptorResolver();
|
||||||
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
||||||
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
||||||
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), javaFlexibleTypeCapabilitiesProvider, storageManager);
|
this.lazinessToken = new LazinessToken();
|
||||||
|
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), javaFlexibleTypeCapabilitiesProvider, storageManager, lazinessToken);
|
||||||
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
||||||
this.candidateResolver = new CandidateResolver();
|
this.candidateResolver = new CandidateResolver();
|
||||||
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
||||||
|
|||||||
@@ -40,4 +40,16 @@ public open class GlobalContextImpl(
|
|||||||
public fun GlobalContext(): GlobalContextImpl {
|
public fun GlobalContext(): GlobalContextImpl {
|
||||||
val tracker = ExceptionTracker()
|
val tracker = ExceptionTracker()
|
||||||
return GlobalContextImpl(LockBasedStorageManager.createWithExceptionHandling(tracker), tracker)
|
return GlobalContextImpl(LockBasedStorageManager.createWithExceptionHandling(tracker), tracker)
|
||||||
|
}
|
||||||
|
|
||||||
|
deprecated("Used temporarily while we are in transition from to lazy resolve")
|
||||||
|
public open class LazinessToken {
|
||||||
|
deprecated("Used temporarily while we are in transition from to lazy resolve")
|
||||||
|
public open fun isLazy(): Boolean = false
|
||||||
|
}
|
||||||
|
|
||||||
|
deprecated("Used temporarily while we are in transition from to lazy resolve")
|
||||||
|
public class LazyResolveToken : LazinessToken() {
|
||||||
|
deprecated("Used temporarily while we are in transition from to lazy resolve")
|
||||||
|
override fun isLazy() = true
|
||||||
}
|
}
|
||||||
@@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver;
|
|||||||
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
||||||
|
import org.jetbrains.jet.context.LazinessToken;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
|
import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
|
||||||
@@ -77,6 +78,7 @@ public class InjectorForBodyResolve {
|
|||||||
private final TypeResolver typeResolver;
|
private final TypeResolver typeResolver;
|
||||||
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||||
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
||||||
|
private final LazinessToken lazinessToken;
|
||||||
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
||||||
private final CallCompleter callCompleter;
|
private final CallCompleter callCompleter;
|
||||||
private final CandidateResolver candidateResolver;
|
private final CandidateResolver candidateResolver;
|
||||||
@@ -115,7 +117,8 @@ public class InjectorForBodyResolve {
|
|||||||
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
||||||
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
||||||
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
||||||
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager);
|
this.lazinessToken = new LazinessToken();
|
||||||
|
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, lazinessToken);
|
||||||
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
||||||
this.candidateResolver = new CandidateResolver();
|
this.candidateResolver = new CandidateResolver();
|
||||||
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFacto
|
|||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
|
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
|
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
|
||||||
|
import org.jetbrains.jet.context.LazyResolveToken;
|
||||||
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver;
|
import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver;
|
||||||
@@ -62,6 +63,7 @@ public class InjectorForLazyResolve {
|
|||||||
private final BindingTrace bindingTrace;
|
private final BindingTrace bindingTrace;
|
||||||
private final AdditionalCheckerProvider additionalCheckerProvider;
|
private final AdditionalCheckerProvider additionalCheckerProvider;
|
||||||
private final ResolveSession resolveSession;
|
private final ResolveSession resolveSession;
|
||||||
|
private final LazyResolveToken lazyResolveToken;
|
||||||
private final AnnotationResolver annotationResolver;
|
private final AnnotationResolver annotationResolver;
|
||||||
private final CallResolver callResolver;
|
private final CallResolver callResolver;
|
||||||
private final ArgumentTypeResolver argumentTypeResolver;
|
private final ArgumentTypeResolver argumentTypeResolver;
|
||||||
@@ -101,6 +103,7 @@ public class InjectorForLazyResolve {
|
|||||||
this.bindingTrace = bindingTrace;
|
this.bindingTrace = bindingTrace;
|
||||||
this.additionalCheckerProvider = additionalCheckerProvider;
|
this.additionalCheckerProvider = additionalCheckerProvider;
|
||||||
this.resolveSession = new ResolveSession(project, globalContext, moduleDescriptor, declarationProviderFactory, bindingTrace);
|
this.resolveSession = new ResolveSession(project, globalContext, moduleDescriptor, declarationProviderFactory, bindingTrace);
|
||||||
|
this.lazyResolveToken = new LazyResolveToken();
|
||||||
this.annotationResolver = new AnnotationResolver();
|
this.annotationResolver = new AnnotationResolver();
|
||||||
this.callResolver = new CallResolver();
|
this.callResolver = new CallResolver();
|
||||||
this.argumentTypeResolver = new ArgumentTypeResolver();
|
this.argumentTypeResolver = new ArgumentTypeResolver();
|
||||||
@@ -115,7 +118,7 @@ public class InjectorForLazyResolve {
|
|||||||
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
||||||
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
||||||
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
||||||
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager);
|
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, lazyResolveToken);
|
||||||
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
||||||
this.candidateResolver = new CandidateResolver();
|
this.candidateResolver = new CandidateResolver();
|
||||||
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
|||||||
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
||||||
|
import org.jetbrains.jet.context.LazinessToken;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver;
|
import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver;
|
||||||
@@ -60,6 +61,7 @@ public class InjectorForMacros {
|
|||||||
private final TypeResolver typeResolver;
|
private final TypeResolver typeResolver;
|
||||||
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||||
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
||||||
|
private final LazinessToken lazinessToken;
|
||||||
private final CallExpressionResolver callExpressionResolver;
|
private final CallExpressionResolver callExpressionResolver;
|
||||||
private final DescriptorResolver descriptorResolver;
|
private final DescriptorResolver descriptorResolver;
|
||||||
private final DelegatedPropertyResolver delegatedPropertyResolver;
|
private final DelegatedPropertyResolver delegatedPropertyResolver;
|
||||||
@@ -88,7 +90,8 @@ public class InjectorForMacros {
|
|||||||
this.annotationResolver = new AnnotationResolver();
|
this.annotationResolver = new AnnotationResolver();
|
||||||
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
||||||
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
||||||
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager);
|
this.lazinessToken = new LazinessToken();
|
||||||
|
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, lazinessToken);
|
||||||
this.callExpressionResolver = new CallExpressionResolver();
|
this.callExpressionResolver = new CallExpressionResolver();
|
||||||
this.descriptorResolver = new DescriptorResolver();
|
this.descriptorResolver = new DescriptorResolver();
|
||||||
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver;
|
|||||||
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
||||||
|
import org.jetbrains.jet.context.LazinessToken;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
|
import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
|
||||||
@@ -90,6 +91,7 @@ public class InjectorForTopDownAnalyzerBasic {
|
|||||||
private final TypeResolver typeResolver;
|
private final TypeResolver typeResolver;
|
||||||
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||||
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
||||||
|
private final LazinessToken lazinessToken;
|
||||||
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
||||||
private final CallCompleter callCompleter;
|
private final CallCompleter callCompleter;
|
||||||
private final CandidateResolver candidateResolver;
|
private final CandidateResolver candidateResolver;
|
||||||
@@ -138,7 +140,8 @@ public class InjectorForTopDownAnalyzerBasic {
|
|||||||
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
||||||
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
||||||
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
||||||
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), flexibleTypeCapabilitiesProvider, storageManager);
|
this.lazinessToken = new LazinessToken();
|
||||||
|
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), flexibleTypeCapabilitiesProvider, storageManager, lazinessToken);
|
||||||
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
||||||
this.candidateResolver = new CandidateResolver();
|
this.candidateResolver = new CandidateResolver();
|
||||||
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ public class BodyResolver {
|
|||||||
|
|
||||||
resolvePropertyDeclarationBodies(c);
|
resolvePropertyDeclarationBodies(c);
|
||||||
|
|
||||||
if (!c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) {
|
if (!c.getTopDownAnalysisParameters().isLazy()) {
|
||||||
resolveClassAnnotations(c);
|
resolveClassAnnotations(c);
|
||||||
}
|
}
|
||||||
resolveAnonymousInitializers(c);
|
resolveAnonymousInitializers(c);
|
||||||
@@ -322,7 +322,7 @@ public class BodyResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void resolveAnonymousInitializers(@NotNull BodiesResolveContext c) {
|
private void resolveAnonymousInitializers(@NotNull BodiesResolveContext c) {
|
||||||
if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) {
|
if (c.getTopDownAnalysisParameters().isLazy()) {
|
||||||
for (Map.Entry<JetClassInitializer, ClassDescriptorWithResolutionScopes> entry : c.getAnonymousInitializers().entrySet()) {
|
for (Map.Entry<JetClassInitializer, ClassDescriptorWithResolutionScopes> entry : c.getAnonymousInitializers().entrySet()) {
|
||||||
JetClassInitializer initializer = entry.getKey();
|
JetClassInitializer initializer = entry.getKey();
|
||||||
ClassDescriptorWithResolutionScopes descriptor = entry.getValue();
|
ClassDescriptorWithResolutionScopes descriptor = entry.getValue();
|
||||||
@@ -586,7 +586,7 @@ public class BodyResolver {
|
|||||||
JetScope declaringScope = c.getDeclaringScopes().apply(declaration);
|
JetScope declaringScope = c.getDeclaringScopes().apply(declaration);
|
||||||
assert declaringScope != null;
|
assert declaringScope != null;
|
||||||
|
|
||||||
if (!c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) {
|
if (!c.getTopDownAnalysisParameters().isLazy()) {
|
||||||
resolveAnnotationArguments(declaringScope, declaration);
|
resolveAnnotationArguments(declaringScope, declaration);
|
||||||
}
|
}
|
||||||
resolveFunctionBody(c, trace, declaration, descriptor, declaringScope);
|
resolveFunctionBody(c, trace, declaration, descriptor, declaringScope);
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ public class DeclarationsChecker {
|
|||||||
|
|
||||||
private void checkClass(BodiesResolveContext c, JetClass aClass, ClassDescriptorWithResolutionScopes classDescriptor) {
|
private void checkClass(BodiesResolveContext c, JetClass aClass, ClassDescriptorWithResolutionScopes classDescriptor) {
|
||||||
checkOpenMembers(classDescriptor);
|
checkOpenMembers(classDescriptor);
|
||||||
if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) {
|
if (c.getTopDownAnalysisParameters().isLazy()) {
|
||||||
checkTypeParameters(aClass);
|
checkTypeParameters(aClass);
|
||||||
}
|
}
|
||||||
if (aClass.isTrait()) {
|
if (aClass.isTrait()) {
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ public class DescriptorResolver {
|
|||||||
}
|
}
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (JetTypeParameter typeParameter : typeParameters) {
|
for (JetTypeParameter typeParameter : typeParameters) {
|
||||||
if (!topDownAnalysisParameters.isLazyTopDownAnalysis()) {
|
if (!topDownAnalysisParameters.isLazy()) {
|
||||||
// TODO: Support
|
// TODO: Support
|
||||||
AnnotationResolver.reportUnsupportedAnnotationForTypeParameter(typeParameter, trace);
|
AnnotationResolver.reportUnsupportedAnnotationForTypeParameter(typeParameter, trace);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ public class LazyTopDownAnalyzer {
|
|||||||
@NotNull TopDownAnalysisParameters topDownAnalysisParameters,
|
@NotNull TopDownAnalysisParameters topDownAnalysisParameters,
|
||||||
@NotNull Collection<? extends PsiElement> declarations
|
@NotNull Collection<? extends PsiElement> declarations
|
||||||
) {
|
) {
|
||||||
assert topDownAnalysisParameters.isLazyTopDownAnalysis() : "Lazy analyzer is run in non-lazy mode";
|
assert topDownAnalysisParameters.isLazy() : "Lazy analyzer is run in non-lazy mode";
|
||||||
|
|
||||||
final TopDownAnalysisContext c = new TopDownAnalysisContext(topDownAnalysisParameters);
|
final TopDownAnalysisContext c = new TopDownAnalysisContext(topDownAnalysisParameters);
|
||||||
final Multimap<FqName, JetElement> topLevelFqNames = HashMultimap.create();
|
final Multimap<FqName, JetElement> topLevelFqNames = HashMultimap.create();
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public class ScriptBodyResolver {
|
|||||||
JetScript declaration = e.getKey();
|
JetScript declaration = e.getKey();
|
||||||
ScriptDescriptor descriptor = e.getValue();
|
ScriptDescriptor descriptor = e.getValue();
|
||||||
|
|
||||||
if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) {
|
if (c.getTopDownAnalysisParameters().isLazy()) {
|
||||||
ForceResolveUtil.forceResolveAllContents(descriptor);
|
ForceResolveUtil.forceResolveAllContents(descriptor);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,13 +20,14 @@ import com.google.common.base.Predicate;
|
|||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.context.GlobalContext;
|
import org.jetbrains.jet.context.GlobalContext;
|
||||||
|
import org.jetbrains.jet.context.LazinessToken;
|
||||||
import org.jetbrains.jet.storage.ExceptionTracker;
|
import org.jetbrains.jet.storage.ExceptionTracker;
|
||||||
import org.jetbrains.jet.storage.StorageManager;
|
import org.jetbrains.jet.storage.StorageManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Various junk that cannot be placed into context (yet).
|
* Various junk that cannot be placed into context (yet).
|
||||||
*/
|
*/
|
||||||
public class TopDownAnalysisParameters implements GlobalContext {
|
public class TopDownAnalysisParameters extends LazinessToken implements GlobalContext {
|
||||||
private static boolean LAZY;
|
private static boolean LAZY;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@@ -118,8 +119,9 @@ public class TopDownAnalysisParameters implements GlobalContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Used temporarily while we are transitioning from eager to lazy analysis of headers in the IDE
|
// Used temporarily while we are transitioning from eager to lazy analysis of headers in the IDE
|
||||||
|
@Override
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public boolean isLazyTopDownAnalysis() {
|
public boolean isLazy() {
|
||||||
return lazyTopDownAnalysis;
|
return lazyTopDownAnalysis;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ public class TopDownAnalyzer {
|
|||||||
// c.enableDebugOutput();
|
// c.enableDebugOutput();
|
||||||
c.debug("Enter");
|
c.debug("Enter");
|
||||||
|
|
||||||
if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) {
|
if (c.getTopDownAnalysisParameters().isLazy()) {
|
||||||
ResolveSession resolveSession = new InjectorForLazyResolve(
|
ResolveSession resolveSession = new InjectorForLazyResolve(
|
||||||
project,
|
project,
|
||||||
new GlobalContextImpl((LockBasedStorageManager) c.getStorageManager(), c.getExceptionTracker()), // TODO
|
new GlobalContextImpl((LockBasedStorageManager) c.getStorageManager(), c.getExceptionTracker()), // TODO
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.types.Variance.*
|
|||||||
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider
|
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider
|
||||||
import kotlin.platform.platformStatic
|
import kotlin.platform.platformStatic
|
||||||
import org.jetbrains.jet.storage.StorageManager
|
import org.jetbrains.jet.storage.StorageManager
|
||||||
|
import org.jetbrains.jet.context.LazinessToken
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
public class TypeResolver(
|
public class TypeResolver(
|
||||||
@@ -38,7 +39,8 @@ public class TypeResolver(
|
|||||||
private val qualifiedExpressionResolver: QualifiedExpressionResolver,
|
private val qualifiedExpressionResolver: QualifiedExpressionResolver,
|
||||||
private val moduleDescriptor: ModuleDescriptor,
|
private val moduleDescriptor: ModuleDescriptor,
|
||||||
private val flexibleTypeCapabilitiesProvider: FlexibleTypeCapabilitiesProvider,
|
private val flexibleTypeCapabilitiesProvider: FlexibleTypeCapabilitiesProvider,
|
||||||
private val storageManager: StorageManager
|
private val storageManager: StorageManager,
|
||||||
|
private val lazinessToken: LazinessToken
|
||||||
) {
|
) {
|
||||||
|
|
||||||
public open class FlexibleTypeCapabilitiesProvider {
|
public open class FlexibleTypeCapabilitiesProvider {
|
||||||
@@ -61,7 +63,7 @@ public class TypeResolver(
|
|||||||
val cachedType = c.trace.getBindingContext().get(BindingContext.TYPE, typeReference)
|
val cachedType = c.trace.getBindingContext().get(BindingContext.TYPE, typeReference)
|
||||||
if (cachedType != null) return type(cachedType)
|
if (cachedType != null) return type(cachedType)
|
||||||
|
|
||||||
if (!c.allowBareTypes) {
|
if (!c.allowBareTypes && lazinessToken.isLazy()) {
|
||||||
// Bare types can be allowed only inside expressions; lazy type resolution is only relevant for declarations
|
// Bare types can be allowed only inside expressions; lazy type resolution is only relevant for declarations
|
||||||
class LazyKotlinType : DelegatingType() {
|
class LazyKotlinType : DelegatingType() {
|
||||||
private val _delegate = storageManager.createLazyValue { doResolvePossiblyBareType(c, typeReference).getActualType() }
|
private val _delegate = storageManager.createLazyValue { doResolvePossiblyBareType(c, typeReference).getActualType() }
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver;
|
|||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
||||||
|
import org.jetbrains.jet.context.LazinessToken;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import javax.annotation.PreDestroy;
|
import javax.annotation.PreDestroy;
|
||||||
|
|
||||||
@@ -71,6 +72,7 @@ public class InjectorForTests {
|
|||||||
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
||||||
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||||
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
||||||
|
private final LazinessToken lazinessToken;
|
||||||
|
|
||||||
public InjectorForTests(
|
public InjectorForTests(
|
||||||
@NotNull Project project,
|
@NotNull Project project,
|
||||||
@@ -89,7 +91,8 @@ public class InjectorForTests {
|
|||||||
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
||||||
this.globalContext = org.jetbrains.jet.context.ContextPackage.GlobalContext();
|
this.globalContext = org.jetbrains.jet.context.ContextPackage.GlobalContext();
|
||||||
this.storageManager = globalContext.getStorageManager();
|
this.storageManager = globalContext.getStorageManager();
|
||||||
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager);
|
this.lazinessToken = new LazinessToken();
|
||||||
|
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, lazinessToken);
|
||||||
this.additionalCheckerProvider = org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider.INSTANCE$;
|
this.additionalCheckerProvider = org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider.INSTANCE$;
|
||||||
this.argumentTypeResolver = new ArgumentTypeResolver();
|
this.argumentTypeResolver = new ArgumentTypeResolver();
|
||||||
this.candidateResolver = new CandidateResolver();
|
this.candidateResolver = new CandidateResolver();
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinderFactory
|
|||||||
import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM
|
import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM
|
||||||
import org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider
|
import org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaFlexibleTypeCapabilitiesProvider
|
import org.jetbrains.jet.lang.resolve.java.JavaFlexibleTypeCapabilitiesProvider
|
||||||
|
import org.jetbrains.jet.context.LazyResolveToken
|
||||||
|
|
||||||
// NOTE: After making changes, you need to re-generate the injectors.
|
// NOTE: After making changes, you need to re-generate the injectors.
|
||||||
// To do that, you can run main in this file.
|
// To do that, you can run main in this file.
|
||||||
@@ -188,7 +189,8 @@ private fun generatorForLazyResolveWithJava() =
|
|||||||
javaClass<PsiBasedExternalAnnotationResolver>(),
|
javaClass<PsiBasedExternalAnnotationResolver>(),
|
||||||
javaClass<JavaPropertyInitializerEvaluatorImpl>(),
|
javaClass<JavaPropertyInitializerEvaluatorImpl>(),
|
||||||
javaClass<JavaSourceElementFactoryImpl>(),
|
javaClass<JavaSourceElementFactoryImpl>(),
|
||||||
javaClass<JavaFlexibleTypeCapabilitiesProvider>()
|
javaClass<JavaFlexibleTypeCapabilitiesProvider>(),
|
||||||
|
javaClass<LazyResolveToken>()
|
||||||
)
|
)
|
||||||
field(javaClass<AdditionalCheckerProvider>(),
|
field(javaClass<AdditionalCheckerProvider>(),
|
||||||
init = GivenExpression(javaClass<JavaDeclarationCheckerProvider>().getName() + ".INSTANCE$"))
|
init = GivenExpression(javaClass<JavaDeclarationCheckerProvider>().getName() + ".INSTANCE$"))
|
||||||
@@ -250,6 +252,8 @@ private fun generatorForLazyResolve() =
|
|||||||
parameter(javaClass<AdditionalCheckerProvider>())
|
parameter(javaClass<AdditionalCheckerProvider>())
|
||||||
|
|
||||||
publicField(javaClass<ResolveSession>())
|
publicField(javaClass<ResolveSession>())
|
||||||
|
|
||||||
|
field(javaClass<LazyResolveToken>())
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generator(
|
private fun generator(
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver;
|
|||||||
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
||||||
|
import org.jetbrains.jet.context.LazinessToken;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
|
import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
|
||||||
@@ -90,6 +91,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
|||||||
private final TypeResolver typeResolver;
|
private final TypeResolver typeResolver;
|
||||||
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||||
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
||||||
|
private final LazinessToken lazinessToken;
|
||||||
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
||||||
private final CallCompleter callCompleter;
|
private final CallCompleter callCompleter;
|
||||||
private final CandidateResolver candidateResolver;
|
private final CandidateResolver candidateResolver;
|
||||||
@@ -137,7 +139,8 @@ public class InjectorForTopDownAnalyzerForJs {
|
|||||||
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
||||||
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
||||||
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
||||||
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), flexibleTypeCapabilitiesProvider, storageManager);
|
this.lazinessToken = new LazinessToken();
|
||||||
|
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModuleDescriptor(), flexibleTypeCapabilitiesProvider, storageManager, lazinessToken);
|
||||||
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
||||||
this.candidateResolver = new CandidateResolver();
|
this.candidateResolver = new CandidateResolver();
|
||||||
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
||||||
|
|||||||
Reference in New Issue
Block a user