OpenJML с дженериками?

У меня есть класс Edge.java, Когда я запускаю его через OpenJML, это происходит:

error: An internal JML error occurred, possibly recoverable. Please report the bug with as much information as you can. Reason: com.sun.tools.javac.code.Symbol$TypeSymbol cannot be cast to com.sun.tools.javac.code.Symbol$ClassSymbol

Странно то, что я даже не начал вставлять нотации jml.

Мой jdk 1.7, openjml является текущим (перезагружаем оба, чтобы убедиться).

Это команда, используемая для запуска openjml (по примеру с сайта):java -jar "E:\Downloads\openjml\openjml.jar" -esc -prover z3_4_3 -exec "E:\Downloads\z3-4.3.0-x64\bin\z3.exe" -noPurityCheck Test.java

Редактировать: я могу подтвердить, что даже очень простой класс с обобщениями может вызвать эту ошибку:

public class Test<T> {
    T i;
}

Edge.java

public class Edge<K> implements Comparable<Edge<K>> {
    public K n1, n2;
    public int weight;

    public final int tiebreaker;
    public static int nextTiebreaker = 0;

    public Edge(K n1, K n2, int weight) {
        this.n1 = n1;
        this.n2 = n2;
        this.weight = weight;
        tiebreaker = nextTiebreaker++;
    }

    @Override
    public int compareTo(Edge<K> o) {
        if(this.weight > o.weight) return +1;
        if(this.weight < o.weight) return -1;

        return tiebreaker - o.tiebreaker; //Same cost, pick one to be the "larger" 
    }
}

2 ответа

Решение

Обходной путь, который я нашел, состоит в том, чтобы удалить -esc опция (запускает расширенную статическую проверку). Не уверен в правильном способе решить эту проблему.

Я также сталкиваюсь с подобной проблемой, но использую опцию -esc для файла B.java в каталоге temp_release.

java -jar openjml.jar -noPurityCheck -esc  -progress -exec /Library/bin/z3 -prover z3_4_3 B.java
Proving methods in B
Starting proof of B.B() with prover z3_4_3
error: An internal JML error occurred, possibly recoverable.  Please report the bug with as much information as you can.
  Reason: Unexpected result when querying SMT solver for reason for an unknown result: success
Completed proof of B.B() with prover z3_4_3 - with warnings

Б. Ява

public class B { /*@ invariant true; */ }.

Completed proving methods in B
Другие вопросы по тегам