/**
  * Creates a Descriptor from the provided data.
  *
  * @param PropertyReflector $data
  *
  * @return PropertyDescriptor
  */
 public function create($data)
 {
     $propertyDescriptor = new PropertyDescriptor();
     $propertyDescriptor->setFullyQualifiedStructuralElementName($data->getName());
     $propertyDescriptor->setName($data->getShortName());
     $propertyDescriptor->setVisibility($data->getVisibility() ?: 'public');
     $propertyDescriptor->setStatic($data->isStatic());
     $propertyDescriptor->setDefault($data->getDefault());
     $this->assembleDocBlock($data->getDocBlock(), $propertyDescriptor);
     $propertyDescriptor->setLine($data->getLinenumber());
     return $propertyDescriptor;
 }
 /**
  * @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 testAddPropertiesToIndex()
 {
     $file1 = $this->project->getFiles()->get(0);
     $classDescriptor1 = new ClassDescriptor();
     $classDescriptor1->setFullyQualifiedStructuralElementName('My\\Space\\Class1');
     $file1->getClasses()->add($classDescriptor1);
     $classPropertyDescriptor1 = new PropertyDescriptor();
     $classPropertyDescriptor1->setFullyQualifiedStructuralElementName('My\\Space\\Class1::PROPERTY');
     $classDescriptor1->getProperties()->add($classPropertyDescriptor1);
     $file2 = $this->project->getFiles()->get(1);
     $classDescriptor2 = new ClassDescriptor();
     $classDescriptor2->setFullyQualifiedStructuralElementName('My\\Space\\Class2');
     $file2->getClasses()->add($classDescriptor2);
     $classPropertyDescriptor2 = new PropertyDescriptor();
     $classPropertyDescriptor2->setFullyQualifiedStructuralElementName('My\\Space\\Class2::PROPERTY');
     $classDescriptor2->getProperties()->add($classPropertyDescriptor2);
     $this->fixture->execute($this->project);
     $elements = $this->project->getIndexes()->get('elements')->getAll();
     $this->assertCount(4, $elements);
     // note the addition of the dollar sign in front of the property name
     $this->assertSame(array('My\\Space\\Class1', 'My\\Space\\Class1::$PROPERTY', 'My\\Space\\Class2', 'My\\Space\\Class2::$PROPERTY'), array_keys($elements));
     $this->assertSame(array($classDescriptor1, $classPropertyDescriptor1, $classDescriptor2, $classPropertyDescriptor2), array_values($elements));
     // class properties are not indexed separately
     $this->assertNull($this->project->getIndexes()->get('properties'));
 }