Exemplo n.º 1
0
 /**
  * Exports the given reflection object to the parent XML element.
  *
  * This method creates a new child element on the given parent XML element
  * and takes the properties of the Reflection argument and sets the
  * elements and attributes on the child.
  *
  * If a child DOMElement is provided then the properties and attributes are
  * set on this but the child element is not appended onto the parent. This
  * is the responsibility of the invoker. Essentially this means that the
  * $parent argument is ignored in this case.
  *
  * @param \DOMElement     $parent The parent element to augment.
  * @param ClassDescriptor $class  The data source.
  * @param \DOMElement     $child  Optional: child element to use instead of creating a
  *      new one on the $parent.
  *
  * @return void
  */
 public function buildClass(\DOMElement $parent, ClassDescriptor $class, \DOMElement $child = null)
 {
     if (!$child) {
         $child = new \DOMElement('class');
         $parent->appendChild($child);
     }
     $child->setAttribute('final', $class->isFinal() ? 'true' : 'false');
     $child->setAttribute('abstract', $class->isAbstract() ? 'true' : 'false');
     $parentFqcn = is_string($class->getParent()) ? $class->getParent() : $class->getParent()->getFullyQualifiedStructuralElementName();
     $child->appendChild(new \DOMElement('extends', $parentFqcn));
     /** @var InterfaceDescriptor $interface */
     foreach ($class->getInterfaces() as $interface) {
         $interfaceFcqn = is_string($interface) ? $interface : $interface->getFullyQualifiedStructuralElementName();
         $child->appendChild(new \DOMElement('implements', $interfaceFcqn));
     }
     if ($child === null) {
         $child = new \DOMElement('interface');
         $parent->appendChild($child);
     }
     $namespace = $class->getNamespace()->getFullyQualifiedStructuralElementName();
     $child->setAttribute('namespace', ltrim($namespace, '\\'));
     $child->setAttribute('line', $class->getLine());
     $child->appendChild(new \DOMElement('name', $class->getName()));
     $child->appendChild(new \DOMElement('full_name', $class->getFullyQualifiedStructuralElementName()));
     $this->buildDocBlock($child, $class);
     foreach ($class->getConstants() as $constant) {
         // TODO #840: Workaround; for some reason there are NULLs in the constants array.
         if ($constant) {
             $this->buildConstant($child, $constant);
         }
     }
     foreach ($class->getProperties() as $property) {
         // TODO #840: Workaround; for some reason there are NULLs in the properties array.
         if ($property) {
             $this->buildProperty($child, $property);
         }
     }
     foreach ($class->getMethods() as $method) {
         // TODO #840: Workaround; for some reason there are NULLs in the methods array.
         if ($method) {
             $this->buildMethod($child, $method);
         }
     }
 }