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 fe073b0b797..0f583f0d074 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -464,7 +464,7 @@ public class BodyResolver { private JetScope makeScopeForPropertyAccessor(@NotNull JetPropertyAccessor accessor, @NotNull PropertyDescriptor descriptor) { JetScope accessorDeclaringScope = context.getDeclaringScopes().apply(accessor); assert accessorDeclaringScope != null : "Scope for accessor " + accessor.getText() + " should exists"; - return JetScopeUtils.makeScopeForPropertyAccessor(descriptor, accessorDeclaringScope, descriptorResolver, trace); + return JetScopeUtils.makeScopeForPropertyAccessor(descriptor, accessorDeclaringScope, trace); } public void resolvePropertyAccessors(JetProperty property, PropertyDescriptor propertyDescriptor) { @@ -521,10 +521,10 @@ public class BodyResolver { trace.report(ACCESSOR_FOR_DELEGATED_PROPERTY.on(setter)); } - JetScope propertyDeclarationInnerScope = descriptorResolver.getPropertyDeclarationInnerScopeForInitializer( + JetScope propertyDeclarationInnerScope = JetScopeUtils.getPropertyDeclarationInnerScopeForInitializer( propertyScope, propertyDescriptor.getTypeParameters(), NO_RECEIVER_PARAMETER, trace); JetScope accessorScope = JetScopeUtils.makeScopeForPropertyAccessor( - propertyDescriptor, parentScopeForAccessor, descriptorResolver, trace); + propertyDescriptor, parentScopeForAccessor, trace); JetType delegateType = delegatedPropertyResolver.resolveDelegateExpression( delegateExpression, jetProperty, propertyDescriptor, propertyDeclarationInnerScope, accessorScope, trace, @@ -545,7 +545,7 @@ public class BodyResolver { @NotNull JetExpression initializer, @NotNull JetScope scope ) { - JetScope propertyDeclarationInnerScope = descriptorResolver.getPropertyDeclarationInnerScopeForInitializer( + JetScope propertyDeclarationInnerScope = JetScopeUtils.getPropertyDeclarationInnerScopeForInitializer( scope, propertyDescriptor.getTypeParameters(), NO_RECEIVER_PARAMETER, trace); JetType expectedTypeForInitializer = property.getTypeRef() != null ? propertyDescriptor.getType() : NO_EXPECTED_TYPE; expressionTypingServices.getType(propertyDeclarationInnerScope, initializer, expectedTypeForInitializer, context.getOuterDataFlowInfo(), trace); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index f23064dbccd..009dc35717b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -890,50 +890,6 @@ public class DescriptorResolver { return variableDescriptor; } - public JetScope getPropertyDeclarationInnerScope( - @NotNull PropertyDescriptor propertyDescriptor, - @NotNull JetScope outerScope, - @NotNull List typeParameters, - @Nullable ReceiverParameterDescriptor receiver, - BindingTrace trace - ) { - return getPropertyDeclarationInnerScope(propertyDescriptor, outerScope, typeParameters, receiver, trace, true); - } - - public JetScope getPropertyDeclarationInnerScopeForInitializer( - @NotNull JetScope outerScope, - @NotNull List typeParameters, - @Nullable ReceiverParameterDescriptor receiver, - BindingTrace trace - ) { - return getPropertyDeclarationInnerScope(null, outerScope, typeParameters, receiver, trace, false); - } - - private JetScope getPropertyDeclarationInnerScope( - @Nullable PropertyDescriptor propertyDescriptor, // PropertyDescriptor can be null for property scope which hasn't label to property (in this case addLabelForProperty parameter must be false - @NotNull JetScope outerScope, - @NotNull List typeParameters, - @Nullable ReceiverParameterDescriptor receiver, - BindingTrace trace, - boolean addLabelForProperty - ) { - WritableScopeImpl result = new WritableScopeImpl( - outerScope, outerScope.getContainingDeclaration(), new TraceBasedRedeclarationHandler(trace), - "Property declaration inner scope"); - if (addLabelForProperty) { - assert propertyDescriptor != null : "PropertyDescriptor can be null for property scope which hasn't label to property"; - result.addLabeledDeclaration(propertyDescriptor); - } - for (TypeParameterDescriptor typeParameterDescriptor : typeParameters) { - result.addTypeParameterDescriptor(typeParameterDescriptor); - } - if (receiver != null) { - result.setImplicitReceiver(receiver); - } - result.changeLockLevel(WritableScope.LockLevel.READING); - return result; - } - @NotNull public PropertyDescriptor resolvePropertyDescriptor( @NotNull DeclarationDescriptor containingDeclaration, @@ -991,8 +947,8 @@ public class DescriptorResolver { ReceiverParameterDescriptor receiverDescriptor = DescriptorFactory.createReceiverParameterForCallable(propertyDescriptor, receiverType); - JetScope propertyScope = getPropertyDeclarationInnerScope(propertyDescriptor, scope, typeParameterDescriptors, - NO_RECEIVER_PARAMETER, trace); + JetScope propertyScope = JetScopeUtils.getPropertyDeclarationInnerScope(propertyDescriptor, scope, typeParameterDescriptors, + NO_RECEIVER_PARAMETER, trace); JetType type = getVariableType(propertyDescriptor, propertyScope, property, dataFlowInfo, true, trace); @@ -1097,7 +1053,7 @@ public class DescriptorResolver { @NotNull DataFlowInfo dataFlowInfo, @NotNull BindingTrace trace ) { - JetScope accessorScope = JetScopeUtils.makeScopeForPropertyAccessor(propertyDescriptor, scope, this, trace); + JetScope accessorScope = JetScopeUtils.makeScopeForPropertyAccessor(propertyDescriptor, scope, trace); JetType type = delegatedPropertyResolver.resolveDelegateExpression( delegateExpression, property, propertyDescriptor, scope, accessorScope, trace, dataFlowInfo); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/JetScopeUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/JetScopeUtils.java index ae6b98334bb..840a792a36f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/JetScopeUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/JetScopeUtils.java @@ -21,10 +21,8 @@ import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.CallableDescriptor; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; -import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.TraceBasedRedeclarationHandler; @@ -75,13 +73,12 @@ public final class JetScopeUtils { public static JetScope makeScopeForPropertyAccessor( @NotNull PropertyDescriptor propertyDescriptor, @NotNull JetScope parentScope, - @NotNull DescriptorResolver descriptorResolver, @NotNull BindingTrace trace ) { - JetScope propertyDeclarationInnerScope = descriptorResolver - .getPropertyDeclarationInnerScope(propertyDescriptor, parentScope, - propertyDescriptor.getTypeParameters(), - propertyDescriptor.getReceiverParameter(), trace); + JetScope propertyDeclarationInnerScope = + getPropertyDeclarationInnerScope(propertyDescriptor, parentScope, + propertyDescriptor.getTypeParameters(), + propertyDescriptor.getReceiverParameter(), trace); WritableScope accessorScope = new WritableScopeImpl(propertyDeclarationInnerScope, parentScope.getContainingDeclaration(), new TraceBasedRedeclarationHandler(trace), "Accessor Scope"); accessorScope.changeLockLevel(WritableScope.LockLevel.READING); @@ -89,4 +86,48 @@ public final class JetScopeUtils { return accessorScope; } + public static JetScope getPropertyDeclarationInnerScope( + @NotNull PropertyDescriptor propertyDescriptor, + @NotNull JetScope outerScope, + @NotNull List typeParameters, + @Nullable ReceiverParameterDescriptor receiver, + BindingTrace trace + ) { + return getPropertyDeclarationInnerScope(propertyDescriptor, outerScope, typeParameters, receiver, trace, true); + } + + public static JetScope getPropertyDeclarationInnerScopeForInitializer( + @NotNull JetScope outerScope, + @NotNull List typeParameters, + @Nullable ReceiverParameterDescriptor receiver, + BindingTrace trace + ) { + return getPropertyDeclarationInnerScope(null, outerScope, typeParameters, receiver, trace, false); + } + + private static JetScope getPropertyDeclarationInnerScope( + @Nullable PropertyDescriptor propertyDescriptor, + // PropertyDescriptor can be null for property scope which hasn't label to property (in this case addLabelForProperty parameter must be false + @NotNull JetScope outerScope, + @NotNull List typeParameters, + @Nullable ReceiverParameterDescriptor receiver, + BindingTrace trace, + boolean addLabelForProperty + ) { + WritableScopeImpl result = new WritableScopeImpl( + outerScope, outerScope.getContainingDeclaration(), new TraceBasedRedeclarationHandler(trace), + "Property declaration inner scope"); + if (addLabelForProperty) { + assert propertyDescriptor != null : "PropertyDescriptor can be null for property scope which hasn't label to property"; + result.addLabeledDeclaration(propertyDescriptor); + } + for (TypeParameterDescriptor typeParameterDescriptor : typeParameters) { + result.addTypeParameterDescriptor(typeParameterDescriptor); + } + if (receiver != null) { + result.setImplicitReceiver(receiver); + } + result.changeLockLevel(WritableScope.LockLevel.READING); + return result; + } }