public function getSignature($name)
    {
        $interface = new ReflectionClass($this->interface);
        $method = $interface->getMethod($name);

        $abstract = ($method->isAbstract() && ! $interface->isInterface() && ! $this->isAbstractMethodInParents($name)) ? 'abstract ' : '';

        if ($method->isPublic()) {
            $visibility = 'public';
        } elseif ($method->isProtected()) {
            $visibility = 'protected';
        } else {
            $visibility = 'private';
        }

        $static     = $method->isStatic() ? 'static ' : '';
        $reference  = $method->returnsReference() ? '&' : '';
        $params     = $this->getParameterSignatures($method);
        $returnType = $this->getReturnType($method); 

        return "{$abstract}$visibility {$static}function $reference$name($params){$returnType}";
    }