/** * Generate setters for class * * @param ClassDefinition $classDefinition * @param MethodDefinition $methodDefinition * @return string * @throws ReferenceNotImplementsException */ protected function generateSetters(ClassDefinition $classDefinition, MethodDefinition $methodDefinition) : string { $className = $classDefinition->getClassName(); $methodName = $methodDefinition->getMethodName(); $arguments = $this->generateArguments($methodDefinition); // Call method by reflection if (!$methodDefinition->isPublic()) { $isEmptyArguments = count($methodDefinition->getParametersCollection()) === 0; return "\t\$method = (new \\ReflectionClass('{$className}'))->getMethod('{$methodName}');" . "\n\t\t\t\$method->setAccessible(true);" . "\n\t\t\t\$method->invoke(\$temp" . ($isEmptyArguments ? '' : ", {$arguments}") . ');' . "\n\t\t\t\$method->setAccessible(false);"; } else { return "\t\$temp->{$methodName}({$arguments});"; } }