DfaMemoryState (@NotNull DfaValueFactory factory, @NotNull Map<Value, List<DfaVariableValue>> valueMap, @NotNull Map<Value, JdiValueInfo> infoMap) { DfaMemoryState state = new JvmDfaMemoryStateImpl(factory); List<DfaVariableValue> distinctValues = new ArrayList<>(); valueMap.forEach((jdiValue, vars) -> { DfaVariableValue canonical = vars.get(0); if (!TypeConstraint.fromDfType(canonical.getDfType()).isComparedByEquals()) { distinctValues.add(canonical); } for (DfaVariableValue var : vars) { state.applyCondition(var.eq(canonical)); addConditions(var, infoMap.get(jdiValue), state); } }); EntryStream.ofPairs(distinctValues) .filterKeyValue((left, right) -> left.getDfType().meet(right.getDfType()) != DfType.BOTTOM) .limit(20) // avoid too complex state .forKeyValue((left, right) -> state.applyCondition(left.cond(RelationType.NE, right))); return state; }