use crate::semantic::types::SemanticError;
use crate::syntax::kerml::KerMLFile;
use crate::syntax::kerml::ast::Element;
use crate::semantic::adapters::KermlAdapter;
impl<'a> KermlAdapter<'a> {
pub fn populate(&mut self, file: &KerMLFile) -> Result<(), Vec<SemanticError>> {
let namespace_name = if let Some(ref ns) = file.namespace {
self.visit_namespace(ns);
Some(ns.name.clone())
} else {
None
};
for element in file.elements.iter() {
if let Element::Package(p) = element
&& let Some(ref ns_name) = namespace_name
&& p.name.as_ref() == Some(ns_name)
{
for child in &p.elements {
self.visit_element(child);
}
continue;
}
self.visit_element(element);
}
if self.errors.is_empty() {
Ok(())
} else {
Err(std::mem::take(&mut self.errors))
}
}
}