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; } } }