Skip to content

Commit f84a138

Browse files
committed
Add Tests For Conflicting State Names
1 parent 52a32a5 commit f84a138

8 files changed

Lines changed: 82 additions & 4 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package testSuite.classes.ambiguous_state_names_correct;
2+
3+
import liquidjava.specification.StateSet;
4+
import liquidjava.specification.StateRefinement;
5+
6+
@StateSet({"open", "closed"})
7+
public class Door {
8+
9+
@StateRefinement(to = "open(this)")
10+
public Door() { }
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package testSuite.classes.ambiguous_state_names_correct;
2+
3+
import liquidjava.specification.StateSet;
4+
import liquidjava.specification.StateRefinement;
5+
6+
@StateSet({"open", "closed"})
7+
public class Pipe {
8+
9+
@StateRefinement(to = "open(this)")
10+
public Pipe() { }
11+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package testSuite.classes.ambiguous_state_names_correct;
2+
3+
import liquidjava.specification.Refinement;
4+
5+
public class SimpleTest {
6+
7+
public static void main(String[] args) {
8+
Door d = new Door(); // contains 'open' and 'closed' states
9+
Pipe p = new Pipe(); // unrelated type with the same state names
10+
requiresOpen(d); // ok iff 'open' binds to Door.open otherwise it may bind to Pipe.open and fail
11+
}
12+
13+
public static void requiresOpen(@Refinement("open(s)") Door s) { }
14+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package testSuite.classes.conflicting_state_names_correct;
2+
3+
import liquidjava.specification.StateRefinement;
4+
import liquidjava.specification.StateSet;
5+
6+
@StateSet({"uninitialized", "initialized"})
7+
public class SM1 {
8+
9+
@StateRefinement(to="uninitialized(this)")
10+
public SM1() {}
11+
12+
13+
@StateRefinement(from="uninitialized(this)", to="initialized(this)")
14+
public void initialize() {}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package testSuite.classes.conflicting_state_names_correct;
2+
3+
import liquidjava.specification.StateRefinement;
4+
import liquidjava.specification.StateSet;
5+
6+
@StateSet({"uninitialized", "initialized"})
7+
public class SM2 {
8+
9+
@StateRefinement(to="uninitialized(this)")
10+
public SM2() {}
11+
12+
13+
@StateRefinement(from="uninitialized(this)", to="initialized(this)")
14+
public void initialize() {}
15+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package testSuite.classes.conflicting_state_names_correct;
2+
3+
class SimpleTest {
4+
public static void main(String[] args) {
5+
// both classes contain the same state names
6+
SM1 sm1 = new SM1();
7+
SM2 sm2 = new SM2();
8+
sm1.initialize();
9+
sm2.initialize();
10+
}
11+
}

liquidjava-verifier/src/main/java/liquidjava/processor/VCImplication.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package liquidjava.processor;
22

33
import liquidjava.rj_language.Predicate;
4+
import liquidjava.utils.Utils;
45
import spoon.reflect.reference.CtTypeReference;
56

67
/**
@@ -29,7 +30,7 @@ public void setNext(VCImplication c) {
2930
public String toString() {
3031
if (name != null && type != null) {
3132
String qualType = type.getQualifiedName();
32-
String simpleType = qualType.contains(".") ? qualType.substring(qualType.lastIndexOf(".") + 1) : qualType;
33+
String simpleType = qualType.contains(".") ? Utils.getSimpleName(qualType) : qualType;
3334
return String.format("%-20s %s %s", "∀" + name + ":" + simpleType + ",", refinement.toString(),
3435
next != null ? " => \n" + next.toString() : "");
3536
} else

liquidjava-verifier/src/main/java/liquidjava/utils/Utils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class Utils {
3636
public static final String LONG = "long";
3737
public static final String FLOAT = "float";
3838

39-
private static final Set<String> defaultNames = Set.of("old", "length", "addToIndex", "getFromIndex");
39+
private static final Set<String> DEFAULT_NAMES = Set.of("old", "length", "addToIndex", "getFromIndex");
4040

4141
public static CtTypeReference<?> getType(String type, Factory factory) {
4242
// TODO complete
@@ -65,8 +65,8 @@ public static String getSimpleName(String qualifiedName) {
6565
}
6666

6767
public static String qualifyName(String prefix, String name) {
68-
if (defaultNames.contains(name))
69-
return name;
68+
if (DEFAULT_NAMES.contains(name))
69+
return name; // dont qualify
7070
return String.format("%s.%s", prefix, name);
7171
}
7272
}

0 commit comments

Comments
 (0)