/**
* Renders the PHP code for this Proxy Method
*
* @return string PHP code
*/
public function render()
{
$methodDocumentation = $this->buildMethodDocumentation($this->fullOriginalClassName, $this->methodName);
$methodParametersCode = $this->methodParametersCode !== '' ? $this->methodParametersCode : $this->buildMethodParametersCode($this->fullOriginalClassName, $this->methodName);
$callParentMethodCode = $this->buildCallParentMethodCode($this->fullOriginalClassName, $this->methodName);
$staticKeyword = $this->reflectionService->isMethodStatic($this->fullOriginalClassName, $this->methodName) ? 'static ' : '';
$visibility = $this->visibility === null ? $this->getMethodVisibilityString() : $this->visibility;
$returnType = $this->reflectionService->getMethodDeclaredReturnType($this->fullOriginalClassName, $this->methodName);
$returnTypeDeclaration = $returnType !== null ? ' : ' . $returnType : '';
$code = '';
if ($this->addedPreParentCallCode !== '' || $this->addedPostParentCallCode !== '' || $this->methodBody !== '') {
$code = "\n" . $methodDocumentation . ' ' . $staticKeyword . $visibility . ' function ' . $this->methodName . '(' . $methodParametersCode . "){$returnTypeDeclaration}\n {\n";
if ($this->methodBody !== '') {
$code .= "\n" . $this->methodBody . "\n";
} else {
$code .= $this->addedPreParentCallCode;
if ($this->addedPostParentCallCode !== '') {
$code .= ' $result = ' . ($callParentMethodCode === '' ? "NULL;\n" : $callParentMethodCode);
$code .= $this->addedPostParentCallCode;
$code .= " return \$result;\n";
} else {
$code .= $callParentMethodCode === '' ? '' : ' return ' . $callParentMethodCode . ";\n";
}
}
$code .= " }\n";
}
return $code;
}