1313import liquidjava .processor .refinement_checker .object_checkers .AuxStateHandler ;
1414import liquidjava .rj_language .BuiltinFunctionPredicate ;
1515import liquidjava .rj_language .Predicate ;
16+ import liquidjava .rj_language .ast .LiteralNull ;
17+ import liquidjava .utils .Utils ;
1618import liquidjava .utils .constants .Formats ;
1719import liquidjava .utils .constants .Keys ;
20+ import liquidjava .utils .constants .Ops ;
1821import liquidjava .utils .constants .Types ;
1922
2023import org .apache .commons .lang3 .NotImplementedException ;
@@ -136,6 +139,9 @@ public <T> void visitCtLocalVariable(CtLocalVariable<T> localVariable) {
136139 if (refinementFound == null ) {
137140 refinementFound = new Predicate ();
138141 }
142+ if (Utils .isBoxedType (localVariable .getType ()) && !Utils .isNullLiteral (e )) {
143+ refinementFound = Predicate .createConjunction (refinementFound , Predicate .createNonNullEq ());
144+ }
139145 context .addVarToContext (varName , localVariable .getType (), new Predicate (), e );
140146 checkVariableRefinements (refinementFound , varName , localVariable .getType (), localVariable , localVariable );
141147 AuxStateHandler .addStateRefinements (this , varName , e );
@@ -219,9 +225,9 @@ public <T> void visitCtLiteral(CtLiteral<T> lit) {
219225 Predicate .createLit (lit .getValue ().toString (), type )));
220226
221227 } else if (lit .getType ().getQualifiedName ().equals ("java.lang.String" )) {
222- // Only taking care of strings inside refinements
228+ lit . putMetadata ( Keys . REFINEMENT , Predicate . createNonNullEq ());
223229 } else if (type .equals (Types .NULL )) {
224- // Skip null literals
230+ lit . putMetadata ( Keys . REFINEMENT , Predicate . createNullEq ());
225231 } else {
226232 throw new NotImplementedException (
227233 String .format ("Literal of type %s not implemented:" , lit .getType ().getQualifiedName ()));
@@ -373,12 +379,14 @@ public <T> void visitCtConditional(CtConditional<T> conditional) {
373379 @ Override
374380 public <T > void visitCtConstructorCall (CtConstructorCall <T > ctConstructorCall ) {
375381 super .visitCtConstructorCall (ctConstructorCall );
382+ ctConstructorCall .putMetadata (Keys .REFINEMENT , Predicate .createNonNullEq ());
376383 mfc .getConstructorInvocationRefinements (ctConstructorCall );
377384 }
378385
379386 @ Override
380387 public <T > void visitCtNewClass (CtNewClass <T > newClass ) {
381388 super .visitCtNewClass (newClass );
389+ newClass .putMetadata (Keys .REFINEMENT , Predicate .createNonNullEq ());
382390 }
383391
384392 // ############################### Inner Visitors
@@ -396,6 +404,9 @@ private void checkAssignment(String name, CtTypeReference<?> type, CtExpression<
396404 refinementFound = new Predicate ();
397405 }
398406 }
407+ if (Utils .isBoxedType (type ) && !Utils .isNullLiteral (assignment )) {
408+ refinementFound = Predicate .createConjunction (refinementFound , Predicate .createNonNullEq ());
409+ }
399410 Optional <VariableInstance > r = context .getLastVariableInstance (name );
400411 // AQUI!!
401412 r .ifPresent (variableInstance -> vcChecker .removePathVariableThatIncludes (variableInstance .getName ()));
0 commit comments