use mir_analyzer::AnalysisSnapshot;
use mir_analyzer::db::{Fqcn, find_class_like};
use crate::types::type_map::ClassMembers;
pub fn stub_class_members(
snapshot: &AnalysisSnapshot,
fqcn: &str,
) -> Result<Option<ClassMembers>, salsa::Cancelled> {
let normalized = fqcn.strip_prefix('\\').unwrap_or(fqcn);
if !snapshot.is_builtin_class(normalized)? {
return Ok(None);
}
snapshot.read(|db| {
let key = Fqcn::from_str(db, normalized);
let class_like = find_class_like(db, key)?;
let mut members = ClassMembers {
found: true,
..Default::default()
};
for method in class_like.own_methods().values() {
members.methods.push((
method.name.to_string(),
method.is_static,
!method.params.is_empty(),
));
}
if let Some(props) = class_like.own_properties() {
for (name, prop) in props {
members.properties.push((name.to_string(), prop.is_static));
}
}
for name in class_like.own_constants().keys() {
members.constants.push(name.to_string());
}
members.parent = class_like.parent().map(|p| p.to_string());
Some(members)
})
}