/** * Creates a Descriptor from the provided data. * * @param ConstantReflector $data * * @return ConstantDescriptor */ public function create($data) { $constantDescriptor = new ConstantDescriptor(); $constantDescriptor->setName($data->getShortName()); $constantDescriptor->setValue($data->getValue()); // Reflection library formulates namespace as global but this is not wanted for phpDocumentor itself $constantDescriptor->setNamespace('\\' . (strtolower($data->getNamespace()) == 'global' ? '' : $data->getNamespace())); $constantDescriptor->setFullyQualifiedStructuralElementName((trim($constantDescriptor->getNamespace(), '\\') ? $constantDescriptor->getNamespace() : '') . '\\' . $data->getShortName()); $this->assembleDocBlock($data->getDocBlock(), $constantDescriptor); $constantDescriptor->setLine($data->getLinenumber()); return $constantDescriptor; }
/** * @covers phpDocumentor\Compiler\Pass\PackageTreeBuilder::execute * @covers phpDocumentor\Compiler\Pass\PackageTreeBuilder::addElementsOfTypeToPackage */ public function testAddConstantToNamespace() { $constant = new ConstantDescriptor(); $constant->setPackage('My\\Space'); $constant->setFullyQualifiedStructuralElementName('My\\Space\\Constant1'); $this->project->getFiles()->get(0)->getConstants()->add($constant); // double check if a second constant in the same deep namespace ends up at the right location $constant2 = new ConstantDescriptor(); $constant2->setPackage('My\\Space'); $constant2->setFullyQualifiedStructuralElementName('My\\Space\\Constant2'); $this->project->getFiles()->get(0)->getConstants()->add($constant2); $this->fixture->execute($this->project); $this->assertSame(array($constant, $constant2), $this->project->getIndexes()->get('packages')->get('\\My\\Space')->getConstants()->getAll()); }
/** * @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 testAddClassConstantsToIndex() { $file1 = $this->project->getFiles()->get(0); $classDescriptor1 = new ClassDescriptor(); $classDescriptor1->setFullyQualifiedStructuralElementName('My\\Space\\Class1'); $file1->getClasses()->add($classDescriptor1); $classConstantDescriptor1 = new ConstantDescriptor(); $classConstantDescriptor1->setFullyQualifiedStructuralElementName('My\\Space\\Class1::CONSTANT'); $classDescriptor1->getConstants()->add($classConstantDescriptor1); $file2 = $this->project->getFiles()->get(1); $classDescriptor2 = new ClassDescriptor(); $classDescriptor2->setFullyQualifiedStructuralElementName('My\\Space\\Class2'); $file2->getClasses()->add($classDescriptor2); $classConstantDescriptor2 = new ConstantDescriptor(); $classConstantDescriptor2->setFullyQualifiedStructuralElementName('My\\Space\\Class2::CONSTANT'); $classDescriptor2->getConstants()->add($classConstantDescriptor2); $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::CONSTANT', 'My\\Space\\Class2', 'My\\Space\\Class2::CONSTANT'), array_keys($elements)); $this->assertSame(array($classDescriptor1, $classConstantDescriptor1, $classDescriptor2, $classConstantDescriptor2), array_values($elements)); // class constants are not indexed separately $elements = $this->project->getIndexes()->get('constants')->getAll(); $this->assertCount(0, $elements); }