ConstantRanges have an annoying special case: If upper and lower are the same, it can be either an empty or a full set. When constructing constant ranges nearly always a full set is intended. This requires an explicit check in many places.
This revision adds a getNonEmpty() constructor that disambiguates this case: If upper and lower are the same, a full set is created.