Skip to content

Commit c365e74

Browse files
committed
Use Annotation Position in Invalid Refinement Errors
1 parent 48a5de5 commit c365e74

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ public Optional<Predicate> getRefinementFromAnnotation(CtElement element) throws
8181
if (ref.isPresent()) {
8282
Predicate p = new Predicate(ref.get(), element);
8383
if (!p.getExpression().isBooleanExpression()) {
84-
throw new InvalidRefinementError(element.getPosition(),
84+
SourcePosition position = Utils.getAnnotationPosition(element, ref.get());
85+
throw new InvalidRefinementError(position,
8586
"Refinement predicate must be a boolean expression", ref.get());
8687
}
8788
constr = Optional.of(p);
@@ -250,7 +251,7 @@ protected void handleAlias(String ref, CtElement element, SourcePosition positio
250251
if (klass != null && path != null) {
251252
a.parse(path);
252253
if (a.getExpression() != null && !a.getExpression().isBooleanExpression()) {
253-
throw new InvalidRefinementError(element.getPosition(),
254+
throw new InvalidRefinementError(position,
254255
"Refinement alias must return a boolean expression", ref);
255256
}
256257
AliasWrapper aw = new AliasWrapper(a, factory, klass, path);

liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/object_checkers/AuxStateHandler.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import liquidjava.utils.constants.Keys;
1717
import liquidjava.utils.constants.Types;
1818
import spoon.reflect.code.*;
19+
import spoon.reflect.cu.SourcePosition;
1920
import spoon.reflect.declaration.*;
2021
import spoon.reflect.reference.CtTypeReference;
2122

@@ -69,7 +70,7 @@ private static void setConstructorStates(RefinedFunction f, List<CtAnnotation<?
6970
if (to != null) {
7071
Predicate p = new Predicate(to, element);
7172
if (!p.getExpression().isBooleanExpression()) {
72-
throw new InvalidRefinementError(element.getPosition(),
73+
throw new InvalidRefinementError(an.getPosition(),
7374
"State refinement transition must be a boolean expression", to);
7475
}
7576
state.setTo(p);
@@ -208,7 +209,8 @@ private static Predicate createStatePredicate(String value, String targetClass,
208209
boolean isTo, String prefix) throws LJError {
209210
Predicate p = new Predicate(value, e, prefix);
210211
if (!p.getExpression().isBooleanExpression()) {
211-
throw new InvalidRefinementError(e.getPosition(),
212+
SourcePosition position = Utils.getAnnotationPosition(e, value);
213+
throw new InvalidRefinementError(position,
212214
"State refinement transition must be a boolean expression", value);
213215
}
214216
CtTypeReference<?> r = tc.getFactory().Type().createReference(targetClass);

0 commit comments

Comments
 (0)