package org.jmlspecs.lang; import org.jmlspecs.utils.Utils; public class JML { // Note that there is a JML.jml file; it contains all of the specifications // for the following methods and additional model methods. It needs to be // in a .jml file because at runtime this .java file is only available in // compiled form, in the runtime library. That also means that if these // methods are used for ESC or RAC, the system Specs files (where JML.jml // lives) must be on the specs path. public static <T> T lbl(String id, T expr) { // Works for primitive types by autoboxing Utils.reportObject(id, expr); return expr; } public static boolean lbl(String id, boolean expr) { // Avoids autoboxing Utils.reportBoolean(id, expr); return expr; } public static int lbl(String id, int expr) { // Avoids autoboxing Utils.reportInt(id, expr); return expr; } public static long lbl(String id, long expr) { // Avoids autoboxing Utils.reportLong(id, expr); return expr; } public static short lbl(String id, short expr) { // Avoids autoboxing Utils.reportShort(id, expr); return expr; } public static byte lbl(String id, byte expr) { // Avoids autoboxing Utils.reportByte(id, expr); return expr; } public static char lbl(String id, char expr) { // Avoids autoboxing Utils.reportChar(id, expr); return expr; } public static float lbl(String id, float expr) { // Avoids autoboxing Utils.reportFloat(id, expr); return expr; } public static double lbl(String id, double expr) { // Avoids autoboxing Utils.reportDouble(id, expr); return expr; } public static boolean lblpos(String id, boolean expr) { if (expr) Utils.reportBoolean(id, expr); return expr; } public static boolean lblneg(String id, boolean expr) { if (!expr) Utils.reportBoolean(id, expr); return expr; } public static boolean informal(String s) { return true; } }