KT-1572 Frontend doesn't mark all vars included in closure as refs.
This commit is contained in:
+3
-2
@@ -68,7 +68,9 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
||||
public JetType visitSimpleNameExpression(JetSimpleNameExpression expression, ExpressionTypingContext context) {
|
||||
// TODO : other members
|
||||
// TODO : type substitutions???
|
||||
return DataFlowUtils.checkType(getSelectorReturnType(NO_RECEIVER, null, expression, context), expression, context); // TODO : Extensions to this
|
||||
JetType type = DataFlowUtils.checkType(getSelectorReturnType(NO_RECEIVER, null, expression, context), expression, context);
|
||||
ExpressionTypingUtils.checkWrappingInRef(expression, context);
|
||||
return type; // TODO : Extensions to this
|
||||
}
|
||||
|
||||
private JetType lookupNamespaceOrClassObject(JetSimpleNameExpression expression, String referencedName, ExpressionTypingContext context) {
|
||||
@@ -715,7 +717,6 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
||||
}
|
||||
else {
|
||||
context.trace.record(BindingContext.VARIABLE_REASSIGNMENT, expression);
|
||||
ExpressionTypingUtils.checkWrappingInRef(baseExpression, context);
|
||||
|
||||
checkLValue(context.trace, baseExpression);
|
||||
}
|
||||
|
||||
+3
-5
@@ -129,11 +129,9 @@ public class ExpressionTypingUtils {
|
||||
).contains(expression.getNode().getElementType());
|
||||
}
|
||||
|
||||
public static void checkWrappingInRef(JetExpression expression, ExpressionTypingContext context) {
|
||||
if (!(expression instanceof JetSimpleNameExpression)) return;
|
||||
JetSimpleNameExpression simpleName = (JetSimpleNameExpression) expression;
|
||||
VariableDescriptor variable = BindingContextUtils.extractVariableDescriptorIfAny(context.trace.getBindingContext(), simpleName, true);
|
||||
if (variable != null) {
|
||||
public static void checkWrappingInRef(JetSimpleNameExpression expression, ExpressionTypingContext context) {
|
||||
VariableDescriptor variable = BindingContextUtils.extractVariableDescriptorIfAny(context.trace.getBindingContext(), expression, true);
|
||||
if (variable != null && variable.isVar()) {
|
||||
DeclarationDescriptor containingDeclaration = variable.getContainingDeclaration();
|
||||
if (context.scope.getContainingDeclaration() != containingDeclaration && containingDeclaration instanceof CallableDescriptor) {
|
||||
context.trace.record(MUST_BE_WRAPPED_IN_A_REF, variable);
|
||||
|
||||
-4
@@ -216,7 +216,6 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito
|
||||
} else {
|
||||
binaryOperationTrace.commit();
|
||||
context.trace.record(VARIABLE_REASSIGNMENT, expression);
|
||||
ExpressionTypingUtils.checkWrappingInRef(expression.getLeft(), context);
|
||||
if (left instanceof JetArrayAccessExpression) {
|
||||
ExpressionTypingContext contextForResolve = context.replaceScope(scope).replaceBindingTrace(TemporaryBindingTrace.create(contextWithExpectedType.trace));
|
||||
basic.resolveArrayAccessSetMethod((JetArrayAccessExpression) left, expression.getRight(), contextForResolve, context.trace);
|
||||
@@ -244,9 +243,6 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito
|
||||
if (leftType != null) { //if leftType == null, some another error has been generated
|
||||
basic.checkLValue(context.trace, expression.getLeft());
|
||||
}
|
||||
if (left instanceof JetSimpleNameExpression) {
|
||||
ExpressionTypingUtils.checkWrappingInRef(left, context);
|
||||
}
|
||||
return DataFlowUtils.checkStatementType(expression, contextWithExpectedType);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user