MethodYield { @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } MethodYield other = (MethodYield) obj; return new EqualsBuilder() .append(parametersConstraints, other.parametersConstraints) .isEquals(); } protected  MethodYield(MethodBehavior behavior); protected  MethodYield(ExplodedGraph.Node node, MethodBehavior behavior); abstract Stream<ProgramState> statesAfterInvocation(List<SymbolicValue> invocationArguments, List<Type> invocationTypes, ProgramState programState,
    Supplier<SymbolicValue> svSupplier); Stream<ProgramState> parametersAfterInvocation(List<SymbolicValue> invocationArguments, List<Type> invocationTypes, ProgramState programState); boolean generatedByCheck(SECheck check); MethodBehavior methodBehavior(); @Override abstract String toString(); @Override int hashCode(); @Override boolean equals(Object obj); Set<Flow> flow(List<Integer> parameterIndices, List<Class<? extends Constraint>> domains, int maxReturnedFlows);  }
@Test void test_yield_on_reassignments() throws Exception { SymbolicExecutionVisitor sev = createSymbolicExecutionVisitor("src/test/files/se/XProcYieldsReassignments.java"); MethodBehavior mb = getMethodBehavior(sev, "foo"); assertThat(mb.happyPathYields()) .isNotEmpty() .allMatch(y -> y.parametersConstraints.get(0) != null && !ObjectConstraint.NULL.equals(y.parametersConstraints.get(0).get(ObjectConstraint.class))); }