moved methods

getPropertyDeclarationInnerScope to JetScopeUtils
This commit is contained in:
Svetlana Isakova
2013-10-14 19:56:14 +04:00
parent 0cee8cac15
commit af2efc991d
3 changed files with 57 additions and 60 deletions
@@ -464,7 +464,7 @@ public class BodyResolver {
private JetScope makeScopeForPropertyAccessor(@NotNull JetPropertyAccessor accessor, @NotNull PropertyDescriptor descriptor) { private JetScope makeScopeForPropertyAccessor(@NotNull JetPropertyAccessor accessor, @NotNull PropertyDescriptor descriptor) {
JetScope accessorDeclaringScope = context.getDeclaringScopes().apply(accessor); JetScope accessorDeclaringScope = context.getDeclaringScopes().apply(accessor);
assert accessorDeclaringScope != null : "Scope for accessor " + accessor.getText() + " should exists"; 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) { public void resolvePropertyAccessors(JetProperty property, PropertyDescriptor propertyDescriptor) {
@@ -521,10 +521,10 @@ public class BodyResolver {
trace.report(ACCESSOR_FOR_DELEGATED_PROPERTY.on(setter)); trace.report(ACCESSOR_FOR_DELEGATED_PROPERTY.on(setter));
} }
JetScope propertyDeclarationInnerScope = descriptorResolver.getPropertyDeclarationInnerScopeForInitializer( JetScope propertyDeclarationInnerScope = JetScopeUtils.getPropertyDeclarationInnerScopeForInitializer(
propertyScope, propertyDescriptor.getTypeParameters(), NO_RECEIVER_PARAMETER, trace); propertyScope, propertyDescriptor.getTypeParameters(), NO_RECEIVER_PARAMETER, trace);
JetScope accessorScope = JetScopeUtils.makeScopeForPropertyAccessor( JetScope accessorScope = JetScopeUtils.makeScopeForPropertyAccessor(
propertyDescriptor, parentScopeForAccessor, descriptorResolver, trace); propertyDescriptor, parentScopeForAccessor, trace);
JetType delegateType = delegatedPropertyResolver.resolveDelegateExpression( JetType delegateType = delegatedPropertyResolver.resolveDelegateExpression(
delegateExpression, jetProperty, propertyDescriptor, propertyDeclarationInnerScope, accessorScope, trace, delegateExpression, jetProperty, propertyDescriptor, propertyDeclarationInnerScope, accessorScope, trace,
@@ -545,7 +545,7 @@ public class BodyResolver {
@NotNull JetExpression initializer, @NotNull JetExpression initializer,
@NotNull JetScope scope @NotNull JetScope scope
) { ) {
JetScope propertyDeclarationInnerScope = descriptorResolver.getPropertyDeclarationInnerScopeForInitializer( JetScope propertyDeclarationInnerScope = JetScopeUtils.getPropertyDeclarationInnerScopeForInitializer(
scope, propertyDescriptor.getTypeParameters(), NO_RECEIVER_PARAMETER, trace); scope, propertyDescriptor.getTypeParameters(), NO_RECEIVER_PARAMETER, trace);
JetType expectedTypeForInitializer = property.getTypeRef() != null ? propertyDescriptor.getType() : NO_EXPECTED_TYPE; JetType expectedTypeForInitializer = property.getTypeRef() != null ? propertyDescriptor.getType() : NO_EXPECTED_TYPE;
expressionTypingServices.getType(propertyDeclarationInnerScope, initializer, expectedTypeForInitializer, context.getOuterDataFlowInfo(), trace); expressionTypingServices.getType(propertyDeclarationInnerScope, initializer, expectedTypeForInitializer, context.getOuterDataFlowInfo(), trace);
@@ -890,50 +890,6 @@ public class DescriptorResolver {
return variableDescriptor; return variableDescriptor;
} }
public JetScope getPropertyDeclarationInnerScope(
@NotNull PropertyDescriptor propertyDescriptor,
@NotNull JetScope outerScope,
@NotNull List<? extends TypeParameterDescriptor> typeParameters,
@Nullable ReceiverParameterDescriptor receiver,
BindingTrace trace
) {
return getPropertyDeclarationInnerScope(propertyDescriptor, outerScope, typeParameters, receiver, trace, true);
}
public JetScope getPropertyDeclarationInnerScopeForInitializer(
@NotNull JetScope outerScope,
@NotNull List<? extends TypeParameterDescriptor> 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<? extends TypeParameterDescriptor> 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 @NotNull
public PropertyDescriptor resolvePropertyDescriptor( public PropertyDescriptor resolvePropertyDescriptor(
@NotNull DeclarationDescriptor containingDeclaration, @NotNull DeclarationDescriptor containingDeclaration,
@@ -991,8 +947,8 @@ public class DescriptorResolver {
ReceiverParameterDescriptor receiverDescriptor = DescriptorFactory.createReceiverParameterForCallable(propertyDescriptor, ReceiverParameterDescriptor receiverDescriptor = DescriptorFactory.createReceiverParameterForCallable(propertyDescriptor,
receiverType); receiverType);
JetScope propertyScope = getPropertyDeclarationInnerScope(propertyDescriptor, scope, typeParameterDescriptors, JetScope propertyScope = JetScopeUtils.getPropertyDeclarationInnerScope(propertyDescriptor, scope, typeParameterDescriptors,
NO_RECEIVER_PARAMETER, trace); NO_RECEIVER_PARAMETER, trace);
JetType type = getVariableType(propertyDescriptor, propertyScope, property, dataFlowInfo, true, trace); JetType type = getVariableType(propertyDescriptor, propertyScope, property, dataFlowInfo, true, trace);
@@ -1097,7 +1053,7 @@ public class DescriptorResolver {
@NotNull DataFlowInfo dataFlowInfo, @NotNull DataFlowInfo dataFlowInfo,
@NotNull BindingTrace trace @NotNull BindingTrace trace
) { ) {
JetScope accessorScope = JetScopeUtils.makeScopeForPropertyAccessor(propertyDescriptor, scope, this, trace); JetScope accessorScope = JetScopeUtils.makeScopeForPropertyAccessor(propertyDescriptor, scope, trace);
JetType type = delegatedPropertyResolver.resolveDelegateExpression( JetType type = delegatedPropertyResolver.resolveDelegateExpression(
delegateExpression, property, propertyDescriptor, scope, accessorScope, trace, dataFlowInfo); delegateExpression, property, propertyDescriptor, scope, accessorScope, trace, dataFlowInfo);
@@ -21,10 +21,8 @@ import com.google.common.collect.Collections2;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.TraceBasedRedeclarationHandler; import org.jetbrains.jet.lang.resolve.TraceBasedRedeclarationHandler;
@@ -75,13 +73,12 @@ public final class JetScopeUtils {
public static JetScope makeScopeForPropertyAccessor( public static JetScope makeScopeForPropertyAccessor(
@NotNull PropertyDescriptor propertyDescriptor, @NotNull PropertyDescriptor propertyDescriptor,
@NotNull JetScope parentScope, @NotNull JetScope parentScope,
@NotNull DescriptorResolver descriptorResolver,
@NotNull BindingTrace trace @NotNull BindingTrace trace
) { ) {
JetScope propertyDeclarationInnerScope = descriptorResolver JetScope propertyDeclarationInnerScope =
.getPropertyDeclarationInnerScope(propertyDescriptor, parentScope, getPropertyDeclarationInnerScope(propertyDescriptor, parentScope,
propertyDescriptor.getTypeParameters(), propertyDescriptor.getTypeParameters(),
propertyDescriptor.getReceiverParameter(), trace); propertyDescriptor.getReceiverParameter(), trace);
WritableScope accessorScope = new WritableScopeImpl(propertyDeclarationInnerScope, parentScope.getContainingDeclaration(), WritableScope accessorScope = new WritableScopeImpl(propertyDeclarationInnerScope, parentScope.getContainingDeclaration(),
new TraceBasedRedeclarationHandler(trace), "Accessor Scope"); new TraceBasedRedeclarationHandler(trace), "Accessor Scope");
accessorScope.changeLockLevel(WritableScope.LockLevel.READING); accessorScope.changeLockLevel(WritableScope.LockLevel.READING);
@@ -89,4 +86,48 @@ public final class JetScopeUtils {
return accessorScope; return accessorScope;
} }
public static JetScope getPropertyDeclarationInnerScope(
@NotNull PropertyDescriptor propertyDescriptor,
@NotNull JetScope outerScope,
@NotNull List<? extends TypeParameterDescriptor> typeParameters,
@Nullable ReceiverParameterDescriptor receiver,
BindingTrace trace
) {
return getPropertyDeclarationInnerScope(propertyDescriptor, outerScope, typeParameters, receiver, trace, true);
}
public static JetScope getPropertyDeclarationInnerScopeForInitializer(
@NotNull JetScope outerScope,
@NotNull List<? extends TypeParameterDescriptor> 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<? extends TypeParameterDescriptor> 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;
}
} }