Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,17 @@ public void lengthPlusOne(String s) {
@Refinement("_ > 0")
int x = s.length() + 1; // Expect: Refinement Error
}

static void take(@Refinement("_ > 0") int amount) {}

static void takeTrue(@Refinement("_ == true") boolean flag) {}

// also when passed straight as an argument (issue #451)
public void lengthAsArgument(String s) {
take(s.length()); // Expect: Refinement Error
}

public void isEmptyAsArgument(String s) {
takeTrue(s.isEmpty()); // Expect: Refinement Error
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import liquidjava.processor.refinement_checker.object_checkers.AuxHierarchyRefinementsPassage;
import liquidjava.processor.refinement_checker.object_checkers.AuxStateHandler;
import liquidjava.rj_language.Predicate;
import liquidjava.rj_language.ast.LiteralBoolean;
import liquidjava.rj_language.ast.formatter.ArgumentDisplayNames;
import liquidjava.utils.GeneratedNames;
import liquidjava.utils.Utils;
Expand Down Expand Up @@ -456,7 +457,10 @@ private String createVariableRepresentingArgument(CtExpression<?> iArg, Variable
Predicate met = (Predicate) iArg.getMetadata(Keys.REFINEMENT);
if (met == null)
met = new Predicate();
if (!met.getVariableNames().contains(Keys.WILDCARD))
// a bare `true` means nothing is known about the argument (e.g. the result of an unrefined call), not that it
// equals true
boolean unknown = met.getExpression()instanceof LiteralBoolean b && b.isBooleanTrue();
if (!unknown && !met.getVariableNames().contains(Keys.WILDCARD))
met = Predicate.createEquals(Predicate.createVar(Keys.WILDCARD), met);
String nVar = String.format(Formats.INSTANCE, fArg.getName(), rtc.getContext().getCounter());
rtc.getContext().addInstanceToContext(nVar, fArg.getType(), met.substituteVariable(Keys.WILDCARD, nVar), iArg);
Expand Down
Loading