Resolve a static class reference (`self`, `static`, `parent`, or a class name) to its `ClassInfo`. Handles the `self`/`static`/`parent` keywords and falls back to `class_loader` then `resolve_target_classes` for named classes.
(
class: &str,
rctx: &ResolutionCtx<'_>,
)
| 1412 | /// Handles the `self`/`static`/`parent` keywords and falls back to |
| 1413 | /// `class_loader` then `resolve_target_classes` for named classes. |
| 1414 | pub(in crate::completion) fn resolve_static_owner_class( |
| 1415 | class: &str, |
| 1416 | rctx: &ResolutionCtx<'_>, |
| 1417 | ) -> Option<Arc<ClassInfo>> { |
| 1418 | if is_self_or_static(class) { |
| 1419 | rctx.current_class.map(|cc| Arc::new(cc.clone())) |
| 1420 | } else if let Some(resolved_name) = resolve_class_keyword(class, rctx.current_class) { |
| 1421 | // parent — load via class_loader so we get the full parent ClassInfo |
| 1422 | (rctx.class_loader)(&resolved_name) |
| 1423 | } else { |
| 1424 | find_class_by_name(rctx.all_classes, class) |
| 1425 | .map(Arc::clone) |
| 1426 | .or_else(|| (rctx.class_loader)(class)) |
| 1427 | .or_else(|| { |
| 1428 | resolved_to_arcs(resolve_target_classes( |
| 1429 | class, |
| 1430 | crate::AccessKind::DoubleColon, |
| 1431 | rctx, |
| 1432 | )) |
| 1433 | .into_iter() |
| 1434 | .next() |
| 1435 | }) |
| 1436 | } |
| 1437 | } |
| 1438 | |
| 1439 | /// Apply instanceof / assert narrowing for a property-access path. |
| 1440 | /// |
no test coverage detected