isVariableReassignment for ++ and --

This commit is contained in:
Andrey Breslav
2011-07-15 17:49:26 +04:00
parent 53fb3483a2
commit 85fbe4ce90
6 changed files with 12 additions and 9 deletions
@@ -41,7 +41,7 @@ public interface BindingContext {
boolean isStatement(JetExpression expression);
boolean hasBackingField(PropertyDescriptor propertyDescriptor);
boolean isVariableReassignment(JetBinaryExpression expression);
boolean isVariableReassignment(JetExpression expression);
ConstructorDescriptor resolveSuperConstructor(JetDelegatorToSuperCall superCall);
@@ -29,7 +29,7 @@ public interface BindingTrace {
void recordStatement(@NotNull JetElement statement);
void recordVariableReassignment(@NotNull JetBinaryExpression expression);
void recordVariableReassignment(@NotNull JetExpression expression);
void recordResolutionScope(@NotNull JetExpression expression, @NotNull JetScope scope);
@@ -58,7 +58,7 @@ public class BindingTraceAdapter implements BindingTrace {
}
@Override
public void recordVariableReassignment(@NotNull JetBinaryExpression expression) {
public void recordVariableReassignment(@NotNull JetExpression expression) {
originalTrace.recordVariableReassignment(expression);
}
@@ -31,7 +31,7 @@ public class BindingTraceContext implements BindingContext, BindingTrace {
private final Map<JetExpression, JetType> autoCasts = Maps.newHashMap();
private final Map<JetExpression, JetScope> resolutionScopes = Maps.newHashMap();
private final Set<JetBinaryExpression> variableReassignments = Sets.newHashSet();
private final Set<JetExpression> variableReassignments = Sets.newHashSet();
private final Set<JetFunctionLiteralExpression> blocks = new HashSet<JetFunctionLiteralExpression>();
private final Set<JetElement> statements = new HashSet<JetElement>();
@@ -163,7 +163,7 @@ public class BindingTraceContext implements BindingContext, BindingTrace {
}
@Override
public void recordVariableReassignment(@NotNull JetBinaryExpression expression) {
public void recordVariableReassignment(@NotNull JetExpression expression) {
variableReassignments.add(expression);
}
@@ -308,7 +308,7 @@ public class BindingTraceContext implements BindingContext, BindingTrace {
}
@Override
public boolean isVariableReassignment(JetBinaryExpression expression) {
public boolean isVariableReassignment(JetExpression expression) {
return variableReassignments.contains(expression);
}
@@ -2167,12 +2167,15 @@ public class JetTypeInferrer {
JetType returnType = functionDescriptor.getReturnType();
if (operationType == JetTokens.PLUSPLUS || operationType == JetTokens.MINUSMINUS) {
if (semanticServices.getTypeChecker().isSubtypeOf(returnType, JetStandardClasses.getUnitType())) {
result = JetStandardClasses.getUnitType();
result = JetStandardClasses.getUnitType();
}
else {
if (!semanticServices.getTypeChecker().isSubtypeOf(returnType, receiverType)) {
context.trace.getErrorHandler().genericError(operationSign.getNode(), name + " must return " + receiverType + " but returns " + returnType);
}
else {
context.trace.recordVariableReassignment(expression);
}
// TODO : Maybe returnType?
result = receiverType;
}
@@ -54,7 +54,7 @@ public class JetTestUtils {
}
@Override
public void recordVariableReassignment(@NotNull JetBinaryExpression expression) {
public void recordVariableReassignment(@NotNull JetExpression expression) {
}
@@ -191,7 +191,7 @@ public class JetTestUtils {
}
@Override
public boolean isVariableReassignment(JetBinaryExpression expression) {
public boolean isVariableReassignment(JetExpression expression) {
throw new UnsupportedOperationException(); // TODO
}