Skip to content

Commit 64bec44

Browse files
authored
Merge branch 'main' into diagnostics
2 parents bc965c6 + ecea182 commit 64bec44

File tree

12 files changed

+193
-28
lines changed

12 files changed

+193
-28
lines changed

liquidjava-example/src/main/java/testSuite/ErrorExtRefNonExistentMethod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ public interface ErrorExtRefNonExistentMethod<E> {
1212
public void ArrayList();
1313

1414
@StateRefinement(to = "size(this) == (size(old(this)) + 1)")
15-
public void adddd(E e);
15+
public boolean adddd(E e);
1616
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package testSuite;
2+
3+
import liquidjava.specification.ExternalRefinementsFor;
4+
import liquidjava.specification.RefinementPredicate;
5+
import liquidjava.specification.StateRefinement;
6+
7+
@ExternalRefinementsFor("java.util.ArrayList")
8+
public interface ErrorExtRefWrongConstructor<E> {
9+
10+
@RefinementPredicate("int size(ArrayList l)")
11+
@StateRefinement(to = "size(this) == 0")
12+
public void ArrayList(String wrongParameter);
13+
14+
@StateRefinement(to = "size(this) == (size(old(this)) + 1)")
15+
public boolean add(E e);
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package testSuite;
2+
3+
import liquidjava.specification.ExternalRefinementsFor;
4+
import liquidjava.specification.RefinementPredicate;
5+
import liquidjava.specification.StateRefinement;
6+
7+
@ExternalRefinementsFor("java.util.ArrayList")
8+
public interface ErrorExtRefWrongParameterType<E> {
9+
10+
@RefinementPredicate("int size(ArrayList l)")
11+
@StateRefinement(to = "size(this) == 0")
12+
public void ArrayList();
13+
14+
@StateRefinement(to = "size(this) == (size(old(this)) + 1)")
15+
public boolean add(int wrongParameter);
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package testSuite;
2+
3+
import liquidjava.specification.ExternalRefinementsFor;
4+
import liquidjava.specification.RefinementPredicate;
5+
import liquidjava.specification.StateRefinement;
6+
7+
@ExternalRefinementsFor("java.util.ArrayList")
8+
public interface ErrorExtRefWrongRetType<E> {
9+
10+
@RefinementPredicate("int size(ArrayList l)")
11+
@StateRefinement(to = "size(this) == 0")
12+
public void ArrayList();
13+
14+
@StateRefinement(to = "size(this) == (size(old(this)) + 1)")
15+
public int add(E e); // wrong return type
16+
}

liquidjava-example/src/main/java/testSuite/classes/arraylist_correct/ArrayListRefinements.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public interface ArrayListRefinements<E> {
1212
public void ArrayList();
1313

1414
@StateRefinement(to = "size(this) == (size(old(this)) + 1)")
15-
public void add(E e);
15+
public boolean add(E e);
1616

1717
// @Refinement("size(_) == size(this)")
1818
// public Object clone();

liquidjava-example/src/main/java/testSuite/classes/conflicting_ghost_names_correct/StackRefinements.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public interface StackRefinements<E> {
1111
public void Stack();
1212

1313
@StateRefinement(to="size(this) == size(old(this)) + 1")
14-
public boolean push(E elem);
14+
public E push(E elem);
1515

1616
@StateRefinement(from="size(this) > 0", to="size(this) == size(old(this)) - 1")
1717
public E pop();
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package testSuite.classes.method_overload_error;
2+
3+
import liquidjava.specification.ExternalRefinementsFor;
4+
import liquidjava.specification.Refinement;
5+
6+
@ExternalRefinementsFor("java.util.concurrent.Semaphore")
7+
public interface DummySemaphoreRefinements {
8+
9+
public abstract void acquire();
10+
11+
public abstract void acquire(@Refinement("_ >= 0") int permits) throws InterruptedException;
12+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package testSuite.classes.method_overload_error;
2+
3+
import java.util.concurrent.Semaphore;
4+
5+
public class TestMethodOverloadEror {
6+
public static void main(String[] args) throws InterruptedException {
7+
Semaphore sem = new Semaphore(1);
8+
sem.acquire(-1);
9+
}
10+
}

liquidjava-example/src/main/java/testSuite/math/correctInvocation/MathRefinements.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ public interface MathRefinements {
1616
public int abs(int arg0);
1717

1818
@Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)")
19-
public int abs(long arg0);
19+
public long abs(long arg0);
2020

2121
@Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)")
22-
public int abs(float arg0);
22+
public float abs(float arg0);
2323

2424
@Refinement("(arg0 > 0)?( _ == arg0):(_ == -arg0)")
25-
public int abs(double arg0);
25+
public double abs(double arg0);
2626

2727
@Refinement(" _ == a+b")
2828
public int addExact(int a, int b);
@@ -43,13 +43,13 @@ public interface MathRefinements {
4343
public int decrementExact(int a);
4444

4545
@Refinement("_ == (a-1)")
46-
public int decrementExact(long a);
46+
public long decrementExact(long a);
4747

4848
@Refinement("_ == (a+1)")
4949
public int incrementExact(int a);
5050

5151
@Refinement("_ == (a+1)")
52-
public int incrementExact(long a);
52+
public long incrementExact(long a);
5353

5454
@Refinement("(a > b)? (_ == a):(_ == b)")
5555
public int max(int a, int b);

liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedFunction.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class RefinedFunction extends Refined {
1212
private List<Variable> argRefinements;
1313
private String targetClass;
1414
private List<ObjectState> stateChange;
15+
private String signature;
1516

1617
public RefinedFunction() {
1718
argRefinements = new ArrayList<>();
@@ -47,6 +48,14 @@ public String getTargetClass() {
4748
return targetClass;
4849
}
4950

51+
public void setSignature(String signature) {
52+
this.signature = signature;
53+
}
54+
55+
public String getSignature() {
56+
return signature;
57+
}
58+
5059
public Predicate getRenamedRefinements(Context c, CtElement element) {
5160
return getRenamedRefinements(getAllRefinements(), c, element);
5261
}
@@ -132,8 +141,8 @@ public List<Predicate> getToStates() {
132141

133142
@Override
134143
public String toString() {
135-
return "Function [name=" + super.getName() + ", argRefinements=" + argRefinements + ", refReturn="
136-
+ super.getRefinement() + ", targetClass=" + targetClass + "]";
144+
return "Function [name=" + super.getName() + ", signature=" + signature + ", argRefinements=" + argRefinements
145+
+ ", refReturn=" + super.getRefinement() + ", targetClass=" + targetClass + "]";
137146
}
138147

139148
@Override
@@ -142,6 +151,7 @@ public int hashCode() {
142151
int result = super.hashCode();
143152
result = prime * result + ((argRefinements == null) ? 0 : argRefinements.hashCode());
144153
result = prime * result + ((targetClass == null) ? 0 : targetClass.hashCode());
154+
result = prime * result + ((signature == null) ? 0 : signature.hashCode());
145155
return result;
146156
}
147157

@@ -157,13 +167,18 @@ public boolean equals(Object obj) {
157167
if (argRefinements == null) {
158168
if (other.argRefinements != null)
159169
return false;
160-
} else if (argRefinements.size() != other.argRefinements.size())
170+
} else if (!argRefinements.equals(other.argRefinements))
161171
return false;
162172
if (targetClass == null) {
163173
if (other.targetClass != null)
164174
return false;
165175
} else if (!targetClass.equals(other.targetClass))
166176
return false;
177+
if (signature == null) {
178+
if (other.signature != null)
179+
return false;
180+
} else if (!signature.equals(other.signature))
181+
return false;
167182
return true;
168183
}
169184
}

0 commit comments

Comments
 (0)