[ 'code' => ' */ public static array $map = []; /** * @template T as Foo * @param class-string $class * @return T */ public function get(string $class) : Foo { if (isset(self::$map[$class])) { return self::$map[$class]; } self::$map[$class] = new $class(); return self::$map[$class]; } }', ], 'basicClassStringMapDifferentTemplateName' => [ 'code' => ' */ public static array $map = []; /** * @template U as Foo * @param class-string $class * @return U */ public function get(string $class) : Foo { if (isset(self::$map[$class])) { return self::$map[$class]; } self::$map[$class] = new $class(); return self::$map[$class]; } }', ], 'noCrashWithSplatMap' => [ 'code' => ' $args */ function takesVariadic(...$args): void { } /** @param class-string-map $arr */ function foo(array $arr) : void { takesVariadic(...$arr); }' ], ]; } public function providerInvalidCodeParse(): iterable { return [ 'assignInvalidClass' => [ 'code' => ' */ public static array $map = []; /** * @template T * @param class-string $class */ public function get(string $class) : void { self::$map[$class] = 5; } }', 'error_message' => 'InvalidPropertyAssignmentValue' ], 'assignInvalidClassDifferentTemplateName' => [ 'code' => ' */ public static array $map = []; /** * @template U * @param class-string $class */ public function get(string $class) : void { self::$map[$class] = 5; } }', 'error_message' => 'InvalidPropertyAssignmentValue' ], ]; } }