static TypeInfo getFixedType(Library typeSystem, Collection<TypeInfo> bounds) {
     var filteredBounds = new HashSet<TypeInfo>(bounds);
     foreach (var ti in bounds) {
         foreach (var tj in bounds) {
             if (!BytecodeHelper.hasImplicitConversion(ti, tj)) {
                 filteredBounds.remove(tj);
             }
         }
     }
     if (filteredBounds.size() != 1) {
         return null;
     } else {
         var result = filteredBounds.single();
         if (result == null) {
             return typeSystem.ObjectType;
         } else {
             return result;
         }
     }
 }