Skip to content

Commit 71bd869

Browse files
committed
Fix Ghost Qualified Names
1 parent f0ab2f9 commit 71bd869

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package testSuite.classes.conflicting_ghost_names_correct;
2+
3+
import liquidjava.specification.ExternalRefinementsFor;
4+
import liquidjava.specification.Ghost;
5+
import liquidjava.specification.Refinement;
6+
import liquidjava.specification.StateRefinement;
7+
8+
@ExternalRefinementsFor("java.util.ArrayList")
9+
@Ghost("int size")
10+
public interface ArrayListRefinements<E> {
11+
12+
public void ArrayList();
13+
14+
@StateRefinement(to = "size(this) == (size(old(this)) + 1)")
15+
public boolean add(E elem);
16+
17+
public E get(@Refinement("0 <= _ && _ < size(this)") int index);
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package testSuite.classes.conflicting_ghost_names_correct;
2+
3+
import java.util.ArrayList;
4+
import java.util.Stack;
5+
6+
public class SimpleTest {
7+
public void example() {
8+
ArrayList<Integer> list = new ArrayList<>();
9+
list.add(10);
10+
list.get(0);
11+
12+
Stack<Integer> stack = new Stack<>();
13+
stack.push(1);
14+
stack.peek();
15+
stack.pop();
16+
}
17+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package testSuite.classes.conflicting_ghost_names_correct;
2+
3+
import liquidjava.specification.ExternalRefinementsFor;
4+
import liquidjava.specification.Ghost;
5+
import liquidjava.specification.StateRefinement;
6+
7+
@ExternalRefinementsFor("java.util.Stack")
8+
@Ghost("int size")
9+
public interface StackRefinements<E> {
10+
11+
public void Stack();
12+
13+
@StateRefinement(to="size(this) == size(old(this)) + 1")
14+
public boolean push(E elem);
15+
16+
@StateRefinement(from="size(this) > 0", to="size(this) == size(old(this)) - 1")
17+
public E pop();
18+
19+
@StateRefinement(from="size(this) > 0")
20+
public E peek();
21+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public static void setDefaultState(RefinedFunction f, TypeChecker tc) {
8484
case "double" -> Predicate.createLit("0.0", Utils.DOUBLE);
8585
default -> throw new RuntimeException("Ghost not implemented for type " + retType);
8686
};
87-
Predicate p = Predicate.createEquals(Predicate.createInvocation(sg.getName(), s), typePredicate);
87+
Predicate p = Predicate.createEquals(Predicate.createInvocation(sg.getQualifiedName(), s), typePredicate);
8888
c = Predicate.createConjunction(c, p);
8989
}
9090
ObjectState os = new ObjectState();

0 commit comments

Comments
 (0)