code: public MultipleVersionRange intersect(MultipleVersionRange intersection)
     {
        List<VersionRange> r1 = this.ranges;
        List<VersionRange> r2 = intersection.ranges;
        List<VersionRange> ranges;
  
        if (r1.isEmpty() || r2.isEmpty())
        {
           ranges = Collections.emptyList();
        }
        else
        {
           ranges = intersection(r1, r2);
        }
  
        if (ranges.isEmpty())
        {
           throw new VersionException("Intersected incompatible version ranges");
        }
  
        return new MultipleVersionRange(ranges);
     }
docs: Creates and returns a new <code>MultipleVersionRange</code> that is a intersection of this version range and the
  specified version range.
  <p>
  Note: Precedence is given to the recommended version from this version range over the recommended version from the
  specified version range.
  </p>
  
  @param intersection the <code>MultipleVersionRange</code> that will be used to restrict this version range.
  @return the <code>MultipleVersionRange</code> that is a intersection of this version range and the specified
  version range.
  <p>
  The ranges of the returned version range will be an intersection of the ranges of this version range and
  the specified version range if both version ranges have ranges. Otherwise, the ranges on the returned
  range will be empty.
  </p>
  <p>
  The recommended version of the returned version range will be the recommended version of this version
  range, provided that ranges falls within the intersected ranges. If the ranges are empty, this version
  range's recommended version is used if it is not <code>null</code>. If it is <code>null</code>, the
  specified version range's recommended version is used (provided it is non-<code>null</code>). If no
  recommended version can be obtained, the returned version range's recommended version is set to
  <code>null</code>.
  </p>
  @throws NullPointerException if the specified <code>MultipleVersionRange</code> is <code>null</code>.