Skip to content

Commit 4fc76ad

Browse files
authored
Simplify lowercase-string handling (#4838)
1 parent 7b5a2c9 commit 4fc76ad

2 files changed

Lines changed: 14 additions & 26 deletions

File tree

src/Reflection/ReflectionProvider/MemoizingReflectionProvider.php

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,17 @@ public function __construct(private ReflectionProvider $provider)
2929

3030
public function hasClass(string $className): bool
3131
{
32-
$lowerClassName = strtolower($className);
33-
if (isset($this->hasClasses[$lowerClassName])) {
34-
return $this->hasClasses[$lowerClassName];
35-
}
36-
37-
return $this->hasClasses[$lowerClassName] = $this->provider->hasClass($className);
32+
return $this->hasClasses[strtolower($className)] ??= $this->provider->hasClass($className);
3833
}
3934

4035
public function getClass(string $className): ClassReflection
4136
{
42-
$lowerClassName = strtolower($className);
43-
if (isset($this->classes[$lowerClassName])) {
44-
return $this->classes[$lowerClassName];
45-
}
46-
47-
return $this->classes[$lowerClassName] = $this->provider->getClass($className);
37+
return $this->classes[strtolower($className)] ??= $this->provider->getClass($className);
4838
}
4939

5040
public function getClassName(string $className): string
5141
{
52-
$lowerClassName = strtolower($className);
53-
if (isset($this->classNames[$lowerClassName])) {
54-
return $this->classNames[$lowerClassName];
55-
}
56-
57-
return $this->classNames[$lowerClassName] = $this->provider->getClassName($className);
42+
return $this->classNames[strtolower($className)] ??= $this->provider->getClassName($className);
5843
}
5944

6045
public function getAnonymousClassReflection(Node\Stmt\Class_ $classNode, Scope $scope): ClassReflection

src/Rules/Api/ApiInstanceofTypeRule.php

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)