public function buildMethodParametersCode($fullClassName, $methodName, $addTypeAndDefaultValue = true)
    {
        $methodParametersCode = '';
        $methodParameterTypeName = '';
        $nullableSign = '';
        $defaultValue = '';
        $byReferenceSign = '';

        if ($fullClassName === null || $methodName === null) {
            return '';
        }

        $methodParameters = $this->reflectionService->getMethodParameters($fullClassName, $methodName);
        if (count($methodParameters) > 0) {
            $methodParametersCount = 0;
            foreach ($methodParameters as $methodParameterName => $methodParameterInfo) {
                if ($addTypeAndDefaultValue) {
                    if ($methodParameterInfo['array'] === true) {
                        $methodParameterTypeName = 'array';
                    } elseif ($methodParameterInfo['scalarDeclaration']) {
                        $methodParameterTypeName = $methodParameterInfo['type'];
                    } elseif ($methodParameterInfo['class'] !== null) {
                        $methodParameterTypeName = '\\' . $methodParameterInfo['class'];
                    } else {
                        $methodParameterTypeName = '';
                    }
                    if (\PHP_MAJOR_VERSION >= 7 && \PHP_MINOR_VERSION >= 1) {
                        $nullableSign = $methodParameterInfo['allowsNull'] ? '?' : '';
                    }
                    if ($methodParameterInfo['optional'] === true) {
                        $rawDefaultValue = $methodParameterInfo['defaultValue'] ?? null;
                        if ($rawDefaultValue === null) {
                            $defaultValue = ' = NULL';
                        } elseif (is_bool($rawDefaultValue)) {
                            $defaultValue = ($rawDefaultValue ? ' = true' : ' = false');
                        } elseif (is_numeric($rawDefaultValue)) {
                            $defaultValue = ' = ' . $rawDefaultValue;
                        } elseif (is_string($rawDefaultValue)) {
                            $defaultValue = " = '" . $rawDefaultValue . "'";
                        } elseif (is_array($rawDefaultValue)) {
                            $defaultValue = ' = ' . $this->buildArraySetupCode($rawDefaultValue);
                        }
                    }
                    $byReferenceSign = ($methodParameterInfo['byReference'] ? '&' : '');
                }

                $methodParametersCode .= ($methodParametersCount > 0 ? ', ' : '')
                    . ($methodParameterTypeName ? $nullableSign . $methodParameterTypeName . ' ' : '')
                    . $byReferenceSign
                    . '$'
                    . $methodParameterName
                    . $defaultValue
                ;
                $methodParametersCount++;
            }
        }

        return $methodParametersCode;
    }