use crate::name_analysis::symbol::class_member_symbol::ClassMemberSymbol; use crate::name_analysis::symbol::function_symbol::FunctionSymbol; use crate::name_analysis::symbol::source_definition::SourceDefinition; use crate::name_analysis::symbol::Symbol; use std::cell::RefCell; use std::collections::HashMap; use std::rc::Rc; #[derive(Debug)] pub struct ClassSymbol { fqn_parts: Vec>, members: HashMap, Rc>>, functions: HashMap, Rc>>, source_definition: Option, } impl ClassSymbol { pub fn new(fqn_parts: &[Rc], source_definition: Option) -> Self { Self { fqn_parts: fqn_parts.to_vec(), members: HashMap::new(), functions: HashMap::new(), source_definition, } } pub fn declared_name(&self) -> &str { self.fqn_parts.last().unwrap() } pub fn declared_name_owned(&self) -> Rc { self.fqn_parts.last().unwrap().clone() } } impl Symbol for ClassSymbol { fn source_definition(&self) -> Option<&SourceDefinition> { self.source_definition.as_ref() } }