Do not resolve all bodies of anonymous objects and local classes in partial body resolve

This commit is contained in:
Valentin Kipyatkov
2016-10-28 22:12:13 +03:00
parent 23c22984e8
commit c0d89e67a9
11 changed files with 80 additions and 27 deletions
@@ -106,6 +106,7 @@ fun createContainerForLazyLocalClassifierAnalyzer(
platform: TargetPlatform,
lookupTracker: LookupTracker,
languageVersionSettings: LanguageVersionSettings,
statementFilter: StatementFilter,
localClassDescriptorHolder: LocalClassDescriptorHolder
): StorageComponentContainer = createContainer("LocalClassifierAnalyzer", platform) {
configureModule(moduleContext, platform, bindingTrace)
@@ -125,6 +126,7 @@ fun createContainerForLazyLocalClassifierAnalyzer(
useImpl<LocalLazyDeclarationResolver>()
useInstance(languageVersionSettings)
useInstance(statementFilter)
}
fun createContainerForLazyResolve(
@@ -35,7 +35,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
@NotNull DataFlowInfo dataFlowInfo,
@NotNull KotlinType expectedType
) {
return newContext(trace, scope, dataFlowInfo, expectedType, ContextDependency.INDEPENDENT);
return newContext(trace, scope, dataFlowInfo, expectedType, ContextDependency.INDEPENDENT, StatementFilter.NONE);
}
@NotNull
@@ -44,11 +44,11 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
@NotNull LexicalScope scope,
@NotNull DataFlowInfo dataFlowInfo,
@NotNull KotlinType expectedType,
@NotNull ContextDependency contextDependency
@NotNull ContextDependency contextDependency,
@NotNull StatementFilter statementFilter
) {
return newContext(trace, scope, dataFlowInfo, expectedType,
contextDependency, new ResolutionResultsCacheImpl(),
StatementFilter.NONE, false);
return newContext(trace, scope, dataFlowInfo, expectedType, contextDependency,
new ResolutionResultsCacheImpl(), statementFilter, false);
}
@NotNull
@@ -106,7 +106,7 @@ public class ExpressionTypingServices {
@NotNull ContextDependency contextDependency
) {
ExpressionTypingContext context = ExpressionTypingContext.newContext(
trace, scope, dataFlowInfo, expectedType, contextDependency
trace, scope, dataFlowInfo, expectedType, contextDependency, statementFilter
);
if (contextExpression != expression) {
context = context.replaceExpressionContextProvider(new Function1<KtExpression, KtExpression>() {
@@ -52,7 +52,7 @@ class LocalClassifierAnalyzer(
private val globalContext: GlobalContext,
private val storageManager: StorageManager,
private val descriptorResolver: DescriptorResolver,
private val funcionDescriptorResolver: FunctionDescriptorResolver,
private val functionDescriptorResolver: FunctionDescriptorResolver,
private val typeResolver: TypeResolver,
private val annotationResolver: AnnotationResolver,
private val platform: TargetPlatform,
@@ -74,6 +74,7 @@ class LocalClassifierAnalyzer(
platform,
lookupTracker,
languageVersionSettings,
context.statementFilter,
LocalClassDescriptorHolder(
scope,
classOrObject,
@@ -82,7 +83,7 @@ class LocalClassifierAnalyzer(
context,
module,
descriptorResolver,
funcionDescriptorResolver,
functionDescriptorResolver,
typeResolver,
annotationResolver,
supertypeLoopChecker,