package org.jmlspecs.openjmltest.testcases;
/** This tests parsing of nowarn. */
import org.jmlspecs.openjml.JmlTree.JmlAnnotation;
import org.jmlspecs.openjml.JmlTree.JmlClassDecl;
import org.jmlspecs.openjml.JmlTree.JmlCompilationUnit;
import org.jmlspecs.openjmltest.ParseBase;
import org.junit.Test;
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
import com.sun.tools.javac.tree.JCTree.JCIdent;
import com.sun.tools.javac.tree.JCTree.JCModifiers;
public class nowarn extends ParseBase {
@Override
public void setUp() throws Exception {
// noCollectDiagnostics = true;
// jmldebug = true;
super.setUp();
}
@Test
public void testNowarn() {
checkCompilationUnit("/*@ nowarn Z; */package t; //@ nowarn X; \n/*@ nowarn Y; */ class A{}",
JmlCompilationUnit.class,16,
JCIdent.class, 24,
JmlClassDecl.class, 59,
JCModifiers.class, -1);
checkMessages();
}
@Test
public void testNowarn2() {
checkCompilationUnit("package /*@ nowarn Z ZZ ZZZ; */t; //@ nowarn X,A,B; \n/*@ nowarn Y, YY, YYY; */ class A{}",
JmlCompilationUnit.class,0,
JCIdent.class, 31,
JmlClassDecl.class, 80,
JCModifiers.class, -1);
checkMessages();
}
@Test
public void testNowarn3() {
checkCompilationUnit("package /*@ nowarn Z ; nowarn Q; */t; //@ nowarn X,A,B; \n/*@ nowarn Y, YY, YYY; */ class A{}",
JmlCompilationUnit.class,0,
JCIdent.class, 35,
JmlClassDecl.class, 84,
JCModifiers.class, -1);
checkMessages();
}
@Test
public void testNowarn4() {
checkCompilationUnit("package /*@ nowarn Z */t; //@ nowarn X\n/*@ nowarn ; */ class A{}",
JmlCompilationUnit.class,0,
JCIdent.class, 24,
JmlClassDecl.class, 56,
JCModifiers.class, -1);
checkMessages("/TEST.java:1: warning: A nowarn pragma must end with a semicolon",23,
"/TEST.java:1: warning: A nowarn pragma must end with a semicolon",40);
}
@Test
public void testNowarn5() {
checkCompilationUnit("package /*@ nowarn Z */t; //@ nowarn X\n/*@ nowarn ; */ class A{}",
JmlCompilationUnit.class,0,
JCIdent.class, 24,
JmlClassDecl.class, 56,
JCModifiers.class, -1);
checkMessages("/TEST.java:1: warning: A nowarn pragma must end with a semicolon",23,
"/TEST.java:1: warning: A nowarn pragma must end with a semicolon",40);
}
@Test
public void testNowarn6() {
checkCompilationUnit("package /*@ nowarn nowarn */t; \n class /*@ nowarn ; */A{}",
JmlCompilationUnit.class,0,
JCIdent.class, 28,
JmlClassDecl.class, 33,
JCModifiers.class, -1);
checkMessages("/TEST.java:1: warning: A nowarn pragma must end with a semicolon",27);
}
@Test
public void testNowarnA() {
checkCompilationUnit("package t; \n/*@ pure nowarn Y; */ class A{}",
JmlCompilationUnit.class,0,
JCIdent.class, 8,
JmlClassDecl.class, 34,
JCModifiers.class, 16,
JmlAnnotation.class, 16,
JCFieldAccess.class, 16,
JCFieldAccess.class, 16,
JCFieldAccess.class, 16,
JCIdent.class, 16
);
checkMessages();
}
@Test
public void testNowarnB() {
checkCompilationUnit("package t; \n/*@ pure nowarn Y */ class A{}",
JmlCompilationUnit.class,0,
JCIdent.class, 8,
JmlClassDecl.class, 33,
JCModifiers.class, 16,
JmlAnnotation.class, 16,
JCFieldAccess.class, 16,
JCFieldAccess.class, 16,
JCFieldAccess.class, 16,
JCIdent.class, 16
);
checkMessages("/TEST.java:2: warning: A nowarn pragma must end with a semicolon",19);
}
@Test
public void testNowarnC() {
checkCompilationUnit("package t; \n/*@ pure nowarn C; nullable_by_default */ class A{}",
JmlCompilationUnit.class,0,
JCIdent.class, 8,
JmlClassDecl.class, 54,
JCModifiers.class, 16,
JmlAnnotation.class, 16,
JCFieldAccess.class, 16,
JCFieldAccess.class, 16,
JCFieldAccess.class, 16,
JCIdent.class, 16,
JmlAnnotation.class, 31,
JCFieldAccess.class, 31,
JCFieldAccess.class, 31,
JCFieldAccess.class, 31,
JCIdent.class, 31
);
checkMessages();
}
@Test
public void testNowarnD() {
checkCompilationUnit("package t; \n/*@ pure nowarn C nullable */ class A{}",
JmlCompilationUnit.class,0,
JCIdent.class, 8,
JmlClassDecl.class, 53,
JCModifiers.class, 16,
JmlAnnotation.class, 16,
JCFieldAccess.class, 16,
JCFieldAccess.class, 16,
JCFieldAccess.class, 16,
JCIdent.class, 16
);
checkMessages("/TEST.java:2: warning: A nowarn pragma must end with a semicolon",39);
}
@Test
public void testNowarnE() {
checkCompilationUnit("package t; \n/*@ nowarn C! ; */ class A{}",
JmlCompilationUnit.class,0,
JCIdent.class, 8,
JmlClassDecl.class, 32,
JCModifiers.class, -1);
checkMessages("/TEST.java:2: Expected an identifier here in the nowarn pragma",14);
}
}