> the rule being asserted */ public $rule; /** * @var int|string the id of the property/variable, or * the parameter offset of the affected arg */ public $var_id; /** * @param string|int $var_id * @param array> $rule */ public function __construct($var_id, $rule) { $this->rule = $rule; $this->var_id = $var_id; } /** * @param array $template_type_map */ public function getUntemplatedCopy(array $template_type_map) : self { return new Assertion( $this->var_id, array_map( /** * @param array $rules */ function (array $rules) use ($template_type_map) : array { $first_rule = $rules[0]; $rule_tokens = \Psalm\Type::tokenize($first_rule); if ($template_type_map) { foreach ($rule_tokens as &$rule_token) { if (isset($template_type_map[$rule_token])) { $rule_token = $template_type_map[$rule_token][0]->getId(); } } } return [implode('', $rule_tokens)]; }, $this->rule ) ); } }