/** * 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); } } }
/** * @covers phpDocumentor\Descriptor\ClassDescriptor::isFinal * @covers phpDocumentor\Descriptor\ClassDescriptor::setFinal */ public function testSettingAndGettingWhetherClassIsFinal() { $this->assertFalse($this->fixture->isFinal()); $this->fixture->setFinal(true); $this->assertTrue($this->fixture->isFinal()); }