public function render()
{
$namespace = $this->namespace;
$proxyClassName = $this->originalClassName;
$originalClassName = $this->originalClassName . Compiler::ORIGINAL_CLASSNAME_SUFFIX;
$classModifier = '';
if ($this->reflectionService->isClassAbstract($this->fullOriginalClassName)) {
$classModifier = 'abstract ';
} elseif ($this->reflectionService->isClassFinal($this->fullOriginalClassName)) {
$classModifier = 'final ';
}
$constantsCode = $this->renderConstantsCode();
$propertiesCode = $this->renderPropertiesCode();
$traitsCode = $this->renderTraitsCode();
$methodsCode = isset($this->constructor) ? $this->constructor->render() : '';
foreach ($this->methods as $proxyMethod) {
$methodsCode .= $proxyMethod->render();
}
if ($methodsCode . $constantsCode === '') {
return '';
}
$classCode = ($namespace !== '' ? 'namespace ' . $namespace . ";\n\n" : '') . "use Doctrine\\ORM\\Mapping as ORM;\n" . "use Neos\\Flow\\Annotations as Flow;\n" . "\n" . $this->buildClassDocumentation() . $classModifier . 'class ' . $proxyClassName . ' extends ' . $originalClassName . ' implements ' . implode(', ', array_unique($this->interfaces)) . " {\n\n" . $traitsCode . $constantsCode . $propertiesCode . $methodsCode . '}';
return $classCode;
}