Skip to content

Commit 477070a

Browse files
committed
remove resolveWithDefaults: bare generic alias usage restores old TemplateType behavior
1 parent f37b59d commit 477070a

File tree

2 files changed

+0
-46
lines changed

2 files changed

+0
-46
lines changed

src/PhpDoc/TypeNodeResolver.php

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -516,15 +516,6 @@ private function resolveIdentifierTypeNode(IdentifierTypeNode $typeNode, NameSco
516516
}
517517

518518
if (!$nameScope->shouldBypassTypeAliases()) {
519-
// Handle a generic alias referenced without type arguments.
520-
// resolveWithDefaults() applies declared defaults so params with defaults are
521-
// substituted, while required params remain as TemplateType placeholders
522-
// (which getRawGenericTypeAliasesUsage() later detects and reports).
523-
$genericAlias = $this->findGenericTypeAlias($typeNode->name, $nameScope);
524-
if ($genericAlias !== null) {
525-
return $genericAlias->resolveWithDefaults($this);
526-
}
527-
528519
$typeAlias = $this->getTypeAliasResolver()->resolveTypeAlias($typeNode->name, $nameScope);
529520
if ($typeAlias !== null) {
530521
return $typeAlias;

src/Type/TypeAlias.php

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use PHPStan\PhpDocParser\Ast\PhpDoc\TemplateTagValueNode;
99
use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode;
1010
use PHPStan\PhpDocParser\Ast\Type\TypeNode;
11-
use PHPStan\Type\Generic\TemplateType;
1211
use PHPStan\Type\Generic\TemplateTypeFactory;
1312
use PHPStan\Type\Generic\TemplateTypeHelper;
1413
use PHPStan\Type\Generic\TemplateTypeMap;
@@ -113,42 +112,6 @@ public function resolveWithArgs(TypeNodeResolver $typeNodeResolver, array $args)
113112
);
114113
}
115114

116-
/**
117-
* Resolves the alias body applying default values for template params that declare one.
118-
* Template params without defaults remain as TemplateType placeholders so that callers
119-
* (e.g. MissingTypehintCheck) can detect bare generic alias usage.
120-
*/
121-
public function resolveWithDefaults(TypeNodeResolver $typeNodeResolver): Type
122-
{
123-
$baseType = $this->resolve($typeNodeResolver);
124-
125-
if (count($this->templateTagValueNodes) === 0) {
126-
return $baseType;
127-
}
128-
129-
// Collect default values for params that declare one.
130-
$defaultsMap = [];
131-
foreach ($this->templateTagValueNodes as $tvn) {
132-
if ($tvn->default === null) {
133-
continue;
134-
}
135-
$defaultsMap[$tvn->name] = $typeNodeResolver->resolve($tvn->default, $this->nameScope);
136-
}
137-
138-
if (count($defaultsMap) === 0) {
139-
return $baseType;
140-
}
141-
142-
// Replace only TemplateType instances scoped to THIS alias that have a declared default.
143-
$aliasName = $this->aliasName;
144-
return TypeTraverser::map($baseType, static function (Type $type, callable $traverse) use ($defaultsMap, $aliasName): Type {
145-
if ($type instanceof TemplateType && $type->getScope()->getTypeAliasName() === $aliasName && isset($defaultsMap[$type->getName()])) {
146-
return $defaultsMap[$type->getName()];
147-
}
148-
return $traverse($type);
149-
});
150-
}
151-
152115
/**
153116
* Builds a NameScope augmented with TemplateType placeholders for each declared template param,
154117
* so the alias body can reference them (e.g. `TFilter` resolves to a TemplateType).

0 commit comments

Comments
 (0)