From e143a53670fdeba795f561f249ed927350319b93 Mon Sep 17 00:00:00 2001 From: "Natalia.Ukhorskaya" Date: Fri, 26 Apr 2013 15:59:34 +0400 Subject: [PATCH] Extract method to create scope for initializer --- .../jet/lang/resolve/BodyResolver.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java index 46f5a8b8774..66930366d06 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -409,8 +409,7 @@ public class BodyResolver { if (initializer != null) { ConstructorDescriptor primaryConstructor = classDescriptor.getUnsubstitutedPrimaryConstructor(); if (primaryConstructor != null) { - JetScope declaringScopeForPropertyInitializer = this.context.getDeclaringScopes().apply(property); - resolvePropertyInitializer(property, propertyDescriptor, initializer, declaringScopeForPropertyInitializer); + resolvePropertyInitializer(property, propertyDescriptor, initializer); } } @@ -429,11 +428,9 @@ public class BodyResolver { computeDeferredType(propertyDescriptor.getReturnType()); - JetScope declaringScope = this.context.getDeclaringScopes().apply(property); - JetExpression initializer = property.getInitializer(); if (initializer != null) { - resolvePropertyInitializer(property, propertyDescriptor, initializer, declaringScope); + resolvePropertyInitializer(property, propertyDescriptor, initializer); } resolvePropertyAccessors(property, propertyDescriptor); @@ -488,13 +485,26 @@ public class BodyResolver { }); } + private void resolvePropertyInitializer(JetProperty property, PropertyDescriptor propertyDescriptor, JetExpression initializer) { + JetScope propertyDeclarationInnerScope = makeScopeForPropertyInitializer(property, propertyDescriptor); + resolvePropertyInitializer(property, propertyDescriptor, initializer, propertyDeclarationInnerScope); + } + public void resolvePropertyInitializer(JetProperty property, PropertyDescriptor propertyDescriptor, JetExpression initializer, JetScope scope) { - JetType expectedTypeForInitializer = property.getTypeRef() != null ? propertyDescriptor.getType() : NO_EXPECTED_TYPE; JetScope propertyDeclarationInnerScope = descriptorResolver.getPropertyDeclarationInnerScopeForInitializer( scope, propertyDescriptor.getTypeParameters(), NO_RECEIVER_PARAMETER, trace); + JetType expectedTypeForInitializer = property.getTypeRef() != null ? propertyDescriptor.getType() : NO_EXPECTED_TYPE; expressionTypingServices.getType(propertyDeclarationInnerScope, initializer, expectedTypeForInitializer, DataFlowInfo.EMPTY, trace); } + @NotNull + private JetScope makeScopeForPropertyInitializer(@NotNull JetProperty property, @NotNull PropertyDescriptor descriptor) { + JetScope scope = this.context.getDeclaringScopes().apply(property); + assert scope != null : "Scope for property " + property.getText() + " should exists"; + return descriptorResolver.getPropertyDeclarationInnerScopeForInitializer( + scope, descriptor.getTypeParameters(), NO_RECEIVER_PARAMETER, trace); + } + private void resolveFunctionBodies() { for (Map.Entry entry : this.context.getFunctions().entrySet()) { JetNamedFunction declaration = entry.getKey();