Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ public class ErrorEmitter {
private int errorStatus;
private HashMap<String, PlacementInCode> map;

public ErrorEmitter() {}
public ErrorEmitter() {
}

public void addError(
String titleMessage, String msg, SourcePosition p, int errorStatus, HashMap<String, PlacementInCode> map) {
public void addError(String titleMessage, String msg, SourcePosition p, int errorStatus,
HashMap<String, PlacementInCode> map) {
this.titleMessage = titleMessage;
fullMessage = msg;
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,13 @@ public class ErrorHandler {
* @param expectedType
* @param cSMT
*/
public static <T> void printError(
CtElement var,
Predicate expectedType,
Predicate cSMT,
HashMap<String, PlacementInCode> map,
ErrorEmitter ee) {
public static <T> void printError(CtElement var, Predicate expectedType, Predicate cSMT,
HashMap<String, PlacementInCode> map, ErrorEmitter ee) {
printError(var, null, expectedType, cSMT, map, ee);
}

public static <T> void printError(
CtElement var,
String moreInfo,
Predicate expectedType,
Predicate cSMT,
HashMap<String, PlacementInCode> map,
ErrorEmitter errorl) {
public static <T> void printError(CtElement var, String moreInfo, Predicate expectedType, Predicate cSMT,
HashMap<String, PlacementInCode> map, ErrorEmitter errorl) {
String resumeMessage = "Type expected:" + expectedType.toString(); // + "; " +"Refinement found:" +
// cSMT.toString();

Expand All @@ -44,7 +35,8 @@ public static <T> void printError(
// title
StringBuilder sbtitle = new StringBuilder();
sbtitle.append("Failed to check refinement at: \n\n");
if (moreInfo != null) sbtitle.append(moreInfo + "\n");
if (moreInfo != null)
sbtitle.append(moreInfo + "\n");
sbtitle.append(var.toString());
// all message
sb.append(sbtitle.toString() + "\n\n");
Expand All @@ -57,13 +49,8 @@ public static <T> void printError(
errorl.addError(resumeMessage, sb.toString(), var.getPosition(), 1, map);
}

public static void printStateMismatch(
CtElement element,
String method,
VCImplication constraintForErrorMsg,
String states,
HashMap<String, PlacementInCode> map,
ErrorEmitter errorl) {
public static void printStateMismatch(CtElement element, String method, VCImplication constraintForErrorMsg,
String states, HashMap<String, PlacementInCode> map, ErrorEmitter errorl) {

String resumeMessage = "Failed to check state transitions. " + "Expected possible states:" + states; // + ";
// Found
Expand Down Expand Up @@ -91,12 +78,8 @@ public static void printStateMismatch(
errorl.addError(resumeMessage, sb.toString(), element.getPosition(), 1, map);
}

public static <T> void printErrorUnknownVariable(
CtElement var,
String et,
String correctRefinement,
HashMap<String, PlacementInCode> map,
ErrorEmitter errorl) {
public static <T> void printErrorUnknownVariable(CtElement var, String et, String correctRefinement,
HashMap<String, PlacementInCode> map, ErrorEmitter errorl) {

String resumeMessage = "Encountered unknown variable";

Expand All @@ -114,13 +97,8 @@ public static <T> void printErrorUnknownVariable(
errorl.addError(resumeMessage, sb.toString(), var.getPosition(), 2, map);
}

public static <T> void printNotFound(
CtElement var,
Predicate constraint,
Predicate constraint2,
String msg,
HashMap<String, PlacementInCode> map,
ErrorEmitter errorl) {
public static <T> void printNotFound(CtElement var, Predicate constraint, Predicate constraint2, String msg,
HashMap<String, PlacementInCode> map, ErrorEmitter errorl) {

StringBuilder sb = new StringBuilder();
sb.append("______________________________________________________\n");
Expand All @@ -136,12 +114,8 @@ public static <T> void printNotFound(
errorl.addError(msg, sb.toString(), var.getPosition(), 2, map);
}

public static <T> void printErrorArgs(
CtElement var,
Predicate expectedType,
String msg,
HashMap<String, PlacementInCode> map,
ErrorEmitter errorl) {
public static <T> void printErrorArgs(CtElement var, Predicate expectedType, String msg,
HashMap<String, PlacementInCode> map, ErrorEmitter errorl) {
StringBuilder sb = new StringBuilder();
sb.append("______________________________________________________\n");
String title = "Error in ghost invocation: " + msg + "\n";
Expand All @@ -154,12 +128,8 @@ public static <T> void printErrorArgs(
errorl.addError(title, sb.toString(), var.getPosition(), 2, map);
}

public static void printErrorTypeMismatch(
CtElement element,
Predicate expectedType,
String message,
HashMap<String, PlacementInCode> map,
ErrorEmitter errorl) {
public static void printErrorTypeMismatch(CtElement element, Predicate expectedType, String message,
HashMap<String, PlacementInCode> map, ErrorEmitter errorl) {
StringBuilder sb = new StringBuilder();
sb.append("______________________________________________________\n");
sb.append(message + "\n\n");
Expand All @@ -171,8 +141,8 @@ public static void printErrorTypeMismatch(
errorl.addError(message, sb.toString(), element.getPosition(), 2, map);
}

public static void printSameStateSetError(
CtElement element, Predicate p, String name, HashMap<String, PlacementInCode> map, ErrorEmitter errorl) {
public static void printSameStateSetError(CtElement element, Predicate p, String name,
HashMap<String, PlacementInCode> map, ErrorEmitter errorl) {
String resume = "Error found multiple disjoint states from a State Set in a refinement";

StringBuilder sb = new StringBuilder();
Expand Down Expand Up @@ -249,7 +219,8 @@ public static void printSyntaxError(String msg, String ref, ErrorEmitter errorl)

private static String printLine() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 130; i++) sb.append("-"); // -----------
for (int i = 0; i < 130; i++)
sb.append("-"); // -----------
return sb.toString();
}

Expand All @@ -267,9 +238,7 @@ private static String printMap(HashMap<String, PlacementInCode> map) {
formatter.format(printLine() + "\n");
// data
for (String s : map.keySet())
formatter.format(
"| %-32s | %-60s | %-1s \n",
s, map.get(s).getText(), map.get(s).getSimplePosition());
formatter.format("| %-32s | %-60s | %-1s \n", s, map.get(s).getText(), map.get(s).getSimplePosition());
// end
formatter.format(printLine() + "\n\n");
String s = formatter.toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ public void process(CtPackage pkg) {
pkg.accept(new MethodsFirstChecker(c, factory, errorEmitter)); // double passing idea (instead of headers)

pkg.accept(new RefinementTypeChecker(c, factory, errorEmitter));
if (errorEmitter.foundError()) return;
if (errorEmitter.foundError())
return;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,31 +30,32 @@ public String toString() {
if (name != null && type != null) {
String qualType = type.getQualifiedName();
String simpleType = qualType.contains(".") ? qualType.substring(qualType.lastIndexOf(".") + 1) : qualType;
return String.format(
"%-20s %s %s",
"∀" + name + ":" + simpleType + ",",
refinement.toString(),
return String.format("%-20s %s %s", "∀" + name + ":" + simpleType + ",", refinement.toString(),
next != null ? " => \n" + next.toString() : "");
} else return String.format("%-20s %s", "", refinement.toString());
} else
return String.format("%-20s %s", "", refinement.toString());
}

public Predicate toConjunctions() {
Predicate c = new Predicate();
if (name == null && type == null && next == null) return c;
if (name == null && type == null && next == null)
return c;
c = auxConjunction(c);
return c;
}

private Predicate auxConjunction(Predicate c) {
Predicate t = Predicate.createConjunction(c, refinement);
if (next == null) return t;
if (next == null)
return t;
t = next.auxConjunction(t);
return t;
}

public VCImplication clone() {
VCImplication vc = new VCImplication(this.name, this.type, this.refinement.clone());
if (this.next != null) vc.next = this.next.clone();
if (this.next != null)
vc.next = this.next.clone();
return vc;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ public <T> void visitCtClass(CtClass<T> ctClass) {
return;
}

ctClass.getDeclaredFields().stream()
.filter(fld -> fld.getType().getQualifiedName().equals("int"))
ctClass.getDeclaredFields().stream().filter(fld -> fld.getType().getQualifiedName().equals("int"))
.forEach(fld -> {
CtTypeReference<?> fld_type = fld.getType();
CtAnnotation<?> gen_ann = factory.createAnnotation(factory.createCtTypeReference(Ghost.class));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,17 @@ public Predicate getPremises(List<String> list, List<String> newNames, CtElement
List<Predicate> invocationPredicates = getPredicatesFromExpression(list, elem, ee);
Predicate prem = new Predicate();
for (int i = 0; i < invocationPredicates.size(); i++) {
prem = Predicate.createConjunction(
prem, Predicate.createEquals(Predicate.createVar(newNames.get(i)), invocationPredicates.get(i)));
prem = Predicate.createConjunction(prem,
Predicate.createEquals(Predicate.createVar(newNames.get(i)), invocationPredicates.get(i)));
}
return prem.clone();
}

private List<Predicate> getPredicatesFromExpression(List<String> list, CtElement elem, ErrorEmitter ee)
throws ParsingException {
List<Predicate> lp = new ArrayList<>();
for (String e : list) lp.add(new Predicate(e, elem, ee));
for (String e : list)
lp.add(new Predicate(e, elem, ee));

return lp;
}
Expand Down
Loading