/** * Creates a Descriptor from the provided data. * * @param ClassReflector $data * * @return ClassDescriptor */ public function create($data) { $classDescriptor = new ClassDescriptor(); $classDescriptor->setFullyQualifiedStructuralElementName($data->getName()); $classDescriptor->setName($data->getShortName()); $classDescriptor->setPackage($this->extractPackageFromDocBlock($data->getDocBlock()) ?: ''); $classDescriptor->setLine($data->getLinenumber()); $classDescriptor->setParent($data->getParentClass()); $classDescriptor->setAbstract($data->isAbstract()); $classDescriptor->setFinal($data->isFinal()); // Reflection library formulates namespace as global but this is not wanted for phpDocumentor itself $classDescriptor->setNamespace('\\' . (strtolower($data->getNamespace()) == 'global' ? '' : $data->getNamespace())); foreach ($data->getInterfaces() as $interfaceClassName) { $classDescriptor->getInterfaces()->set($interfaceClassName, $interfaceClassName); } $fqcn = $classDescriptor->getFullyQualifiedStructuralElementName(); $namespace = substr($fqcn, 0, strrpos($fqcn, '\\')); $classDescriptor->setNamespace($namespace); $this->assembleDocBlock($data->getDocBlock(), $classDescriptor); $this->addConstants($data->getConstants(), $classDescriptor); $this->addProperties($data->getProperties(), $classDescriptor); $this->addMethods($data->getMethods(), $classDescriptor); $this->addUses($data->getTraits(), $classDescriptor); return $classDescriptor; }
/** * @covers phpDocumentor\Compiler\Pass\NamespaceTreeBuilder::execute * @covers phpDocumentor\Compiler\Pass\NamespaceTreeBuilder::addElementsOfTypeToNamespace */ public function testAddClassToNamespace() { $class = new ClassDescriptor(); $class->setNamespace('My\\Space'); $class->setFullyQualifiedStructuralElementName('My\\Space\\Class1'); $this->project->getFiles()->get(0)->getClasses()->add($class); // double check if a second class in the same deep namespace ends up at the right location $class2 = new ClassDescriptor(); $class2->setNamespace('My\\Space'); $class2->setFullyQualifiedStructuralElementName('My\\Space\\Class2'); $this->project->getFiles()->get(0)->getClasses()->add($class2); $this->fixture->execute($this->project); $this->assertSame(array($class, $class2), $this->project->getNamespace()->getChildren()->get('My')->getChildren()->get('Space')->getClasses()->getAll()); }
/** * Returns a ClassDescriptor whose namespace and name is set. * * @param string $fqnn * @param string $className * * @return ClassDescriptor */ private function givenAClassWithNamespaceAndClassName($fqnn, $className) { $classDescriptor = new ClassDescriptor(); $classDescriptor->setFullyQualifiedStructuralElementName($fqnn . '\\' . $className); $classDescriptor->setNamespace($fqnn); $classDescriptor->setName($className); return $classDescriptor; }
/** * @covers phpDocumentor\Compiler\Pass\ElementsIndexBuilder::execute * @covers phpDocumentor\Compiler\Pass\ElementsIndexBuilder::addElementsToIndexes * @covers phpDocumentor\Compiler\Pass\ElementsIndexBuilder::getIndexKey * @covers phpDocumentor\Compiler\Pass\ElementsIndexBuilder::getSubElements */ public function testAddMethodsToIndex() { $file1 = $this->project->getFiles()->get(0); $classDescriptor1 = new ClassDescriptor(); $classDescriptor1->setFullyQualifiedStructuralElementName('My\\Space\\Class1'); $file1->getClasses()->add($classDescriptor1); $classMethodDescriptor1 = new MethodDescriptor(); $classMethodDescriptor1->setFullyQualifiedStructuralElementName('My\\Space\\Class1::METHOD'); $classDescriptor1->getMethods()->add($classMethodDescriptor1); $file2 = $this->project->getFiles()->get(1); $classDescriptor2 = new ClassDescriptor(); $classDescriptor2->setFullyQualifiedStructuralElementName('My\\Space\\Class2'); $file2->getClasses()->add($classDescriptor2); $classMethodDescriptor2 = new MethodDescriptor(); $classMethodDescriptor2->setFullyQualifiedStructuralElementName('My\\Space\\Class2::METHOD'); $classDescriptor2->getMethods()->add($classMethodDescriptor2); $this->fixture->execute($this->project); $elements = $this->project->getIndexes()->get('elements')->getAll(); $this->assertCount(4, $elements); $this->assertSame(array('My\\Space\\Class1', 'My\\Space\\Class1::METHOD', 'My\\Space\\Class2', 'My\\Space\\Class2::METHOD'), array_keys($elements)); $this->assertSame(array($classDescriptor1, $classMethodDescriptor1, $classDescriptor2, $classMethodDescriptor2), array_values($elements)); // class methods are not indexed separately $this->assertNull($this->project->getIndexes()->get('methods')); }