Skip to content

Commit 57f5ae4

Browse files
committed
Modify Errors to Use TranslationTable
1 parent a40735f commit 57f5ae4

File tree

15 files changed

+103
-68
lines changed

15 files changed

+103
-68
lines changed

liquidjava-verifier/src/main/java/liquidjava/diagnostics/ErrorHandler.java

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,29 @@
1212

1313
public class ErrorHandler {
1414

15-
public static <T> void printError(CtElement var, String moreInfo, Predicate expectedType, Predicate cSMT,
16-
HashMap<String, PlacementInCode> map, ErrorEmitter ee) {
17-
String resumeMessage = "Type expected:" + expectedType.toString(); // + "; " +"Refinement found:" +
18-
// cSMT.toString();
19-
20-
StringBuilder sb = new StringBuilder();
21-
sb.append("______________________________________________________\n");
22-
// title
23-
StringBuilder sbtitle = new StringBuilder();
24-
sbtitle.append("Failed to check refinement at: \n\n");
25-
if (moreInfo != null)
26-
sbtitle.append(moreInfo + "\n");
27-
sbtitle.append(var.toString());
28-
// all message
29-
sb.append(sbtitle.toString() + "\n\n");
30-
sb.append("Type expected:" + expectedType.toString() + "\n");
31-
sb.append("Refinement found: " + cSMT.simplify().getValue() + "\n");
32-
sb.append(printMap(map));
33-
sb.append("Location: " + var.getPosition() + "\n");
34-
sb.append("______________________________________________________\n");
35-
36-
ee.addError(resumeMessage, sb.toString(), var.getPosition(), 1, map);
37-
}
15+
// public static <T> void printError(CtElement var, String moreInfo, Predicate expectedType, Predicate cSMT,
16+
// HashMap<String, PlacementInCode> map, ErrorEmitter ee) {
17+
// String resumeMessage = "Type expected:" + expectedType.toString(); // + "; " +"Refinement found:" +
18+
// // cSMT.toString();
19+
20+
// StringBuilder sb = new StringBuilder();
21+
// sb.append("______________________________________________________\n");
22+
// // title
23+
// StringBuilder sbtitle = new StringBuilder();
24+
// sbtitle.append("Failed to check refinement at: \n\n");
25+
// if (moreInfo != null)
26+
// sbtitle.append(moreInfo + "\n");
27+
// sbtitle.append(var.toString());
28+
// // all message
29+
// sb.append(sbtitle.toString() + "\n\n");
30+
// sb.append("Type expected:" + expectedType.toString() + "\n");
31+
// sb.append("Refinement found: " + cSMT.simplify().getValue() + "\n");
32+
// sb.append(printMap(map));
33+
// sb.append("Location: " + var.getPosition() + "\n");
34+
// sb.append("______________________________________________________\n");
35+
36+
// ee.addError(resumeMessage, sb.toString(), var.getPosition(), 1, map);
37+
// }
3838

3939
public static void printStateMismatch(CtElement element, String method, VCImplication constraintForErrorMsg,
4040
String states, HashMap<String, PlacementInCode> map, ErrorEmitter ee) {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package liquidjava.diagnostics;
2+
3+
import java.util.HashMap;
4+
5+
import liquidjava.processor.context.PlacementInCode;
6+
7+
/**
8+
* Translation table mapping variable names to their placement in code
9+
*
10+
* @see HashMap
11+
* @see PlacementInCode
12+
*/
13+
public class TranslationTable extends HashMap<String, PlacementInCode> {
14+
public TranslationTable() {
15+
super();
16+
}
17+
}

liquidjava-verifier/src/main/java/liquidjava/diagnostics/errors/CustomError.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
public class CustomError extends LJError {
99

1010
public CustomError(String message) {
11-
super("Found Error", message, null);
11+
super("Found Error", message, null, null);
1212
}
1313

1414
@Override

liquidjava-verifier/src/main/java/liquidjava/diagnostics/errors/GhostInvocationError.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package liquidjava.diagnostics.errors;
22

3+
import liquidjava.diagnostics.TranslationTable;
34
import spoon.reflect.declaration.CtElement;
45

56
/**
@@ -11,8 +12,9 @@ public class GhostInvocationError extends LJError {
1112

1213
private String expected;
1314

14-
public GhostInvocationError(CtElement element, String expected) {
15-
super("Ghost Invocation Error", "Invalid types or number of arguments in ghost invocation", element);
15+
public GhostInvocationError(CtElement element, String expected, TranslationTable translationTable) {
16+
super("Ghost Invocation Error", "Invalid types or number of arguments in ghost invocation", element,
17+
translationTable);
1618
this.expected = expected;
1719
}
1820

liquidjava-verifier/src/main/java/liquidjava/diagnostics/errors/IllegalConstructorTransitionError.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class IllegalConstructorTransitionError extends LJError {
1111

1212
public IllegalConstructorTransitionError(CtElement element) {
1313
super("Illegal Constructor Transition Error",
14-
"Found constructor with 'from' state (should only have a 'to' state)", element);
14+
"Found constructor with 'from' state (should only have a 'to' state)", element, null);
1515
}
1616

1717
@Override

liquidjava-verifier/src/main/java/liquidjava/diagnostics/errors/InvalidRefinementError.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package liquidjava.diagnostics.errors;
22

3+
import liquidjava.diagnostics.TranslationTable;
34
import spoon.reflect.declaration.CtElement;
45

56
/**
@@ -11,8 +12,9 @@ public class InvalidRefinementError extends LJError {
1112

1213
private String refinement;
1314

14-
public InvalidRefinementError(String message, CtElement element, String refinement) {
15-
super("Invalid Refinement", message, element);
15+
public InvalidRefinementError(String message, CtElement element, String refinement,
16+
TranslationTable translationTable) {
17+
super("Invalid Refinement", message, element, translationTable);
1618
this.refinement = refinement;
1719
}
1820

liquidjava-verifier/src/main/java/liquidjava/diagnostics/errors/LJError.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package liquidjava.diagnostics.errors;
22

3-
import java.util.HashMap;
4-
53
import liquidjava.diagnostics.ErrorPosition;
6-
import liquidjava.processor.context.PlacementInCode;
4+
import liquidjava.diagnostics.TranslationTable;
75
import liquidjava.utils.Utils;
86
import spoon.reflect.cu.SourcePosition;
97
import spoon.reflect.declaration.CtElement;
@@ -18,14 +16,14 @@ public abstract class LJError extends Exception {
1816
private CtElement element;
1917
private ErrorPosition position;
2018
private SourcePosition location;
21-
private HashMap<String, PlacementInCode> translationTable;
19+
private TranslationTable translationTable;
2220

23-
public LJError(String title, String message, CtElement element) {
21+
public LJError(String title, String message, CtElement element, TranslationTable translationTable) {
2422
super(message);
2523
this.title = title;
2624
this.message = message;
2725
this.element = element;
28-
this.translationTable = new HashMap<>();
26+
this.translationTable = translationTable != null ? translationTable : new TranslationTable();
2927
try {
3028
this.location = element.getPosition();
3129
this.position = ErrorPosition.fromSpoonPosition(element.getPosition());
@@ -55,14 +53,10 @@ public SourcePosition getLocation() {
5553
return location;
5654
}
5755

58-
public HashMap<String, PlacementInCode> getTranslationTable() {
56+
public TranslationTable getTranslationTable() {
5957
return translationTable;
6058
}
6159

62-
public void setTranslationTable(HashMap<String, PlacementInCode> translationTable) {
63-
this.translationTable = translationTable;
64-
}
65-
6660
@Override
6761
public abstract String toString();
6862

liquidjava-verifier/src/main/java/liquidjava/diagnostics/errors/NotFoundError.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package liquidjava.diagnostics.errors;
22

3+
import liquidjava.diagnostics.TranslationTable;
34
import spoon.reflect.declaration.CtElement;
45

56
/**
@@ -9,8 +10,8 @@
910
*/
1011
public class NotFoundError extends LJError {
1112

12-
public NotFoundError(String message, CtElement element) {
13-
super("Not Found Error", message, element);
13+
public NotFoundError(String message, CtElement element, TranslationTable translationTable) {
14+
super("Not Found Error", message, element, translationTable);
1415
}
1516

1617
@Override

liquidjava-verifier/src/main/java/liquidjava/diagnostics/errors/RefinementError.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package liquidjava.diagnostics.errors;
22

3+
import liquidjava.diagnostics.TranslationTable;
34
import liquidjava.rj_language.opt.derivation_node.ValDerivationNode;
45
import liquidjava.utils.Utils;
56
import spoon.reflect.declaration.CtElement;
@@ -14,8 +15,10 @@ public class RefinementError extends LJError {
1415
private String expected;
1516
private ValDerivationNode found;
1617

17-
public RefinementError(CtElement element, String expected, ValDerivationNode found) {
18-
super("Refinement Error", String.format("%s is not a subtype of %s", found.getValue(), expected), element);
18+
public RefinementError(CtElement element, String expected, ValDerivationNode found,
19+
TranslationTable translationTable) {
20+
super("Refinement Error", String.format("%s is not a subtype of %s", found.getValue(), expected), element,
21+
translationTable);
1922
this.expected = expected;
2023
this.found = found;
2124
}

liquidjava-verifier/src/main/java/liquidjava/diagnostics/errors/StateConflictError.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package liquidjava.diagnostics.errors;
22

3+
import liquidjava.diagnostics.TranslationTable;
34
import spoon.reflect.declaration.CtElement;
45

56
/**
@@ -12,10 +13,10 @@ public class StateConflictError extends LJError {
1213
private String state;
1314
private String className;
1415

15-
public StateConflictError(CtElement element, String state, String className) {
16+
public StateConflictError(CtElement element, String state, String className, TranslationTable translationTable) {
1617
super("State Conflict Error",
1718
"Found multiple disjoint states in state transition — State transition can only go to one state of each state set",
18-
element);
19+
element, translationTable);
1920
this.state = state;
2021
this.className = className;
2122
}
@@ -32,6 +33,7 @@ public String getClassName() {
3233
public String toString() {
3334
StringBuilder sb = new StringBuilder();
3435
sb.append("Class: ").append(className).append("\n");
36+
sb.append("State: ").append(state);
3537
return super.toString(sb.toString());
3638
}
3739
}

0 commit comments

Comments
 (0)