55import java .util .List ;
66import java .util .Optional ;
77
8- import liquidjava .diagnostics .errors .CustomError ;
9- import liquidjava .diagnostics .errors .InvalidRefinementError ;
10- import liquidjava .diagnostics .errors .LJError ;
11- import liquidjava .diagnostics .errors .SyntaxError ;
8+ import liquidjava .diagnostics .errors .*;
129import liquidjava .processor .context .AliasWrapper ;
1310import liquidjava .processor .context .Context ;
1411import liquidjava .processor .context .GhostFunction ;
3431import spoon .reflect .reference .CtTypeReference ;
3532import spoon .reflect .visitor .CtScanner ;
3633
34+ import static liquidjava .processor .refinement_checker .TypeCheckingUtils .*;
35+
3736public abstract class TypeChecker extends CtScanner {
3837
3938 Context context ;
@@ -65,15 +64,15 @@ public Optional<Predicate> getRefinementFromAnnotation(CtElement element) throws
6564 for (CtAnnotation <? extends Annotation > ann : element .getAnnotations ()) {
6665 String an = ann .getActualAnnotation ().annotationType ().getCanonicalName ();
6766 if (an .contentEquals ("liquidjava.specification.Refinement" )) {
68- String st = TypeCheckingUtils . getStringFromAnnotation (ann .getValue ("value" ));
67+ String st = getStringFromAnnotation (ann .getValue ("value" ));
6968 ref = Optional .of (st );
7069
7170 } else if (an .contentEquals ("liquidjava.specification.RefinementPredicate" )) {
72- String st = TypeCheckingUtils . getStringFromAnnotation (ann .getValue ("value" ));
71+ String st = getStringFromAnnotation (ann .getValue ("value" ));
7372 getGhostFunction (st , element );
7473
7574 } else if (an .contentEquals ("liquidjava.specification.RefinementAlias" )) {
76- String st = TypeCheckingUtils . getStringFromAnnotation (ann .getValue ("value" ));
75+ String st = getStringFromAnnotation (ann .getValue ("value" ));
7776 handleAlias (st , element );
7877 }
7978 }
@@ -209,9 +208,9 @@ protected void getGhostFunction(String value, CtElement element) throws LJError
209208 }
210209 }
211210
212- protected void handleAlias (String value , CtElement element ) throws LJError {
211+ protected void handleAlias (String ref , CtElement element ) throws LJError {
213212 try {
214- AliasDTO a = RefinementsParser .getAliasDeclaration (value );
213+ AliasDTO a = RefinementsParser .getAliasDeclaration (ref );
215214 String klass = null ;
216215 String path = null ;
217216 if (element instanceof CtClass ) {
@@ -226,15 +225,16 @@ protected void handleAlias(String value, CtElement element) throws LJError {
226225 // refinement alias must return a boolean expression
227226 if (a .getExpression () != null && !a .getExpression ().isBooleanExpression ()) {
228227 throw new InvalidRefinementError (element .getPosition (),
229- "Refinement alias must return a boolean expression" , value );
228+ "Refinement alias must return a boolean expression" , ref );
230229 }
231230 AliasWrapper aw = new AliasWrapper (a , factory , klass , path );
232231 context .addAlias (aw );
233232 }
234- } catch (SyntaxError e ) {
233+ } catch (LJError e ) {
235234 // add location info to error
236- SourcePosition pos = Utils .getRefinementAnnotationPosition (element , value );
237- throw new SyntaxError (e .getMessage (), pos , value );
235+ SourcePosition pos = Utils .getRefinementAnnotationPosition (element , ref );
236+ e .setPosition (pos );
237+ throw e ;
238238 }
239239 }
240240
@@ -301,11 +301,11 @@ public void createError(SourcePosition position, Predicate expectedType, Predica
301301 }
302302
303303 public void createSameStateError (SourcePosition position , Predicate expectedType , String klass ) throws LJError {
304- vcChecker .raiseSameStateError (position , expectedType , klass );
304+ vcChecker .raiseSameStateError (position , expectedType );
305305 }
306306
307307 public void createStateMismatchError (SourcePosition position , String method , Predicate found , Predicate expected )
308308 throws LJError {
309- vcChecker .raiseStateMismatchError (position , method , found , expected );
309+ vcChecker .raiseStateMismatchError (position , found , expected );
310310 }
311311}
0 commit comments