Apply all registered providers to a base-resolved class. Iterates over `providers` in order (highest priority first) and merges each provider's virtual members into `class`. Because [`merge_virtual_members`] skips members that already exist, higher-priority providers' contributions shadow lower-priority ones.
(
class: &mut ClassInfo,
class_loader: &dyn Fn(&str) -> Option<Arc<ClassInfo>>,
providers: &[Box<dyn VirtualMemberProvider>],
cache: Option<&ResolvedClassCache>,
)
| 498 | /// [`merge_virtual_members`] skips members that already exist, |
| 499 | /// higher-priority providers' contributions shadow lower-priority ones. |
| 500 | pub fn apply_virtual_members( |
| 501 | class: &mut ClassInfo, |
| 502 | class_loader: &dyn Fn(&str) -> Option<Arc<ClassInfo>>, |
| 503 | providers: &[Box<dyn VirtualMemberProvider>], |
| 504 | cache: Option<&ResolvedClassCache>, |
| 505 | ) { |
| 506 | for provider in providers { |
| 507 | if provider.applies_to(class, class_loader) { |
| 508 | let virtual_members = provider.provide(class, class_loader, cache); |
| 509 | if !virtual_members.is_empty() { |
| 510 | merge_virtual_members(class, virtual_members); |
| 511 | } |
| 512 | } |
| 513 | } |
| 514 | } |
| 515 | |
| 516 | /// Return the default set of virtual member providers in priority order. |
| 517 | /// |