Java 带泛型的OpenJML?
我有一个类Edge.java。当我通过OpenJML运行它时,会发生以下情况: 错误:发生内部JML错误,可能是可恢复的。请尽可能多地报告错误信息。 原因:com.sun.tools.javac.code.Symbol$TypeSymbol无法强制转换为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 编辑: 我可以确认,即使是带有泛型的非常简单的类也会导致此错误:Java 带泛型的OpenJML?,java,jml,Java,Jml,我有一个类Edge.java。当我通过OpenJML运行它时,会发生以下情况: 错误:发生内部JML错误,可能是可恢复的。请尽可能多地报告错误信息。 原因:com.sun.tools.javac.code.Symbol$TypeSymbol无法强制转换为com.sun.tools.javac.code.Symbol$ClassSymbol 奇怪的是,我甚至还没有开始输入jml符号 我的jdk是1.7,openjml是当前重新下载的,以确保两者 这是用于从站点运行openjml的命令,示例如下:
public class Test<T> {
T i;
}
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"
}
}
我发现的解决方法是删除-esc选项运行扩展静态检查。不确定解决这个问题的正确方法。我也面临类似的问题,但在temp\u release目录下的B.java文件上使用-esc选项
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
B.爪哇是
public class B { /*@ invariant true; */ }.
Completed proving methods in B
您使用的是什么版本的java?需要是Java1.7。再次尝试下载OpenJML?我刚刚在您的Edge.java上运行了它,它没有报告任何错误。您正在做比java-jar openjml.jar Edge.java更复杂的事情吗?如果是这样,请使用post命令行。你们有SMT校准仪吗?哪一个?抱歉,我将编辑问题以包含更多信息。我可以确认我在Linux上使用yices SMT prover得到相同的异常。