private function generateHeader($definition, $className)
{
$classNameParts = explode('\\', $className);
if (count($classNameParts) > 1) {
$className = array_pop($classNameParts);
$namespace = 'namespace ' . implode('\\', $classNameParts) . ";\n\n";
} else {
$namespace = '';
}
$source = $namespace . 'class ' . $className;
$parentClassName = $definition->parentClassName();
$interfaceNames = $definition->interfaceNames();
$traitNames = $definition->traitNames();
if (null !== $parentClassName) {
$source .= "\nextends \\" . $parentClassName;
}
array_unshift($interfaceNames, 'Eloquent\\Phony\\Mock\\Mock');
$source .= "\nimplements \\" . implode(",\n \\", $interfaceNames);
$source .= "\n{";
if ($traitNames) {
$traitName = array_shift($traitNames);
$source .= "\n use \\" . $traitName;
foreach ($traitNames as $traitName) {
$source .= ",\n \\" . $traitName;
}
$source .= "\n {";
$methods = $definition->methods();
foreach ($methods->traitMethods() as $method) {
$typeName = $method->method()->getDeclaringClass()->getName();
$methodName = $method->name();
$source .= "\n \\" . $typeName . '::' . $methodName . "\n as private _callTrait_" . str_replace('\\', "¦", $typeName) . "»" . $methodName . ';';
}
$source .= "\n }\n";
}
return $source;
}