public function visitNamespace(ASTNamespace $namespace)
{
if (!$namespace->isUserDefined()) {
return;
}
$stats = $this->analyzer->getStats($namespace);
if (count($stats) === 0) {
return;
}
$doc = $this->packages->ownerDocument;
$this->concreteClasses = $doc->createElement('ConcreteClasses');
$this->abstractClasses = $doc->createElement('AbstractClasses');
$packageXml = $doc->createElement('Package');
$packageXml->setAttribute('name', Utf8Util::ensureEncoding($namespace->getName()));
$statsXml = $doc->createElement('Stats');
$statsXml->appendChild($doc->createElement('TotalClasses'))->appendChild($doc->createTextNode($stats['tc']));
$statsXml->appendChild($doc->createElement('ConcreteClasses'))->appendChild($doc->createTextNode($stats['cc']));
$statsXml->appendChild($doc->createElement('AbstractClasses'))->appendChild($doc->createTextNode($stats['ac']));
$statsXml->appendChild($doc->createElement('Ca'))->appendChild($doc->createTextNode($stats['ca']));
$statsXml->appendChild($doc->createElement('Ce'))->appendChild($doc->createTextNode($stats['ce']));
$statsXml->appendChild($doc->createElement('A'))->appendChild($doc->createTextNode($stats['a']));
$statsXml->appendChild($doc->createElement('I'))->appendChild($doc->createTextNode($stats['i']));
$statsXml->appendChild($doc->createElement('D'))->appendChild($doc->createTextNode($stats['d']));
$dependsUpon = $doc->createElement('DependsUpon');
foreach ($this->analyzer->getEfferents($namespace) as $efferent) {
$efferentXml = $doc->createElement('Package');
$efferentXml->appendChild($doc->createTextNode(Utf8Util::ensureEncoding($efferent->getName())));
$dependsUpon->appendChild($efferentXml);
}
$usedBy = $doc->createElement('UsedBy');
foreach ($this->analyzer->getAfferents($namespace) as $afferent) {
$afferentXml = $doc->createElement('Package');
$afferentXml->appendChild($doc->createTextNode(Utf8Util::ensureEncoding($afferent->getName())));
$usedBy->appendChild($afferentXml);
}
$packageXml->appendChild($statsXml);
$packageXml->appendChild($this->concreteClasses);
$packageXml->appendChild($this->abstractClasses);
$packageXml->appendChild($dependsUpon);
$packageXml->appendChild($usedBy);
if (($cycles = $this->analyzer->getCycle($namespace)) !== null) {
$cycleXml = $doc->createElement('Package');
$cycleXml->setAttribute('Name', Utf8Util::ensureEncoding($namespace->getName()));
foreach ($cycles as $cycle) {
$cycleXml->appendChild($doc->createElement('Package'))->appendChild($doc->createTextNode(Utf8Util::ensureEncoding($cycle->getName())));
}
$this->cycles->appendChild($cycleXml);
}
foreach ($namespace->getTypes() as $type) {
$type->accept($this);
}
if ($this->concreteClasses->firstChild === null && $this->abstractClasses->firstChild === null) {
return;
}
$this->packages->appendChild($packageXml);
}