/** * Returns an iterator with all generated {@link PHP_Depend_Code_Package} * objects. * * @return PHP_Depend_Code_NodeIterator */ public function getPackages() { // Create a package array copy $packages = $this->_packages; // Remove default package if empty if ($this->defaultPackage->getTypes()->count() === 0 && $this->defaultPackage->getFunctions()->count() === 0) { unset($packages[self::DEFAULT_PACKAGE]); } return new PHP_Depend_Code_NodeIterator($packages); }
/** * Sets the parent package for this function. * * @param PHP_Depend_Code_Package $package The parent package. * * @return void */ public function setPackage(PHP_Depend_Code_Package $package) { $this->packageName = $package->getName(); $this->package = $package; }
/** * Visits a package node. * * @param PHP_Depend_Code_Class $package The package class node. * * @return void * @see PHP_Depend_VisitorI::visitPackage() */ public function visitPackage(PHP_Depend_Code_Package $package) { $this->visits[] = $package->getName(); parent::visitPackage($package); }
/** * testIsUserDefinedReturnsTrueWhenAtLeastOneFunctionExists * * @return void * @covers PHP_Depend_Code_Package * @group pdepend * @group pdepend::code * @group unittest */ public function testIsUserDefinedReturnsTrueWhenAtLeastOneFunctionExists() { $package = new PHP_Depend_Code_Package('package1'); $package->addFunction(new PHP_Depend_Code_Function("foo", 0)); $this->assertTrue($package->isUserDefined()); }
/** * Visits a package node. * * @param PHP_Depend_Code_Class $package The package class node. * * @return void * @see PHP_Depend_VisitorI::visitPackage() */ public function visitPackage(PHP_Depend_Code_Package $package) { if (!$package->isUserDefined()) { return; } $stats = $this->analyzer->getStats($package); 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', $package->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($package) as $efferent) { $efferentXml = $doc->createElement('Package'); $efferentXml->appendChild($doc->createTextNode($efferent->getName())); $dependsUpon->appendChild($efferentXml); } $usedBy = $doc->createElement('UsedBy'); foreach ($this->analyzer->getAfferents($package) 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($package)) !== null) { $cycleXml = $doc->createElement('Package'); $cycleXml->setAttribute('Name', $package->getName()); foreach ($cycles as $cycle) { $cycleXml->appendChild($doc->createElement('Package'))->appendChild($doc->createTextNode($cycle->getName())); } $this->cycles->appendChild($cycleXml); } foreach ($package->getTypes() as $type) { $type->accept($this); } if ($this->concreteClasses->firstChild === null && $this->abstractClasses->firstChild === null) { return; } $this->packages->appendChild($packageXml); }
/** * testVisitorInvokesEndTraitOnListener * * @return void * @since 1.0.0 */ public function testVisitorInvokesEndTraitOnListener() { $trait = $this->createTraitFixture(); $trait->setSourceFile(new PHP_Depend_Code_File(__FILE__)); $package = new PHP_Depend_Code_Package('MyPackage'); $package->addType($trait); $listener = $this->getMock('PHP_Depend_Visitor_ListenerI'); $listener->expects($this->once())->method('endVisitTrait'); $visitor = $this->getMock('PHP_Depend_Visitor_AbstractVisitor', array('getVisitListeners')); $visitor->addVisitListener($listener); $visitor->visitPackage($package); }
/** * Visits a package node. * * @param PHP_Depend_Code_Class $package The package class node. * * @return void * @see PHP_Depend_VisitorI::visitPackage() */ public function visitPackage(PHP_Depend_Code_Package $package) { $xml = end($this->_xmlStack); $doc = $xml->ownerDocument; $packageXml = $doc->createElement('package'); $packageXml->setAttribute('name', $package->getName()); $this->writeNodeMetrics($packageXml, $package); array_push($this->_xmlStack, $packageXml); foreach ($package->getTypes() as $type) { $type->accept($this); } foreach ($package->getFunctions() as $function) { $function->accept($this); } array_pop($this->_xmlStack); if ($packageXml->firstChild === null) { return; } $xml->appendChild($packageXml); }
/** * Returns an iterator with all generated {@link PHP_Depend_Code_Package} * objects. * * @return PHP_Depend_Code_NodeIterator * @since 0.9.12 */ private function _getPreparedPackages() { // Create a package array copy $packages = $this->_packages; // Remove default package if empty if ($this->defaultPackage->getTypes()->count() === 0 && $this->defaultPackage->getFunctions()->count() === 0) { unset($packages[self::DEFAULT_PACKAGE]); } return $packages; }
/** * Calculates metrics for the given <b>$package</b> instance. * * @param PHP_Depend_Code_Package $package The context package instance. * * @return void * @see PHP_Depend_VisitorI::visitPackage() */ public function visitPackage(PHP_Depend_Code_Package $package) { if (!$package->isUserDefined()) { //return; } $this->fireStartPackage($package); foreach ($package->getTypes() as $type) { $type->accept($this); } foreach ($package->getFunctions() as $function) { $function->accept($this); } $this->fireEndPackage($package); }
/** * Initializes the node metric record for the given <b>$package</b>. * * @param PHP_Depend_Code_Package $package The context package. * * @return void */ protected function initPackageMetric(PHP_Depend_Code_Package $package) { $uuid = $package->getUuid(); if (!isset($this->nodeMetrics[$uuid])) { // Store a package reference $this->nodeSet[$uuid] = $package; // Create empty metrics for this package $this->nodeMetrics[$uuid] = 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); } }
/** * testVisitClassCountsInterfacesThatAreNotUserDefined * * @return void * @covers PHP_Depend_Metrics_NodeCount_Analyzer * @group pdepend * @group pdepend::metrics * @group pdepend::metrics::nodecount * @group unittest */ public function testVisitClassCountsInterfacesThatAreNotUserDefined() { $userDefined = new PHP_Depend_Code_Interface('Manuel'); $userDefined->setUserDefined(); $package = new PHP_Depend_Code_Package('PHP_Depend'); $package->addType($userDefined); $analyzer = new PHP_Depend_Metrics_NodeCount_Analyzer(); $analyzer->analyze(new PHP_Depend_Code_NodeIterator(array($package))); $metrics = $analyzer->getNodeMetrics($package); $this->assertEquals(1, $metrics['noi']); }
/** * Sets the parent package for this function. * * @param PHP_Depend_Code_Package $package The parent package. * * @return void */ public function setPackage(PHP_Depend_Code_Package $package = null) { if ($package === null) { $this->packageName = null; $this->_package = null; } else { $this->packageName = $package->getName(); $this->_package = $package; } }
/** * Tests that the filter not accepts a function with an invalid package. * * @return void * @covers PHP_Depend_Code_Filter_Package * @group pdepend * @group pdepend::code * @group pdepend::code::filter * @group unittest */ public function testFilterNotAcceptsFunction() { $package = new PHP_Depend_Code_Package(__FUNCTION__); $function = $package->addFunction(new PHP_Depend_Code_Function('Func')); $filter = new PHP_Depend_Code_Filter_Package(array(__FUNCTION__)); $this->assertFalse($filter->accept($function)); }
/** * Tests that the analyzer calculates the correct number of functions values. * * @return void */ public function testAnalyzerCalculatesCorrectNumberOfFunctions() { $packageA = new PHP_Depend_Code_Package('A'); $packageA->addFunction(new PHP_Depend_Code_Function('a1')); $packageA->addFunction(new PHP_Depend_Code_Function('a2')); $packageA->addFunction(new PHP_Depend_Code_Function('a3')); $packageB = new PHP_Depend_Code_Package('B'); $packageB->addFunction(new PHP_Depend_Code_Function('b1')); $packageB->addFunction(new PHP_Depend_Code_Function('b2')); $packageC = new PHP_Depend_Code_Package('C'); $packageC->addFunction(new PHP_Depend_Code_Function('c1')); $packages = array($packageA, $packageB, $packageC); $analyzer = new PHP_Depend_Metrics_NodeCount_Analyzer(); $analyzer->analyze(new PHP_Depend_Code_NodeIterator($packages)); $project = $analyzer->getProjectMetrics(); $this->assertArrayHasKey('nof', $project); $this->assertEquals(6, $project['nof']); $metrics = $analyzer->getNodeMetrics($packageA); $this->assertArrayHasKey('nof', $metrics); $this->assertEquals(3, $metrics['nof']); $metrics = $analyzer->getNodeMetrics($packageB); $this->assertArrayHasKey('nof', $metrics); $this->assertEquals(2, $metrics['nof']); $metrics = $analyzer->getNodeMetrics($packageC); $this->assertArrayHasKey('nof', $metrics); $this->assertEquals(1, $metrics['nof']); }