/**
  * 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);
 }
Example #4
0
 /**
  * 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();
 }
Example #7
0
 /**
  * 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);
 }