package org.jmlspecs.openjmltest.testcases; import java.util.Collection; import org.jmlspecs.openjml.Utils; import org.jmlspecs.openjml.esc.JmlEsc; import org.jmlspecs.openjmltest.EscBase; import org.junit.Assume; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.ParameterizedWithNames; import org.junit.runners.Parameterized.Parameters; @RunWith(ParameterizedWithNames.class) public class escnewassignable extends EscBase { // Forms to test: x, this.x, , this.* // xx, T.xx, tt.T.x, T.* tt.T.* // o.x o.oo.x, m(o).x o.*, o.oo.*, m(o).* // a[i].x a[i].* a[*].x a[*].* a[i .. j].x a[i ..*].x a[*..j].x a[*..*].x a[i .. j].* a[i ..*].* a[*..j].* a[*..*].* // a[i] a[i..j] a[*] a[i..*] a[*..j] a[*..*] // \everything \nothing \not_specified public escnewassignable(String options, String solver) { super(options,solver); } @Override public void setUp() throws Exception { //noCollectDiagnostics = true; super.setUp(); //print = true; } @Test public void testAssignable1() { helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" public int x,y; \n" +" //@ assignable x; \n" +" public void m1bad(int i) {\n" +" y = 0 ;\n" +" }\n" +" //@ assignable x; \n" +" public void m1good(int i) {\n" +" x = 0 ;\n" +" i = 0; ;\n" +" int k = 0; ;\n" +" k = 0; ;\n" +" }\n" +"}" ,"/tt/TestJava.java:6: warning: The prover cannot establish an assertion (Assignable) in method m1bad: y",7 ,"/tt/TestJava.java:4: warning: Associated declaration",7 ); } @Test public void testAssignable2() { helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" public int x; \n" +" //@ requires i > 0; \n" +" //@ assignable x; \n" +" public void mgood(int i) {\n" +" x = 0 ;\n" +" }\n" +" //@ requires i > 0; \n" +" //@ assignable x; \n" +" public void m1good(int i) {\n" +" if (i > 0) x = 0 ;\n" +" }\n" +"}" ); } @Test public void testAssignable3() { helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" public int x,y; \n" +" //@ requires i > 0; \n" +" //@ assignable x; \n" +" //@ also \n" +" //@ requires i == 0; \n" +" //@ assignable y; \n" +" public void m1bad(int i) {\n" +" x = 0 ;\n" +" }\n" +" //@ requires i > 0; \n" +" //@ assignable x; \n" +" //@ also \n" +" //@ requires i == 0; \n" +" //@ assignable y; \n" +" public void m1good(int i) {\n" +" if (i > 0) x = 0 ;\n" +" if (i == 0) y = 0 ;\n" +" }\n" +"}" ,"/tt/TestJava.java:10: warning: The prover cannot establish an assertion (Assignable) in method m1bad: x",7 ,"/tt/TestJava.java:8: warning: Associated declaration",7 ); } @Test public void testAssignable4() { helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" public int x,y; \n" +" //@ requires i > 0; \n" +" //@ assignable x; \n" +" //@ also \n" +" //@ requires i == 0; \n" +" //@ assignable y; \n" +" public void m1bad(int i) {\n" +" i = 0 ;\n" +" y = 0 ;\n" +" }\n" +"}" ,"/tt/TestJava.java:11: warning: The prover cannot establish an assertion (Assignable) in method m1bad: y",7 ,"/tt/TestJava.java:5: warning: Associated declaration",7 ); } @Test public void testAssignable5() { //Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" public int x,xx; public static int y,yy; \n" +" //@ assignable this.x; \n" +" public void m1bad(int i) {\n" +" y = 0 ;\n" +" }\n" +" //@ assignable this.x; \n" +" public void m2bad(int i) {\n" +" xx = 0 ;\n" +" }\n" +" //@ assignable TestJava.y; \n" +" public void m3bad(int i) {\n" +" yy = 0 ;\n" +" }\n" +" //@ assignable TestJava.y; \n" +" public void m4bad(int i) {\n" +" x = 0 ;\n" +" }\n" +" //@ assignable tt.TestJava.y; \n" +" public void m5bad(int i) {\n" +" yy = 0 ;\n" +" }\n" +" //@ assignable tt.TestJava.y; \n" +" public void m6bad(int i) {\n" +" x = 0 ;\n" +" }\n" +" //@ assignable this.x; \n" +" public void m1good(int i) {\n" +" x = 0 ;\n" +" }\n" +" //@ assignable TestJava.y; \n" +" public void m2good(int i) {\n" +" y = 0 ;\n" +" }\n" +" //@ assignable tt.TestJava.y; \n" +" public void m3good(int i) {\n" +" y = 0 ;\n" +" }\n" +"}" ,"/tt/TestJava.java:6: warning: The prover cannot establish an assertion (Assignable) in method m1bad: y",7 ,"/tt/TestJava.java:4: warning: Associated declaration",7 ,"/tt/TestJava.java:10: warning: The prover cannot establish an assertion (Assignable) in method m2bad: xx",8 ,"/tt/TestJava.java:8: warning: Associated declaration",7 ,"/tt/TestJava.java:14: warning: The prover cannot establish an assertion (Assignable) in method m3bad: yy",8 ,"/tt/TestJava.java:12: warning: Associated declaration",7 ,"/tt/TestJava.java:18: warning: The prover cannot establish an assertion (Assignable) in method m4bad: x",7 ,"/tt/TestJava.java:16: warning: Associated declaration",7 ,"/tt/TestJava.java:22: warning: The prover cannot establish an assertion (Assignable) in method m5bad: yy",8 ,"/tt/TestJava.java:20: warning: Associated declaration",7 ,"/tt/TestJava.java:26: warning: The prover cannot establish an assertion (Assignable) in method m6bad: x",7 ,"/tt/TestJava.java:24: warning: Associated declaration",7 ); } @Test public void testAssignable6() { //Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" public int x,xx; static public int y,yy; \n" +" //@ assignable this.*; \n" +" public void m1bad(int i) {\n" +" y = 0 ;\n" +" }\n" +" //@ assignable TestJava.*; \n" +" public void m2bad(int i) {\n" +" x = 0 ;\n" +" }\n" +" //@ assignable tt.TestJava.*; \n" +" public void m3bad(int i) {\n" +" x = 0 ;\n" +" }\n" +" //@ assignable this.*; \n" +" public void m1good(int i) {\n" +" x = 0 ;\n" +" }\n" +" //@ assignable TestJava.*; \n" +" public void m2good(int i) {\n" +" y = 0 ;\n" +" }\n" +" //@ assignable tt.TestJava.*; \n" +" public void m3good(int i) {\n" +" y = 0 ;\n" +" }\n" +" //@ requires true; \n" +" //@ assignable y; \n" +" //@ also requires true; \n" +" //@ assignable this.*; \n" +" public void m0bad(int i) {\n" +" x = 0 ;\n" +" }\n" +" //@ requires true; \n" // TODO check that the semantics of JML is that assignable clauses may be split like this +" //@ assignable y; \n" +" //@ assignable this.*; \n" +" public void m0good(int i) {\n" +" x = 0 ;\n" +" }\n" +" //@ requires true; \n" +" //@ assignable y, this.*; \n" +" public void m00good(int i) {\n" +" x = 0 ;\n" +" }\n" +"}" ,"/tt/TestJava.java:6: warning: The prover cannot establish an assertion (Assignable) in method m1bad: y",7 ,"/tt/TestJava.java:4: warning: Associated declaration",7 ,"/tt/TestJava.java:10: warning: The prover cannot establish an assertion (Assignable) in method m2bad: x",7 ,"/tt/TestJava.java:8: warning: Associated declaration",7 ,"/tt/TestJava.java:14: warning: The prover cannot establish an assertion (Assignable) in method m3bad: x",7 ,"/tt/TestJava.java:12: warning: Associated declaration",7 ,"/tt/TestJava.java:33: warning: The prover cannot establish an assertion (Assignable) in method m0bad: x",7 ,"/tt/TestJava.java:29: warning: Associated declaration",7 ); } @Test public void testAssignable7() { //Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" int x,xx; static int y,yy; /*@ spec_public */ int[] z;\n" +" //@ assignable \\everything; \n" +" public void m1good(int i, TestJava a) {\n" +" y = 0 ;\n" +" x = 0 ;\n" +" i = 0 ;\n" +" this.x = 0 ;\n" +" this.y = 0 ;\n" +" a.x = 0 ;\n" +" a.y = 0 ;\n" +" TestJava.y = 0 ;\n" +" //@ assume z != null && z.length > 1;\n" +" z[0] = 0 ;\n" +" }\n" +" //@ assignable \\nothing; \n" +" public void m1bad(int i, TestJava a) {\n" +" y = 0 ;\n" +" }\n" +"\n" +" //@ assignable \\nothing; \n" +" public void m2bad(int i, TestJava a) {\n" +" x = 0 ;\n" +" }\n" +"\n" +" //@ assignable \\nothing; \n" +" public void m3good(int i, TestJava a) {\n" +" i = 0 ;\n" +" }\n" +"\n" +" //@ assignable \\nothing; \n" +" public void m4bad(int i, TestJava a) {\n" +" this.x = 0 ;\n" +" }\n" +"\n" +" //@ assignable \\nothing; \n" +" public void m5bad(int i, TestJava a) {\n" +" this.y = 0 ;\n" +" }\n" +"\n" +" //@ assignable \\nothing; \n" +" public void m6bad(int i, TestJava a) {\n" +" a.x = 0 ;\n" +" }\n" +"\n" +" //@ assignable \\nothing; \n" +" public void m7bad(int i, TestJava a) {\n" +" a.y = 0 ;\n" +" }\n" +"\n" +" //@ assignable \\nothing; \n" +" public void m8bad(int i, TestJava a) {\n" +" TestJava.y = 0 ;\n" +" }\n" +"\n" +" //@ assignable \\nothing; \n" +" public void m9bad(int i, TestJava a) {\n" +" //@ assume z != null && z.length > 1;\n" +" z[0] = 0 ;\n" +" }\n" +" public TestJava() { z = new int[10];}\n" +"}" ,"/tt/TestJava.java:19: warning: The prover cannot establish an assertion (Assignable) in method m1bad: y",7 ,"/tt/TestJava.java:17: warning: Associated declaration",7 ,"/tt/TestJava.java:24: warning: The prover cannot establish an assertion (Assignable) in method m2bad: x",7 ,"/tt/TestJava.java:22: warning: Associated declaration",7 ,"/tt/TestJava.java:34: warning: The prover cannot establish an assertion (Assignable) in method m4bad: this.x",12 ,"/tt/TestJava.java:32: warning: Associated declaration",7 ,"/tt/TestJava.java:39: warning: The prover cannot establish an assertion (Assignable) in method m5bad: this.y",12 ,"/tt/TestJava.java:37: warning: Associated declaration",7 ,"/tt/TestJava.java:44: warning: The prover cannot establish an assertion (Assignable) in method m6bad: a.x",9 ,"/tt/TestJava.java:42: warning: Associated declaration",7 ,"/tt/TestJava.java:49: warning: The prover cannot establish an assertion (Assignable) in method m7bad: a.y",9 ,"/tt/TestJava.java:47: warning: Associated declaration",7 ,"/tt/TestJava.java:54: warning: The prover cannot establish an assertion (Assignable) in method m8bad: TestJava.y",16 ,"/tt/TestJava.java:52: warning: Associated declaration",7 ,"/tt/TestJava.java:60: warning: The prover cannot establish an assertion (Assignable) in method m9bad: z[0]",10 ,"/tt/TestJava.java:57: warning: Associated declaration",7 ); } @Test public void testAssignable8() { //Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" public int[] z;\n" +" //@ public invariant z != null && z.length > 10;\n" +" //@ requires a != null && a.length > 10; assignable a[1]; \n" +" public void m1good(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +" //@ requires a != null && a.length > 10; assignable z[1]; \n" +" public void m1bad(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +" //@ requires a != null && a.length > 10; assignable a[*]; \n" +" public void m2good(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +" //@ requires a != null && a.length > 10; assignable z[*]; \n" +" public void m2bad(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +" //@ requires a != null && a.length > 10; assignable a[0..3]; \n" +" public void m3good(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +" //@ requires a != null && a.length > 10; assignable z[0..3]; \n" +" public void m3bad(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +" //@ requires a != null && a.length > 10; assignable a[2..3]; \n" +" public void m3bad1(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +" //@ requires a != null && a.length > 10; assignable a[0..0]; \n" +" public void m3bad2(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +" //@ requires a != null && a.length > 10; assignable a[0..*]; \n" +" public void m4good(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +" //@ requires a != null && a.length > 10; assignable z[0..*]; \n" +" public void m4bad(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +" //@ requires a != null && a.length > 10; assignable a[2..*]; \n" +" public void m4bad1(int i, int[] a) {\n" +" a[1] = 0 ;\n" +" }\n" +"}" ,"/tt/TestJava.java:2: warning: The prover cannot establish an assertion (InvariantExit) in method TestJava",8 ,"/tt/TestJava.java:4: warning: Associated declaration",14 ,"/tt/TestJava.java:11: warning: The prover cannot establish an assertion (Assignable) in method m1bad: a[1]",10 ,"/tt/TestJava.java:9: warning: Associated declaration",44 ,"/tt/TestJava.java:19: warning: The prover cannot establish an assertion (Assignable) in method m2bad: a[1]",10 ,"/tt/TestJava.java:17: warning: Associated declaration",44 ,"/tt/TestJava.java:27: warning: The prover cannot establish an assertion (Assignable) in method m3bad: a[1]",10 ,"/tt/TestJava.java:25: warning: Associated declaration",44 ,"/tt/TestJava.java:31: warning: The prover cannot establish an assertion (Assignable) in method m3bad1: a[1]",10 ,"/tt/TestJava.java:29: warning: Associated declaration",44 ,"/tt/TestJava.java:35: warning: The prover cannot establish an assertion (Assignable) in method m3bad2: a[1]",10 ,"/tt/TestJava.java:33: warning: Associated declaration",44 ,"/tt/TestJava.java:43: warning: The prover cannot establish an assertion (Assignable) in method m4bad: a[1]",10 ,"/tt/TestJava.java:41: warning: Associated declaration",44 ,"/tt/TestJava.java:47: warning: The prover cannot establish an assertion (Assignable) in method m4bad1: a[1]",10 ,"/tt/TestJava.java:45: warning: Associated declaration",44 ); } @Test public void testAssignable9() { //Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" public int i; static public int si; @org.jmlspecs.annotation.NonNull public TestJava b;\n" +" //@ assignable a.i; \n" +" public void m1good(TestJava a) {\n" +" a.i = 0 ;\n" +" }\n" +" //@ assignable a.*; \n" +" public void m2good(TestJava a) {\n" +" a.i = 0 ;\n" +" }\n" +" //@ assignable b.i; \n" +" public void m1bad(TestJava a) {\n" +" a.i = 0 ;\n" +" }\n" +" //@ assignable b.*; \n" +" public void m2bad(TestJava a) {\n" +" a.i = 0 ;\n" +" }\n" +" //@ assignable a.si; \n" +" public void m3bad(TestJava a) {\n" +" a.i = 0 ;\n" +" }\n" +" //@ requires a == b; assignable b.i; \n" +" public void m4good(TestJava a) {\n" +" a.i = 0 ;\n" +" }\n" +" //@ requires a == this; assignable i; \n" +" public void m5good(TestJava a) {\n" +" a.i = 0 ;\n" +" }\n" //FIXME - is this really no legal syntax // +" //@ assignable *.i; \n" // +" public void m3good(TestJava a) {\n" // +" a.i = 0 ;\n" // +" }\n" +" public TestJava() { b = new TestJava(); } \n" +"}" ,"/tt/TestJava.java:14: warning: The prover cannot establish an assertion (Assignable) in method m1bad: a.i",9 ,"/tt/TestJava.java:12: warning: Associated declaration",7 ,"/tt/TestJava.java:18: warning: The prover cannot establish an assertion (Assignable) in method m2bad: a.i",9 ,"/tt/TestJava.java:16: warning: Associated declaration",7 ,"/tt/TestJava.java:22: warning: The prover cannot establish an assertion (Assignable) in method m3bad: a.i",9 ,"/tt/TestJava.java:20: warning: Associated declaration",7 ); } @Test public void testAssignableM1() { // Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" static public class A { public int x,y; public static int xx,yy; }\n" +" public int x,y; static public int xx,yy; @org.jmlspecs.annotation.NonNull public A a; \n" +" //@ assignable y, A.xx, a.x, this.y, TestJava.yy, tt.TestJava.yy; \n" +" public void m1bad(int i) {\n" +" m();\n" +" }\n" +" //@ assignable x; \n" +" public void m1good(int i) {\n" +" m();\n" +" }\n" +" //@ assignable this.x; \n" +" public void m2good(int i) {\n" +" m();\n" +" }\n" +" //@ assignable y, A.xx, a.xx, a.x, this.y, TestJava.yy, tt.TestJava.yy; //@ requires a != null; \n" +" public void m3bad(int i) {\n" +" ms();\n" +" }\n" // Line 20 +" //@ assignable x; \n" +" public void m() {\n" +" }\n" +" //@ assignable xx; \n" // Line 40 +" public void ms() {\n" +" }\n" +" public TestJava() { a = new A(); }\n" +"}" ,"/tt/TestJava.java:7: warning: The prover cannot establish an assertion (Assignable) in method m1bad: x",6 ,"/tt/TestJava.java:5: warning: Associated declaration",7 ,"/tt/TestJava.java:19: warning: The prover cannot establish an assertion (Assignable) in method m3bad: xx",7 ,"/tt/TestJava.java:17: warning: Associated declaration",7 ); } @Test public void testAssignableM2() { // Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" static public class A { public int x,y; public static int xx,yy; }\n" +" public int x,y; static public int xx,yy; @org.jmlspecs.annotation.NonNull public A a; \n" +" //@ assignable xx; \n" +" public void m3good(int i) {\n" +" ms();\n" +" }\n" +" //@ assignable TestJava.xx; \n" +" public void m3agood(int i) {\n" +" ms();\n" +" }\n" +" //@ assignable tt.TestJava.xx; \n" +" public void m3bgood(int i) {\n" +" ms();\n" +" }\n" +" //@ assignable this.xx; \n" +" public void m3cgood(int i) {\n" +" ms();\n" +" }\n" +" //@ assignable x; \n" +" public void m() {\n" +" }\n" +" //@ assignable xx; \n" // Line 40 +" public void ms() {\n" +" }\n" +" public TestJava() { a = new A(); }\n" +"}" ); } @Test public void testAssignableM3() { // Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" static public class A { public int x,y; public static int xx,yy; }\n" +" public int x,y; static public int xx,yy; @org.jmlspecs.annotation.NonNull public A a; \n" +" //@ assignable x; \n" +" public void m() {\n" +" }\n" +" //@ assignable xx; \n" // Line 40 +" public void ms() {\n" +" }\n" +" //@ assignable this.x; \n" +" public void mt() {\n" +" }\n" +" //@ assignable TestJava.xx; \n" +" public void mts() {\n" +" }\n" +" public TestJava() { a = new A(); }\n" +"}" ); } @Test public void testAssignableM4() { // Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" static public class A { public int x,y; public static int xx,yy; }\n" +" public int x,y; static public int xx,yy; @org.jmlspecs.annotation.NonNull public A a; \n" +" //@ assignable tt.TestJava.xx; \n" +" public void mtts() {\n" +" }\n" +" //@ assignable A.xx; \n" +" public void mas() {\n" +" }\n" +" //@ requires b == this; assignable x; \n" +" public void m1z1(TestJava b) {\n" +" b.m();\n" +" }\n" +" //@ requires b != null; assignable x; \n" +" public void m1z1bad(TestJava b) {\n" +" b.m();\n" +" }\n" +" //@ assignable x; \n" +" public void m() {\n" +" }\n" +" public TestJava() { a = new A(); }\n" +"}" ,"/tt/TestJava.java:17: warning: The prover cannot establish an assertion (Assignable) in method m1z1bad: x",8 ,"/tt/TestJava.java:15: warning: Associated declaration",7 ); } @Test public void testAssignableM5() { // Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" static public class A { public int x,y; public static int xx,yy; }\n" +" public int x,y; static public int xx,yy; @org.jmlspecs.annotation.NonNull public A a; \n" +" //@ requires b != null; assignable b.x; \n" +" public void m1z2(TestJava b) {\n" +" b.m();\n" +" }\n" +" //@ requires b == this; assignable b.x; \n" +" public void m1z3(TestJava b) {\n" +" m();\n" +" }\n" +" //@ requires b == this; assignable b.x; \n" +" public void m1z4(TestJava b) {\n" +" this.m();\n" +" }\n" +" //@ requires b != null; assignable b.x; \n" +" public void m1z4bad(TestJava b) {\n" +" this.m();\n" +" }\n" +" //@ assignable x; \n" +" public void m() {\n" +" }\n" +" public TestJava() { a = new A(); }\n" +"}" ,"/tt/TestJava.java:19: warning: The prover cannot establish an assertion (Assignable) in method m1z4bad: x",11 ,"/tt/TestJava.java:17: warning: Associated declaration",7 ); } @Test public void testAssignableM1bug() { //Assume.assumeTrue(runLongTests || !"cvc4".equals(solver)); helpTCX("tt.TestJava","package tt; \n" +"public class TestJava { \n" +" static public class A { int x,y; static int xx,yy; }\n" +" public int x,y; static public int xx,yy; @org.jmlspecs.annotation.NonNull public A a; \n" +" //@ requires a == this; assignable x; \n" +" public void m1z1(TestJava a) {\n" +" a.m();\n" +" }\n" +" //@ requires a != null; assignable x; \n" +" public void m1z1bad(TestJava a) {\n" +" a.m();\n" +" }\n" +" //@ requires a != null; assignable a.x; \n" +" public void m1z2(TestJava a) {\n" +" a.m();\n" +" }\n" +" //@ requires a == this; assignable a.x; \n" +" public void m1z3(TestJava a) {\n" +" m();\n" +" }\n" +" //@ requires a == this; assignable a.x; \n" +" public void m1z4(TestJava a) {\n" +" this.m();\n" +" }\n" +" //@ requires a != null; assignable a.x; \n" +" public void m1z4bad(TestJava a) {\n" +" this.m();\n" // Line 27 +" }\n" +" //@ assignable x; \n" // Line 29 +" public void m() {\n" +" }\n" +" public TestJava() { a = new A(); }\n" +"}" ,"/tt/TestJava.java:11: warning: The prover cannot establish an assertion (Assignable) in method m1z1bad: x",8 ,"/tt/TestJava.java:9: warning: Associated declaration",7 ,"/tt/TestJava.java:27: warning: The prover cannot establish an assertion (Assignable) in method m1z4bad: x",11 ,"/tt/TestJava.java:25: warning: Associated declaration",7 ); } }