Skip to content

Commit d5e29a1

Browse files
committed
Refactor Errors to Use Expression Instead of Predicate
1 parent 17c1d65 commit d5e29a1

13 files changed

Lines changed: 68 additions & 48 deletions

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,8 @@ public boolean equals(Object obj) {
4545
if (obj == null || getClass() != obj.getClass())
4646
return false;
4747
ErrorPosition other = (ErrorPosition) obj;
48-
return lineStart == other.lineStart
49-
&& colStart == other.colStart
50-
&& lineEnd == other.lineEnd
51-
&& colEnd == other.colEnd;
48+
return lineStart == other.lineStart && colStart == other.colStart && lineEnd == other.lineEnd
49+
&& colEnd == other.colEnd;
5250
}
5351

5452
@Override

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import spoon.reflect.cu.SourcePosition;
88

99
public class LJDiagnostic {
10-
10+
1111
private String title;
1212
private String message;
1313
private String details;
@@ -27,11 +27,11 @@ public LJDiagnostic(String title, String message, String details, SourcePosition
2727
public String getTitle() {
2828
return title;
2929
}
30-
30+
3131
public String getMessage() {
3232
return message;
3333
}
34-
34+
3535
public String getDetails() {
3636
return details;
3737
}
@@ -74,7 +74,7 @@ public String toString() {
7474
public String getSnippet() {
7575
if (file == null || position == null)
7676
return null;
77-
77+
7878
Path path = Path.of(file);
7979
try {
8080
List<String> lines = Files.readAllLines(path);

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

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

33
import liquidjava.diagnostics.TranslationTable;
4-
import liquidjava.rj_language.Predicate;
4+
import liquidjava.rj_language.ast.Expression;
55
import spoon.reflect.cu.SourcePosition;
66

77
/**
@@ -13,7 +13,7 @@ public class GhostInvocationError extends LJError {
1313

1414
private String expected;
1515

16-
public GhostInvocationError(String message, SourcePosition pos, Predicate expected,
16+
public GhostInvocationError(String message, SourcePosition pos, Expression expected,
1717
TranslationTable translationTable) {
1818
super("Ghost Invocation Error", message, "", pos, translationTable);
1919
this.expected = expected.toString();

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
public class IllegalConstructorTransitionError extends LJError {
1111

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

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ public abstract class LJError extends LJDiagnostic {
1212

1313
private TranslationTable translationTable;
1414

15-
public LJError(String title, String message, String details, SourcePosition pos, TranslationTable translationTable) {
15+
public LJError(String title, String message, String details, SourcePosition pos,
16+
TranslationTable translationTable) {
1617
super(title, message, details, pos, Colors.BOLD_RED);
1718
this.translationTable = translationTable != null ? translationTable : new TranslationTable();
1819
}

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

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

33
import liquidjava.diagnostics.TranslationTable;
4-
import liquidjava.rj_language.Predicate;
4+
import liquidjava.rj_language.ast.Expression;
55
import liquidjava.rj_language.opt.derivation_node.ValDerivationNode;
66
import spoon.reflect.declaration.CtElement;
77

@@ -15,7 +15,7 @@ public class RefinementError extends LJError {
1515
private String expected;
1616
private ValDerivationNode found;
1717

18-
public RefinementError(CtElement element, Predicate expected, ValDerivationNode found,
18+
public RefinementError(CtElement element, Expression expected, ValDerivationNode found,
1919
TranslationTable translationTable) {
2020
super("Refinement Error", String.format("%s is not a subtype of %s", found.getValue(), expected), "",
2121
element.getPosition(), translationTable);

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

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

33
import liquidjava.diagnostics.TranslationTable;
4-
import liquidjava.rj_language.Predicate;
4+
import liquidjava.rj_language.ast.Expression;
55
import spoon.reflect.declaration.CtElement;
66

77
/**
@@ -14,10 +14,10 @@ public class StateConflictError extends LJError {
1414
private String state;
1515
private String className;
1616

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

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import liquidjava.diagnostics.TranslationTable;
66
import liquidjava.rj_language.Predicate;
7+
import liquidjava.rj_language.ast.Expression;
78
import spoon.reflect.declaration.CtElement;
89

910
/**
@@ -17,13 +18,15 @@ public class StateRefinementError extends LJError {
1718
private final String[] expected;
1819
private final String found;
1920

20-
public StateRefinementError(CtElement element, String method, Predicate[] expected, Predicate found,
21+
public StateRefinementError(CtElement element, String method, Expression[] expected, Expression found,
2122
TranslationTable translationTable) {
22-
super("State Refinement Error", "State refinement transition violation", String.format("Expected: %s\nFound: %s",
23-
String.join(", ", Arrays.stream(expected).map(Predicate::toString).toArray(String[]::new)), found.toString()), element.getPosition(),
24-
translationTable);
23+
super("State Refinement Error", "State refinement transition violation",
24+
String.format("Expected: %s\nFound: %s",
25+
String.join(", ", Arrays.stream(expected).map(Expression::toString).toArray(String[]::new)),
26+
found.toString()),
27+
element.getPosition(), translationTable);
2528
this.method = method;
26-
this.expected = Arrays.stream(expected).map(Predicate::toString).toArray(String[]::new);
29+
this.expected = Arrays.stream(expected).map(Expression::toString).toArray(String[]::new);
2730
this.found = found.toString();
2831
}
2932

liquidjava-verifier/src/main/java/liquidjava/diagnostics/warnings/ExternalMethodNotFoundWarning.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ public class ExternalMethodNotFoundWarning extends LJWarning {
1212
private String methodName;
1313
private String className;
1414

15-
public ExternalMethodNotFoundWarning(CtElement element, String message, String details, String methodName, String className) {
15+
public ExternalMethodNotFoundWarning(CtElement element, String message, String details, String methodName,
16+
String className) {
1617
super(message, details, element.getPosition());
1718
this.methodName = methodName;
1819
this.className = className;

liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/ExternalRefinementTypeChecker.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,19 +89,24 @@ public <R> void visitCtMethod(CtMethod<R> method) {
8989
boolean isConstructor = method.getSimpleName().equals(targetType.getSimpleName());
9090
if (isConstructor) {
9191
if (!constructorExists(targetType, method)) {
92-
String message = String.format("Could not find constructor '%s' for '%s'", method.getSignature(), prefix);
92+
String message = String.format("Could not find constructor '%s' for '%s'", method.getSignature(),
93+
prefix);
9394
String[] overloads = getOverloads(targetType, method);
94-
String details = overloads.length == 0 ? null : "Available constructors:\n " + String.join("\n ", overloads);
95+
String details = overloads.length == 0 ? null
96+
: "Available constructors:\n " + String.join("\n ", overloads);
9597

96-
diagnostics.add(new ExternalMethodNotFoundWarning(method, message, details, method.getSignature(), prefix));
98+
diagnostics.add(
99+
new ExternalMethodNotFoundWarning(method, message, details, method.getSignature(), prefix));
97100
}
98101
} else {
99102
if (!methodExists(targetType, method)) {
100-
String message = String.format("Could not find method '%s %s' for '%s'", method.getType().getSimpleName(),
101-
method.getSignature(), prefix);
103+
String message = String.format("Could not find method '%s %s' for '%s'",
104+
method.getType().getSimpleName(), method.getSignature(), prefix);
102105
String[] overloads = getOverloads(targetType, method);
103-
String details = overloads.length == 0 ? null : "Available overloads:\n " + String.join("\n ", overloads);
104-
diagnostics.add(new ExternalMethodNotFoundWarning(method, message, details, method.getSignature(), prefix));
106+
String details = overloads.length == 0 ? null
107+
: "Available overloads:\n " + String.join("\n ", overloads);
108+
diagnostics.add(
109+
new ExternalMethodNotFoundWarning(method, message, details, method.getSignature(), prefix));
105110
return;
106111
}
107112
}

0 commit comments

Comments
 (0)