@@ -96,10 +96,18 @@ final class ApiInstanceofTypeRule implements Rule
9696 AccessoryType::class => 'methods on PHPStan \\Type \\Type ' ,
9797 ];
9898
99+ /** @var array<lowercase-string, string|null> */
100+ private readonly array $ lowerMap ;
101+
99102 public function __construct (
100103 private ReflectionProvider $ reflectionProvider ,
101104 )
102105 {
106+ $ lowerMap = [];
107+ foreach (self ::MAP as $ className => $ method ) {
108+ $ lowerMap [strtolower ($ className )] = $ method ;
109+ }
110+ $ this ->lowerMap = $ lowerMap ;
103111 }
104112
105113 public function getNodeType (): string
@@ -117,14 +125,9 @@ public function processNode(Node $node, Scope $scope): array
117125 return [];
118126 }
119127
120- $ lowerMap = [];
121- foreach (self ::MAP as $ className => $ method ) {
122- $ lowerMap [strtolower ($ className )] = $ method ;
123- }
124-
125128 $ className = $ scope ->resolveName ($ node ->class );
126129 $ lowerClassName = strtolower ($ className );
127- if (!array_key_exists ($ lowerClassName , $ lowerMap )) {
130+ if (!array_key_exists ($ lowerClassName , $ this -> lowerMap )) {
128131 return [];
129132 }
130133
@@ -138,7 +141,7 @@ public function processNode(Node $node, Scope $scope): array
138141 }
139142
140143 $ tip = 'Learn more: <fg=cyan>https://phpstan.org/blog/why-is-instanceof-type-wrong-and-getting-deprecated</> ' ;
141- if ($ lowerMap [$ lowerClassName ] === null ) {
144+ if ($ this -> lowerMap [$ lowerClassName ] === null ) {
142145 return [
143146 RuleErrorBuilder::message (sprintf (
144147 'Doing instanceof %s is error-prone and deprecated. ' ,
@@ -151,7 +154,7 @@ public function processNode(Node $node, Scope $scope): array
151154 RuleErrorBuilder::message (sprintf (
152155 'Doing instanceof %s is error-prone and deprecated. Use %s instead. ' ,
153156 $ className ,
154- $ lowerMap [$ lowerClassName ],
157+ $ this -> lowerMap [$ lowerClassName ],
155158 ))->identifier ('phpstanApi.instanceofType ' )->tip ($ tip )->build (),
156159 ];
157160 }
0 commit comments