Skip to content

Commit 3238fc1

Browse files
committed
Substitute this in expectedStatesDisjunction
1 parent 964aca2 commit 3238fc1

File tree

1 file changed

+7
-2
lines changed
  • liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers

1 file changed

+7
-2
lines changed

liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxStateHandler.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ public static void updateGhostField(CtFieldWrite<?> fw, TypeChecker tc) throws L
417417
.changeOldMentions(vi.getName(), instanceName);
418418

419419
if (!tc.checkStateSMT(prevState, expectState, fw.getPosition())) { // Invalid field transition
420-
tc.throwStateRefinementError(fw.getPosition(), prevState, stateChange.getFrom(), stateChange.getMessage());
420+
tc.throwStateRefinementError(fw.getPosition(), prevState, expectState, stateChange.getMessage());
421421
return;
422422
}
423423

@@ -465,6 +465,7 @@ private static void changeState(TypeChecker tc, VariableInstance vi, List<Object
465465
.substituteVariable(name, instanceName);
466466

467467
boolean found = false;
468+
String newInstanceName = String.format(Formats.INSTANCE, name, tc.getContext().getCounter());
468469
for (ObjectState stateChange : stateChanges) { // TODO: only working for 1 state annotation
469470
if (found) {
470471
break;
@@ -483,7 +484,6 @@ private static void changeState(TypeChecker tc, VariableInstance vi, List<Object
483484

484485
found = tc.checkStateSMT(prevCheck, expectState, invocation.getPosition());
485486
if (stateChange.hasTo()) {
486-
String newInstanceName = String.format(Formats.INSTANCE, name, tc.getContext().getCounter());
487487
Predicate transitionedState = stateChange.getTo().substituteVariable(Keys.WILDCARD, newInstanceName)
488488
.substituteVariable(Keys.THIS, newInstanceName);
489489
for (String s : map.keySet()) {
@@ -498,6 +498,11 @@ private static void changeState(TypeChecker tc, VariableInstance vi, List<Object
498498
Predicate expectedStatesDisjunction = stateChanges.stream().filter(ObjectState::hasFrom)
499499
.map(ObjectState::getFrom)
500500
.reduce(Predicate.createLit("false", Types.BOOLEAN), Predicate::createDisjunction);
501+
expectedStatesDisjunction = expectedStatesDisjunction.substituteVariable(Keys.THIS, newInstanceName);
502+
for (String s : map.keySet()) {
503+
expectedStatesDisjunction = expectedStatesDisjunction.substituteVariable(s, map.get(s));
504+
}
505+
expectedStatesDisjunction = expectedStatesDisjunction.changeOldMentions(vi.getName(), newInstanceName);
501506

502507
// combine messages of all state changes
503508
String message = stateChanges.stream().map(ObjectState::getMessage)

0 commit comments

Comments
 (0)