Skip to content

Commit 918f777

Browse files
committed
Preserve refinement on forward declared field reads (fix #316)
1 parent dd02e99 commit 918f777

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package testSuite.classes.forward_field_read_correct;
2+
3+
import liquidjava.specification.Refinement;
4+
5+
public class ReadBefore {
6+
private final Job job = new Job();
7+
8+
@Refinement("_ >= 0")
9+
public int get() {
10+
return job.port;
11+
}
12+
13+
static class Job {
14+
@Refinement("_ >= 0")
15+
int port;
16+
}
17+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,10 @@ public <T> void visitCtFieldRead(CtFieldRead<T> fieldRead) {
308308
Predicate.createEquals(Predicate.createVar(Keys.WILDCARD), Predicate.createVar(enumLiteral)));
309309
} else if (tryStaticFinalConstantRefinement(fieldRead)) {
310310
// refinement metadata set by helper
311+
} else if (fieldRead.getVariable().getDeclaration() != null) {
312+
Predicate declared = getRefinementFromAnnotation(fieldRead.getVariable().getDeclaration())
313+
.orElseGet(Predicate::new);
314+
fieldRead.putMetadata(Keys.REFINEMENT, declared.substituteVariable(fieldName, Keys.WILDCARD));
311315
} else {
312316
fieldRead.putMetadata(Keys.REFINEMENT, new Predicate());
313317
// TODO DO WE WANT THIS OR TO SHOW ERROR MESSAGE?

0 commit comments

Comments
 (0)