/** * Creates a Descriptor from the provided data. * * @param InterfaceReflector $data * * @return InterfaceDescriptor */ public function create($data) { $interfaceDescriptor = new InterfaceDescriptor(); $interfaceDescriptor->setFullyQualifiedStructuralElementName($data->getName()); $interfaceDescriptor->setName($data->getShortName()); $interfaceDescriptor->setLine($data->getLinenumber()); $interfaceDescriptor->setPackage($this->extractPackageFromDocBlock($data->getDocBlock()) ?: ''); // Reflection library formulates namespace as global but this is not wanted for phpDocumentor itself $interfaceDescriptor->setNamespace('\\' . (strtolower($data->getNamespace()) == 'global' ? '' : $data->getNamespace())); $this->assembleDocBlock($data->getDocBlock(), $interfaceDescriptor); $this->addConstants($data->getConstants(), $interfaceDescriptor); $this->addMethods($data->getMethods(), $interfaceDescriptor); foreach ($data->getParentInterfaces() as $interfaceClassName) { $interfaceDescriptor->getParent()->set($interfaceClassName, $interfaceClassName); } return $interfaceDescriptor; }
/** * @covers phpDocumentor\Compiler\Pass\PackageTreeBuilder::execute * @covers phpDocumentor\Compiler\Pass\PackageTreeBuilder::addElementsOfTypeToPackage */ public function testAddInterfaceToNamespace() { $interface = new InterfaceDescriptor(); $interface->setPackage('My\\Space'); $interface->setFullyQualifiedStructuralElementName('My\\Space\\Interface1'); $this->project->getFiles()->get(0)->getInterfaces()->add($interface); // double check if a second interface in the same deep namespace ends up at the right location $interface2 = new InterfaceDescriptor(); $interface2->setPackage('My\\Space'); $interface2->setFullyQualifiedStructuralElementName('My\\Space\\Interface2'); $this->project->getFiles()->get(0)->getInterfaces()->add($interface2); $this->fixture->execute($this->project); $this->assertSame(array($interface, $interface2), $this->project->getIndexes()->get('packages')->get('\\My\\Space')->getInterfaces()->getAll()); }
/** * @covers phpDocumentor\Compiler\Pass\ElementsIndexBuilder::execute * @covers phpDocumentor\Compiler\Pass\ElementsIndexBuilder::addElementsToIndexes * @covers phpDocumentor\Compiler\Pass\ElementsIndexBuilder::getIndexKey */ public function testAddInterfacesToIndex() { $file1 = $this->project->getFiles()->get(0); $interfaceDescriptor1 = new InterfaceDescriptor(); $interfaceDescriptor1->setFullyQualifiedStructuralElementName('My\\Space\\Interface1'); $file1->getInterfaces()->add($interfaceDescriptor1); $file2 = $this->project->getFiles()->get(1); $interfaceDescriptor2 = new InterfaceDescriptor(); $interfaceDescriptor2->setFullyQualifiedStructuralElementName('My\\Space\\Interface2'); $file2->getInterfaces()->add($interfaceDescriptor2); $this->fixture->execute($this->project); $elements = $this->project->getIndexes()->get('elements')->getAll(); $this->assertCount(2, $elements); $this->assertSame(array('My\\Space\\Interface1', 'My\\Space\\Interface2'), array_keys($elements)); $this->assertSame(array($interfaceDescriptor1, $interfaceDescriptor2), array_values($elements)); $elements = $this->project->getIndexes()->get('interfaces')->getAll(); $this->assertCount(2, $elements); $this->assertSame(array('My\\Space\\Interface1', 'My\\Space\\Interface2'), array_keys($elements)); $this->assertSame(array($interfaceDescriptor1, $interfaceDescriptor2), array_values($elements)); }