41 lines
1.2 KiB
Rust
41 lines
1.2 KiB
Rust
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<Rc<str>>,
|
|
members: HashMap<Rc<str>, Rc<RefCell<ClassMemberSymbol>>>,
|
|
functions: HashMap<Rc<str>, Rc<RefCell<FunctionSymbol>>>,
|
|
source_definition: Option<SourceDefinition>,
|
|
}
|
|
|
|
impl ClassSymbol {
|
|
pub fn new(fqn_parts: &[Rc<str>], source_definition: Option<SourceDefinition>) -> 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<str> {
|
|
self.fqn_parts.last().unwrap().clone()
|
|
}
|
|
}
|
|
|
|
impl Symbol for ClassSymbol {
|
|
fn source_definition(&self) -> Option<&SourceDefinition> {
|
|
self.source_definition.as_ref()
|
|
}
|
|
}
|