1414import liquidjava .diagnostics .ErrorEmitter ;
1515import liquidjava .diagnostics .ErrorHandler ;
1616import liquidjava .diagnostics .errors .LJError ;
17+ import liquidjava .diagnostics .TranslationTable ;
1718import liquidjava .diagnostics .errors .RefinementError ;
1819import liquidjava .diagnostics .errors .StateRefinementError ;
1920import liquidjava .processor .VCImplication ;
@@ -48,7 +49,7 @@ public void processSubtyping(Predicate expectedType, List<GhostState> list, CtEl
4849 if (expectedType .isBooleanTrue ())
4950 return ;
5051
51- HashMap < String , PlacementInCode > map = new HashMap <> ();
52+ TranslationTable map = new TranslationTable ();
5253 String [] s = { Keys .WILDCARD , Keys .THIS };
5354 Predicate premisesBeforeChange = joinPredicates (expectedType , mainVars , lrv , map ).toConjunctions ();
5455 Predicate premises = new Predicate ();
@@ -60,7 +61,7 @@ public void processSubtyping(Predicate expectedType, List<GhostState> list, CtEl
6061
6162 et = expectedType .changeStatesToRefinements (filtered , s , errorEmitter ).changeAliasToRefinement (context , f );
6263 } catch (Exception e ) {
63- diagnostics .add (new RefinementError (element , expectedType , premises .simplify ()));
64+ diagnostics .add (new RefinementError (element , expectedType , premises .simplify (), map ));
6465 // ErrorHandler.printError(element, e.getMessage(), expectedType, premises, map, errorEmitter);
6566 return ;
6667 }
@@ -89,7 +90,7 @@ public boolean canProcessSubtyping(Predicate type, Predicate expectedType, List<
8990 return true ;
9091
9192 // Predicate premises = joinPredicates(type, element, mainVars, lrv);
92- HashMap < String , PlacementInCode > map = new HashMap <> ();
93+ TranslationTable map = new TranslationTable ();
9394 String [] s = { Keys .WILDCARD , Keys .THIS };
9495
9596 Predicate premises = new Predicate ();
@@ -152,7 +153,7 @@ private List<GhostState> filterGhostStatesForVariables(List<GhostState> list, Li
152153 }
153154
154155 private VCImplication joinPredicates (Predicate expectedType , List <RefinedVariable > mainVars ,
155- List <RefinedVariable > vars , HashMap < String , PlacementInCode > map ) {
156+ List <RefinedVariable > vars , TranslationTable map ) {
156157
157158 VCImplication firstSi = null ;
158159 VCImplication lastSi = null ;
@@ -192,7 +193,7 @@ private VCImplication joinPredicates(Predicate expectedType, List<RefinedVariabl
192193 return cSMT ; // firstSi != null ? firstSi : new VCImplication(new Predicate());
193194 }
194195
195- private void addMap (RefinedVariable var , HashMap < String , PlacementInCode > map ) {
196+ private void addMap (RefinedVariable var , TranslationTable map ) {
196197 map .put (var .getName (), var .getPlacementInCode ());
197198 // if(var instanceof VariableInstance) {
198199 // VariableInstance vi = (VariableInstance) var;
@@ -313,10 +314,10 @@ void removePathVariableThatIncludes(String otherVar) {
313314
314315 // Errors---------------------------------------------------------------------------------------------------
315316
316- private HashMap < String , PlacementInCode > createMap (CtElement element , Predicate expectedType ) {
317+ private TranslationTable createMap (CtElement element , Predicate expectedType ) {
317318 List <RefinedVariable > lrv = new ArrayList <>(), mainVars = new ArrayList <>();
318319 gatherVariables (expectedType , lrv , mainVars );
319- HashMap < String , PlacementInCode > map = new HashMap <> ();
320+ TranslationTable map = new TranslationTable ();
320321 joinPredicates (expectedType , mainVars , lrv , map );
321322 return map ;
322323 }
@@ -326,20 +327,20 @@ protected void printSubtypingError(CtElement element, Predicate expectedType, Pr
326327 List <RefinedVariable > lrv = new ArrayList <>(), mainVars = new ArrayList <>();
327328 gatherVariables (expectedType , lrv , mainVars );
328329 gatherVariables (foundType , lrv , mainVars );
329- HashMap < String , PlacementInCode > map = new HashMap <> ();
330+ TranslationTable map = new TranslationTable ();
330331 Predicate premises = joinPredicates (expectedType , mainVars , lrv , map ).toConjunctions ();
331332
332- diagnostics .add (new RefinementError (element , expectedType , premises .simplify ()));
333+ diagnostics .add (new RefinementError (element , expectedType , premises .simplify (), map ));
333334 // ErrorHandler.printError(element, customeMsg, expectedType, premises, map, errorEmitter);
334335 }
335336
336337 public void printSameStateError (CtElement element , Predicate expectedType , String klass ) {
337- HashMap < String , PlacementInCode > map = createMap (element , expectedType );
338+ TranslationTable map = createMap (element , expectedType );
338339 ErrorHandler .printSameStateSetError (element , expectedType , klass , map , errorEmitter );
339340 }
340341
341342 private void printError (Exception e , Predicate premisesBeforeChange , Predicate expectedType , CtElement element ,
342- HashMap < String , PlacementInCode > map ) {
343+ TranslationTable map ) {
343344 String s = null ;
344345 if (element instanceof CtInvocation ) {
345346 CtInvocation <?> ci = (CtInvocation <?>) element ;
@@ -354,7 +355,7 @@ private void printError(Exception e, Predicate premisesBeforeChange, Predicate e
354355 // Predicate etMessageReady = expectedType; // substituteByMap(expectedType, map);
355356 // Predicate cSMTMessageReady = premisesBeforeChange; // substituteByMap(premisesBeforeChange, map);
356357 if (e instanceof TypeCheckError ) {
357- diagnostics .add (new RefinementError (element , expectedType , premisesBeforeChange .simplify ()));
358+ diagnostics .add (new RefinementError (element , expectedType , premisesBeforeChange .simplify (), map ));
358359 // ErrorHandler.printError(element, s, etMessageReady, cSMTMessageReady, map, errorEmitter);
359360 } else if (e instanceof GhostFunctionError ) {
360361 ErrorHandler .printErrorArgs (element , expectedType , e .getMessage (), map , errorEmitter );
@@ -373,13 +374,9 @@ private void printError(Exception e, Predicate premisesBeforeChange, Predicate e
373374 public void printStateMismatchError (CtElement element , String method , Predicate found , Predicate [] states ) {
374375 List <RefinedVariable > lrv = new ArrayList <>(), mainVars = new ArrayList <>();
375376 gatherVariables (found , lrv , mainVars );
376- HashMap < String , PlacementInCode > map = new HashMap <> ();
377+ TranslationTable map = new TranslationTable ();
377378 VCImplication foundState = joinPredicates (found , mainVars , lrv , map );
378- String [] expectedStates = Arrays .stream (states ).toArray (String []::new );
379-
380- LJError error = new StateRefinementError (element , method , expectedStates , foundState .toString ());
381- error .setTranslationTable (map );
382- diagnostics .add (error );
379+ diagnostics .add (new StateRefinementError (element , method , states , foundState .toConjunctions (), map ));
383380 // ErrorHandler.printStateMismatch(element, method, constraintForErrorMsg, states, map, errorEmitter);
384381 }
385382}
0 commit comments