trustedCallbacks(); } else { $methods = call_user_func($object_or_classname . '::trustedCallbacks'); } $safe_callback = in_array($method_name, $methods, TRUE); } if (!$safe_callback) { $method = new \ReflectionMethod($object_or_classname, $method_name); $safe_callback = (bool) $method->getAttributes(TrustedCallback::class); } } elseif ($callback instanceof \Closure) { $safe_callback = TRUE; } if (!$safe_callback) { $description = $object_or_classname; if (is_object($description)) { $description = get_class($description); } if (isset($method_name)) { $description .= '::' . $method_name; } $message = sprintf($message, $description); if ($error_type === TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION) { @trigger_error($message, E_USER_DEPRECATED); } else { throw new UntrustedCallbackException($message); } } // @todo Allow named arguments in https://www.drupal.org/node/3174150 return call_user_func_array($callback, array_values($args)); } }