Skip to content

Commit dc17425

Browse files
committed
Improvements
1 parent a0239ce commit dc17425

File tree

12 files changed

+51
-43
lines changed

12 files changed

+51
-43
lines changed

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

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

3+
import spoon.reflect.cu.SourcePosition;
34
import spoon.reflect.declaration.CtElement;
45

56
/**
@@ -10,11 +11,15 @@
1011
public class CustomError extends LJError {
1112

1213
public CustomError(String message) {
13-
super("Found Error", message, null, null);
14+
super("Found Error", message, null, null, null);
15+
}
16+
17+
public CustomError(String message, SourcePosition pos) {
18+
super("Found Error", message, pos, null, null);
1419
}
1520

1621
public CustomError(CtElement element, String message) {
17-
super("Found Error", message, element, null);
22+
super("Found Error", message, element.getPosition(), element.toString(), null);
1823
}
1924

2025
@Override

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import liquidjava.diagnostics.TranslationTable;
44
import liquidjava.rj_language.Predicate;
5-
import spoon.reflect.declaration.CtElement;
5+
import spoon.reflect.cu.SourcePosition;
66

77
/**
88
* Error indicating that a ghost method invocation is invalid (e.g., has wrong arguments)
@@ -13,9 +13,9 @@ public class GhostInvocationError extends LJError {
1313

1414
private String expected;
1515

16-
public GhostInvocationError(CtElement element, Predicate expected, TranslationTable translationTable) {
17-
super("Ghost Invocation Error", "Invalid types or number of arguments in ghost invocation", element,
18-
translationTable);
16+
public GhostInvocationError(String message, SourcePosition pos, Predicate expected,
17+
TranslationTable translationTable) {
18+
super("Ghost Invocation Error", message, pos, null, translationTable);
1919
this.expected = expected.toString();
2020
}
2121

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ 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, null);
14+
"Found constructor with 'from' state (should only have a 'to' state)", element.getPosition(),
15+
element.toString(), null);
1516
}
1617

1718
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class InvalidRefinementError extends LJError {
1212
private String refinement;
1313

1414
public InvalidRefinementError(CtElement element, String message, String refinement) {
15-
super("Invalid Refinement", message, element, null);
15+
super("Invalid Refinement", message, element.getPosition(), element.toString(), null);
1616
this.refinement = refinement;
1717
}
1818

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

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,27 @@
44
import liquidjava.diagnostics.TranslationTable;
55
import liquidjava.utils.Utils;
66
import spoon.reflect.cu.SourcePosition;
7-
import spoon.reflect.declaration.CtElement;
87

98
/**
109
* Base class for all LiquidJava errors
1110
*/
12-
public abstract class LJError extends Exception {
11+
public abstract class LJError {
1312

1413
private String title;
1514
private String message;
16-
private CtElement element;
15+
private String snippet;
1716
private ErrorPosition position;
1817
private SourcePosition location;
1918
private TranslationTable translationTable;
2019

21-
public LJError(String title, String message, CtElement element, TranslationTable translationTable) {
22-
super(message);
20+
public LJError(String title, String message, SourcePosition pos, String snippet,
21+
TranslationTable translationTable) {
2322
this.title = title;
2423
this.message = message;
25-
this.element = element;
24+
this.snippet = snippet;
2625
this.translationTable = translationTable != null ? translationTable : new TranslationTable();
27-
try {
28-
this.location = element.getPosition();
29-
this.position = ErrorPosition.fromSpoonPosition(element.getPosition());
30-
} catch (Exception e) {
31-
this.location = null;
32-
this.position = null;
33-
}
26+
this.location = pos;
27+
this.position = ErrorPosition.fromSpoonPosition(pos);
3428
}
3529

3630
public String getTitle() {
@@ -41,8 +35,8 @@ public String getMessage() {
4135
return message;
4236
}
4337

44-
public CtElement getElement() {
45-
return element;
38+
public String getSnippet() {
39+
return snippet;
4640
}
4741

4842
public ErrorPosition getPosition() {
@@ -64,8 +58,8 @@ public String toString(String extra) {
6458
StringBuilder sb = new StringBuilder();
6559
sb.append(title);
6660

67-
if (element != null)
68-
sb.append(" at: \n").append(element.toString().replace("@liquidjava.specification.", "@"));
61+
if (snippet != null)
62+
sb.append(" at: \n").append(snippet.replace("@liquidjava.specification.", "@"));
6963

7064
sb.append("\n");
7165
sb.append(message).append("\n");

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

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

1313
public NotFoundError(CtElement element, String message, TranslationTable translationTable) {
14-
super("Not Found Error", message, element, translationTable);
14+
super("Not Found Error", message, element.getPosition(), element.toString(), translationTable);
1515
}
1616

1717
@Override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ public class RefinementError extends LJError {
1818

1919
public RefinementError(CtElement element, Predicate expected, ValDerivationNode found,
2020
TranslationTable translationTable) {
21-
super("Refinement Error", String.format("%s is not a subtype of %s", found.getValue(), expected), element,
22-
translationTable);
21+
super("Refinement Error", String.format("%s is not a subtype of %s", found.getValue(), expected),
22+
element.getPosition(), element.toString(), translationTable);
2323
this.expected = expected.toString();
2424
this.found = found;
2525
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ public class StateConflictError extends LJError {
1515
private String className;
1616

1717
public StateConflictError(CtElement element, Predicate state, String className, TranslationTable translationTable) {
18-
super("State Conflict Error", "Found multiple disjoint states in state transition — State transition can only go to one state of each state set", element, translationTable);
18+
super("State Conflict Error", "Found multiple disjoint states in state transition — State transition can only go to one state of each state set", element.getPosition(),
19+
element.toString(), translationTable);
1920
this.state = state.toString();
2021
this.className = className;
2122
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ public class StateRefinementError extends LJError {
1919

2020
public StateRefinementError(CtElement element, String method, Predicate[] expected, Predicate found,
2121
TranslationTable translationTable) {
22-
super("State Refinement Error", "State refinement transition violation", element, translationTable);
22+
super("State Refinement Error", "State refinement transition violation", element.getPosition(),
23+
element.toString(), translationTable);
2324
this.method = method;
2425
this.expected = Arrays.stream(expected).map(Predicate::toString).toArray(String[]::new);
2526
this.found = found.toString();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public SyntaxError(String message, String refinement) {
1616
}
1717

1818
public SyntaxError(String message, CtElement element, String refinement) {
19-
super("Syntax Error", message, element, null);
19+
super("Syntax Error", message, element.getPosition(), element.toString(), null);
2020
this.refinement = refinement;
2121
}
2222

0 commit comments

Comments
 (0)