Skip to content

Commit 051e676

Browse files
committed
Check If State Refinement Transitions Are Boolean Expressions
1 parent 425a5b8 commit 051e676

File tree

1 file changed

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

1 file changed

+13
-2
lines changed

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,15 @@ private static void setConstructorStates(RefinedFunction f, List<CtAnnotation<?
6565
Map<String, CtExpression> m = an.getAllValues();
6666
String to = TypeCheckingUtils.getStringFromAnnotation(m.get("to"));
6767
ObjectState state = new ObjectState();
68-
if (to != null)
69-
state.setTo(new Predicate(to, element, tc.getErrorEmitter()));
68+
if (to != null) {
69+
Predicate p = new Predicate(to, element, tc.getErrorEmitter());
70+
if (!p.getExpression().isBooleanExpression()) {
71+
ErrorHandler.printCustomError(element, "State refinement must be a boolean expression",
72+
tc.getErrorEmitter());
73+
return;
74+
}
75+
state.setTo(p);
76+
}
7077
l.add(state);
7178
}
7279
f.setAllStates(l);
@@ -176,6 +183,10 @@ private static ObjectState getStates(CtAnnotation<? extends Annotation> ctAnnota
176183
private static Predicate createStatePredicate(String value, /* RefinedFunction f */ String targetClass,
177184
TypeChecker tc, CtElement e, boolean isTo, String prefix) throws ParsingException {
178185
Predicate p = new Predicate(value, e, tc.getErrorEmitter(), prefix);
186+
if (!p.getExpression().isBooleanExpression()) {
187+
ErrorHandler.printCustomError(e, "State refinement must be a boolean expression", tc.getErrorEmitter());
188+
return new Predicate();
189+
}
179190
String t = targetClass; // f.getTargetClass();
180191
CtTypeReference<?> r = tc.getFactory().Type().createReference(t);
181192

0 commit comments

Comments
 (0)