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);

        $finalKeyword = $this->reflectionService->isMethodFinal($this->fullOriginalClassName, $this->methodName) ? 'final ' : '';
        $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);
        $returnTypeIsVoid = $returnType === 'void';
        $returnTypeDeclaration = ($returnType !== null ? ' : ' . $returnType : '');


        $code = '';
        if ($this->addedPreParentCallCode !== '' || $this->addedPostParentCallCode !== '' || $this->methodBody !== '') {
            $code = "\n" .
                $methodDocumentation .
                '    ' . $finalKeyword . $staticKeyword . $visibility . ' function ' . $this->methodName . '(' . $methodParametersCode . ")$returnTypeDeclaration\n    {\n";
            if ($this->methodBody !== '') {
                $code .= "\n" . $this->methodBody . "\n";
            } else {
                $code .= $this->addedPreParentCallCode;
                if ($this->addedPostParentCallCode !== '') {
                    if ($returnTypeIsVoid) {
                        if ($callParentMethodCode !== '') {
                            $code .= '            ' . $callParentMethodCode;
                        }
                    } else {
                        $code .= '            $result = ' . ($callParentMethodCode === '' ? "NULL;\n" : $callParentMethodCode);
                    }
                    $code .= $this->addedPostParentCallCode;
                    if (!$returnTypeIsVoid) {
                        $code .= "        return \$result;\n";
                    }
                } else {
                    if (!$returnTypeIsVoid && $callParentMethodCode !== '') {
                        $code .= '        return ' . $callParentMethodCode . ";\n";
                    }
                }
            }
            $code .= "    }\n";
        }
        return $code;
    }