- let mut lt_provided = 0;
- let mut ty_provided = 0;
- for arg in &generic_args.args {
- match arg {
- GenericArg::Lifetime(_) => lt_provided += 1,
- GenericArg::Type(_) => ty_provided += 1,
- }
- }
+
+ // FIXME(varkor): Separating out the parameters is messy.
+ let lifetimes: Vec<_> = generic_args.args.iter().filter_map(|arg| match arg {
+ GenericArg::Lifetime(lt) => Some(lt),
+ _ => None,
+ }).collect();
+ let types: Vec<_> = generic_args.args.iter().filter_map(|arg| match arg {
+ GenericArg::Type(ty) => Some(ty),
+ _ => None,
+ }).collect();
+ let lt_provided = lifetimes.len();
+ let ty_provided = types.len();