Fixed scope creations for properties scopes.

This commit is contained in:
Stanislav Erokhin
2015-11-05 20:35:22 +03:00
parent 67abdd755f
commit a502405779
12 changed files with 109 additions and 176 deletions
@@ -167,9 +167,7 @@ public fun getResolutionScope(resolutionFacade: ResolutionFacade, descriptor: De
descriptor, RedeclarationHandler.DO_NOTHING)
is PropertyDescriptor ->
JetScopeUtils.getPropertyDeclarationInnerScope(descriptor,
getOuterScope(descriptor, resolutionFacade),
RedeclarationHandler.DO_NOTHING)
JetScopeUtils.makeScopeForPropertyHeader(getOuterScope(descriptor, resolutionFacade), descriptor)
is DeclarationDescriptorNonRoot ->
getOuterScope(descriptor, resolutionFacade)
@@ -413,28 +413,19 @@ public class ResolveElementCache(
private fun propertyAdditionalResolve(resolveSession: ResolveSession, property: KtProperty, file: KtFile, statementFilter: StatementFilter): BindingTrace {
val trace = createDelegatingTrace(property)
val propertyResolutionScope = resolveSession.declarationScopeProvider.getResolutionScopeForDeclaration(property)
val bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter)
val descriptor = resolveSession.resolveToDescriptor(property) as PropertyDescriptor
ForceResolveUtil.forceResolveAllContents(descriptor)
val propertyInitializer = property.getInitializer()
if (propertyInitializer != null) {
bodyResolver.resolvePropertyInitializer(DataFlowInfo.EMPTY, property, descriptor, propertyInitializer, propertyResolutionScope)
}
val propertyDelegate = property.getDelegateExpression()
if (propertyDelegate != null) {
bodyResolver.resolvePropertyDelegate(DataFlowInfo.EMPTY, property, descriptor, propertyDelegate, propertyResolutionScope, propertyResolutionScope)
}
val bodyResolveContext = BodyResolveContextForLazy(TopDownAnalysisMode.LocalDeclarations, { declaration ->
assert(declaration.getParent() == property) { "Must be called only for property accessors, but called for $declaration" }
assert(declaration.getParent() == property || declaration == property) {
"Must be called only for property accessors or for property, but called for $declaration"
}
resolveSession.declarationScopeProvider.getResolutionScopeForDeclaration(declaration)
})
bodyResolver.resolvePropertyAccessors(bodyResolveContext, property, descriptor)
bodyResolver.resolveProperty(bodyResolveContext, property, descriptor)
forceResolveAnnotationsInside(property)