Equation (boolean exception, Member member, BasicValue returnValue, boolean stable) { final EKey key = new EKey(member, Out, stable); final Result result; if (exception) { result = Value.Bot; } else if (FalseValue == returnValue) { result = Value.False; } else if (TrueValue == returnValue) { result = Value.True; } else if (returnValue instanceof TrackableNullValue) { result = Value.Null; } else if (returnValue instanceof NotNullValue || returnValue == ThisValue) { result = Value.NotNull; } else if (returnValue instanceof TrackableCallValue call) { EKey callKey = new EKey(call.method, Out, call.stableCall); Set<EKey> keys = Collections.singleton(callKey); result = new Pending(Collections.singleton(new Component(Value.Top, keys))); } else { return null; } return new Equation(key, result); }