/** * Initializes the node metric record for the given <b>$namespace</b>. * * @param \PDepend\Source\AST\ASTNamespace $namespace * @return void */ protected function initNamespaceMetric(ASTNamespace $namespace) { $id = $namespace->getId(); if (!isset($this->nodeMetrics[$id])) { $this->nodeSet[$id] = $namespace; $this->nodeMetrics[$id] = array(self::M_NUMBER_OF_CLASSES => 0, self::M_NUMBER_OF_CONCRETE_CLASSES => 0, self::M_NUMBER_OF_ABSTRACT_CLASSES => 0, self::M_AFFERENT_COUPLING => array(), self::M_EFFERENT_COUPLING => array(), self::M_ABSTRACTION => 0, self::M_INSTABILITY => 0, self::M_DISTANCE => 0); } }
/** * @param \PDepend\Source\AST\ASTNamespace $namespace * @return void * @depends PDepend\EngineTest::testSupportForSingleFileIssue90 */ public function testSupportForSingleFileIssue90ExpectedNumberOfInterfaces(ASTNamespace $namespace) { $this->assertSame(1, count($namespace->getInterfaces())); }
/** * Visits a package node. * * @param \PDepend\Source\AST\ASTNamespace $namespace * @return void */ 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', $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($efferent->getName())); $dependsUpon->appendChild($efferentXml); } $usedBy = $doc->createElement('UsedBy'); foreach ($this->analyzer->getAfferents($namespace) as $afferent) { $afferentXml = $doc->createElement('Package'); $afferentXml->appendChild($doc->createTextNode($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', $namespace->getName()); foreach ($cycles as $cycle) { $cycleXml->appendChild($doc->createElement('Package'))->appendChild($doc->createTextNode($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); }
/** * Returns an iterator with all generated {@link \PDepend\Source\AST\ASTNamespace} * objects. * * @return \PDepend\Source\AST\ASTArtifactList * @since 0.9.12 */ private function getPreparedNamespaces() { // Create a package array copy $namespaces = $this->namespaces; // Remove default package if empty if ($this->defaultPackage->getTypes()->count() === 0 && $this->defaultPackage->getFunctions()->count() === 0) { unset($namespaces[self::DEFAULT_NAMESPACE]); } return $namespaces; }
/** * Visits a package node. * * @param \PDepend\Source\AST\ASTNamespace $namespace The package class node. * @return void */ public function visitNamespace(ASTNamespace $namespace) { $this->visits[] = $namespace->getName(); parent::visitNamespace($namespace); }
/** * Sets the parent namespace for this type. * * @param \PDepend\Source\AST\ASTNamespace $namespace * @return void */ public function setNamespace(ASTNamespace $namespace) { $this->namespace = $namespace; $this->namespaceName = $namespace->getName(); }
/** * Visits a namespace node. * * @param \PDepend\Source\AST\ASTNamespace $namespace * @return void */ public function visitNamespace(ASTNamespace $namespace) { $xml = end($this->xmlStack); $doc = $xml->ownerDocument; $packageXml = $doc->createElement('package'); $packageXml->setAttribute('name', Utf8Util::ensureEncoding($namespace->getName())); array_push($this->xmlStack, $packageXml); foreach ($namespace->getTypes() as $type) { $type->accept($this); } foreach ($namespace->getFunctions() as $function) { $function->accept($this); } array_pop($this->xmlStack); if ($packageXml->firstChild === null) { return; } $xml->appendChild($packageXml); }
/** * Tests that the filter not accepts a function with an invalid package. * * @return void */ public function testFilterNotAcceptsFunction() { $namespace = new ASTNamespace(__FUNCTION__); $function = $namespace->addFunction(new ASTFunction('Func')); $filter = new PackageArtifactFilter(array(__FUNCTION__)); $this->assertFalse($filter->accept($function)); }
/** * testVisitClassCountsInterfacesThatAreNotUserDefined * * @return void */ public function testVisitClassCountsInterfacesThatAreNotUserDefined() { $userDefined = $this->createInterfaceFixture(); $userDefined->setUserDefined(); $namespace = new ASTNamespace('PDepend'); $namespace->addType($userDefined); $analyzer = $this->createAnalyzer(); $analyzer->analyze(new ASTArtifactList(array($namespace))); $metrics = $analyzer->getNodeMetrics($namespace); $this->assertEquals(1, $metrics['noi']); }
/** * testIsUserDefinedReturnsTrueWhenAtLeastOneFunctionExists * * @return void */ public function testIsUserDefinedReturnsTrueWhenAtLeastOneFunctionExists() { $namespace = new ASTNamespace('package1'); $namespace->addFunction(new ASTFunction("foo", 0)); $this->assertTrue($namespace->isUserDefined()); }
/** * testVisitorInvokesEndTraitOnListener * * @return void * @since 1.0.0 */ public function testVisitorInvokesEndTraitOnListener() { $trait = $this->createTraitFixture(); $trait->setCompilationUnit(new ASTCompilationUnit(__FILE__)); $namespace = new ASTNamespace('MyPackage'); $namespace->addType($trait); $listener = $this->getMock('\\PDepend\\Source\\ASTVisitor\\ASTVisitListener'); $listener->expects($this->once())->method('endVisitTrait'); $visitor = $this->getMock('\\PDepend\\Source\\ASTVisitor\\AbstractASTVisitor', array('getVisitListeners')); $visitor->addVisitListener($listener); $visitor->visitNamespace($namespace); }