Skip to content

Commit 4ddc546

Browse files
committed
Fix Field Initialization
1 parent af93729 commit 4ddc546

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package testSuite.classes.state_field_initializer_correct;
2+
3+
import liquidjava.specification.Ghost;
4+
import liquidjava.specification.StateRefinement;
5+
6+
public class StateFieldInitializer {
7+
8+
private final Obj obj = new Obj();
9+
10+
public void test() {
11+
obj.foo();
12+
}
13+
}
14+
15+
@Ghost("boolean ready")
16+
class Obj {
17+
18+
@StateRefinement(to="ready(this)")
19+
Obj() {}
20+
21+
@StateRefinement(from="ready(this)")
22+
void foo() {}
23+
}

liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/RefinementTypeChecker.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,11 @@ public <T> void visitCtField(CtField<T> f) {
262262
ret = c.get().substituteVariable(Keys.WILDCARD, name).substituteVariable(f.getSimpleName(), name);
263263
}
264264
RefinedVariable v = context.addVarToContext(name, f.getType(), ret, f);
265+
if (f.getAssignment() != null) {
266+
Predicate refinement = getRefinement(f.getAssignment());
267+
checkVariableRefinements(refinement != null ? refinement : new Predicate(), name, f.getType(), f, f);
268+
AuxStateHandler.addStateRefinements(this, name, f.getAssignment());
269+
}
265270
getMessageFromAnnotation(f).ifPresent(v::setMessage);
266271
if (v instanceof Variable) {
267272
((Variable) v).setLocation("this");

0 commit comments

Comments
 (0)