private function generateStructors($definition)
{
$constructor = null;
$destructor = null;
foreach ($definition->types() as $name => $type) {
if (!$constructor) {
$constructor = $type->getConstructor();
if ($constructor && $constructor->isFinal()) {
return '';
}
}
if (!$destructor && $type->hasMethod('__destruct')) {
switch ($name) {
case 'phar':
case 'phardata':
case 'pharfileinfo':
if ($this->canMockPharDestruct) {
$destructor = $type->getMethod('__destruct');
}
break;
default:
$destructor = $type->getMethod('__destruct');
}
}
}
$source = '';
if ($constructor) {
$source .= <<<'EOD'
public function __construct()
{
}
EOD;
}
if ($destructor) {
$source .= <<<'EOD'
public function __destruct()
{
if (!$this->_handle) {
parent::__destruct();
return;
}
$this->_handle->spy('__destruct')->invokeWith(array());
}
EOD;
}
return $source;
}