Skip to content

Commit 95fc7fd

Browse files
committed
Fix Field Increment
1 parent d91f256 commit 95fc7fd

2 files changed

Lines changed: 14 additions & 3 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package testSuite.field_updates;
2+
3+
public class CorrectFieldIncrement {
4+
5+
private int field;
6+
7+
public void increment() {
8+
field++;
9+
}
10+
}

liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/OperationsChecker.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import spoon.reflect.code.CtBinaryOperator;
2626
import spoon.reflect.code.CtExpression;
2727
import spoon.reflect.code.CtFieldRead;
28+
import spoon.reflect.code.CtFieldWrite;
2829
import spoon.reflect.code.CtIf;
2930
import spoon.reflect.code.CtInvocation;
3031
import spoon.reflect.code.CtLiteral;
@@ -39,7 +40,6 @@
3940
import spoon.reflect.declaration.CtClass;
4041
import spoon.reflect.declaration.CtElement;
4142
import spoon.reflect.declaration.CtExecutable;
42-
import spoon.reflect.declaration.CtVariable;
4343
import spoon.reflect.declaration.ParentNotInitializedException;
4444
import spoon.reflect.reference.CtVariableReference;
4545
import spoon.support.reflect.code.CtIfImpl;
@@ -123,6 +123,8 @@ public <T> void getUnaryOpRefinements(CtUnaryOperator<T> operator) throws LJErro
123123
Predicate all;
124124
if (ex instanceof CtVariableWrite<T> w) {
125125
name = w.getVariable().getSimpleName();
126+
if (w instanceof CtFieldWrite<?>)
127+
name = String.format(Formats.THIS, name);
126128
all = getRefinementUnaryVariableWrite(ex, operator, w, name);
127129
rtc.checkVariableRefinements(all, name, w.getType(), operator, w.getVariable().getDeclaration());
128130
return;
@@ -389,9 +391,8 @@ private Predicate createFreshValue(CtExpression<?> element, Predicate refinement
389391
private <T> Predicate getRefinementUnaryVariableWrite(CtExpression<T> ex, CtUnaryOperator<T> operator,
390392
CtVariableWrite<T> w, String name) throws LJError {
391393
String newName = String.format(Formats.INSTANCE, name, rtc.getContext().getCounter());
392-
CtVariable<T> varDecl = w.getVariable().getDeclaration();
393394

394-
Predicate metadada = rtc.getContext().getVariableRefinements(varDecl.getSimpleName());
395+
Predicate metadada = rtc.getContext().getVariableRefinements(name);
395396
metadada = metadada.substituteVariable(Keys.WILDCARD, newName);
396397
metadada = metadada.substituteVariable(name, newName);
397398

0 commit comments

Comments
 (0)