Skip to content

Commit 0687906

Browse files
add visit call and examples
1 parent d33af55 commit 0687906

3 files changed

Lines changed: 33 additions & 2 deletions

File tree

liquidjava-example/src/main/java/testSuite/classes/resultset_forward_correct/ResultSetTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,19 @@ float readAverage(Connection conn) throws SQLException {
6262
return 0.0f;
6363
}
6464
}
65+
66+
float readAverage2(Connection conn) throws SQLException {
67+
Statement parentstmt = conn.createStatement();
68+
ResultSet parentMessage =
69+
parentstmt.executeQuery("SELECT SUM(IMPORTANCE) AS IMPAVG FROM MAIL");
70+
// FIX (from accepted answer): parentMessage.next();
71+
// VIOLATION: cursor is before the first row; getFloat() with no next().
72+
boolean b = parentMessage.next();
73+
if( b ) {
74+
float avgsum = parentMessage.getFloat("IMPAVG");
75+
return avgsum;
76+
} else {
77+
return 0.0f;
78+
}
79+
}
6580
}

liquidjava-example/src/main/java/testSuite/classes/resultset_forward_error/ResultSetTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,18 @@ float readAverage(Connection conn) throws SQLException {
6767
float avgsum = parentMessage.getFloat("IMPAVG"); // State Refinement Error
6868
return avgsum;
6969
}
70+
71+
// Branch-sensitive: legal in the then-branch (onRow), illegal in the else-branch (endRows).
72+
float readAverageVarElse(Connection conn) throws SQLException {
73+
Statement parentstmt = conn.createStatement();
74+
ResultSet parentMessage = parentstmt.executeQuery("SELECT SUM(IMPORTANCE) AS IMPAVG FROM MAIL");
75+
float avgsum = 0.0f;
76+
boolean b = parentMessage.next();
77+
if (b) {
78+
avgsum = parentMessage.getFloat("IMPAVG");
79+
} else {
80+
avgsum = parentMessage.getFloat("IMPAVG"); // State Refinement Error
81+
}
82+
return avgsum;
83+
}
7084
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -538,8 +538,10 @@ private Predicate getAssignmentRefinement(String name, CtExpression<?> assignmen
538538
}
539539

540540
private Predicate getExpressionRefinements(CtExpression<?> element) throws LJError {
541-
if (element instanceof CtVariableRead<?>) {
542-
// CtVariableRead<?> elemVar = (CtVariableRead<?>) element;
541+
if (element instanceof CtFieldRead<?>) {
542+
return getRefinement(element);
543+
} else if (element instanceof CtVariableRead<?> varRead) {
544+
visitCtVariableRead(varRead);
543545
return getRefinement(element);
544546
} else if (element instanceof CtBinaryOperator<?>) {
545547
CtBinaryOperator<?> binop = (CtBinaryOperator<?>) element;

0 commit comments

Comments
 (0)