diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java index 422766542db..6b4ba8079dd 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java @@ -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); diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingTrace.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingTrace.java index b88c66bfdf5..a4593d46282 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingTrace.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingTrace.java @@ -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); diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceAdapter.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceAdapter.java index a57438f4775..3bc4b5f0419 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceAdapter.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceAdapter.java @@ -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); } diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java index 4534a9faf2a..a3c41a5177f 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java @@ -31,7 +31,7 @@ public class BindingTraceContext implements BindingContext, BindingTrace { private final Map autoCasts = Maps.newHashMap(); private final Map resolutionScopes = Maps.newHashMap(); - private final Set variableReassignments = Sets.newHashSet(); + private final Set variableReassignments = Sets.newHashSet(); private final Set blocks = new HashSet(); private final Set statements = new HashSet(); @@ -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); } diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index ceca8318ead..228d77f27f6 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -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; } diff --git a/idea/tests/org/jetbrains/jet/JetTestUtils.java b/idea/tests/org/jetbrains/jet/JetTestUtils.java index b6270e3bc80..331b29b8dcd 100644 --- a/idea/tests/org/jetbrains/jet/JetTestUtils.java +++ b/idea/tests/org/jetbrains/jet/JetTestUtils.java @@ -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 }