Skip to content

Commit e686505

Browse files
committed
Inherit PHPDocs from internal classes
1 parent cc8222d commit e686505

File tree

11 files changed

+40
-50
lines changed

11 files changed

+40
-50
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"nette/utils": "^3.1.1",
2121
"nikic/php-parser": "^4.4.0",
2222
"ondram/ci-detector": "^3.1",
23-
"ondrejmirtes/better-reflection": "^4.2.12",
23+
"ondrejmirtes/better-reflection": "^4.2.13",
2424
"phpstan/phpdoc-parser": "^0.4.7",
2525
"react/child-process": "^0.6.1",
2626
"react/event-loop": "^1.1",

conf/config.neon

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ parameters:
7878
- '#^Hoa\\#'
7979
- '#^DateTime(?:Interface|Immutable)?$#'
8080
- '#^Soap(?:Client|Var|Server|Fault|Param|Header)$#'
81+
- '#^Serializable$#'
82+
- '#^XMLReader#'
8183
dynamicConstantNames:
8284
- ICONV_IMPL
8385
- LIBXML_VERSION

src/Reflection/BetterReflection/BetterReflectionProvider.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
class BetterReflectionProvider implements ReflectionProvider
3737
{
3838

39+
private ReflectionProvider\ReflectionProviderProvider $reflectionProviderProvider;
40+
3941
private \PHPStan\DependencyInjection\Reflection\ClassReflectionExtensionRegistryProvider $classReflectionExtensionRegistryProvider;
4042

4143
private \Roave\BetterReflection\Reflector\ClassReflector $classReflector;
@@ -72,6 +74,7 @@ class BetterReflectionProvider implements ReflectionProvider
7274
private static array $anonymousClasses = [];
7375

7476
public function __construct(
77+
ReflectionProvider\ReflectionProviderProvider $reflectionProviderProvider,
7578
ClassReflectionExtensionRegistryProvider $classReflectionExtensionRegistryProvider,
7679
ClassReflector $classReflector,
7780
FileTypeMapper $fileTypeMapper,
@@ -87,6 +90,7 @@ public function __construct(
8790
ConstantReflector $constantReflector
8891
)
8992
{
93+
$this->reflectionProviderProvider = $reflectionProviderProvider;
9094
$this->classReflectionExtensionRegistryProvider = $classReflectionExtensionRegistryProvider;
9195
$this->classReflector = $classReflector;
9296
$this->fileTypeMapper = $fileTypeMapper;
@@ -137,7 +141,7 @@ public function getClass(string $className): ClassReflection
137141
}
138142

139143
$classReflection = new ClassReflection(
140-
$this,
144+
$this->reflectionProviderProvider->getReflectionProvider(),
141145
$this->fileTypeMapper,
142146
$this->classReflectionExtensionRegistryProvider->getRegistry()->getPropertiesClassReflectionExtensions(),
143147
$this->classReflectionExtensionRegistryProvider->getRegistry()->getMethodsClassReflectionExtensions(),
@@ -203,7 +207,7 @@ public function getAnonymousClassReflection(\PhpParser\Node\Stmt\Class_ $classNo
203207
);
204208

205209
self::$anonymousClasses[$className] = new ClassReflection(
206-
$this,
210+
$this->reflectionProviderProvider->getReflectionProvider(),
207211
$this->fileTypeMapper,
208212
$this->classReflectionExtensionRegistryProvider->getRegistry()->getPropertiesClassReflectionExtensions(),
209213
$this->classReflectionExtensionRegistryProvider->getRegistry()->getMethodsClassReflectionExtensions(),

src/Reflection/ClassReflection.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,11 @@ public function isSubclassOf(string $className): bool
481481
return $this->subclasses[$className] = false;
482482
}
483483

484-
return $this->subclasses[$className] = $this->reflection->isSubclassOf($className);
484+
try {
485+
return $this->subclasses[$className] = $this->reflection->isSubclassOf($className);
486+
} catch (\ReflectionException $e) {
487+
return $this->subclasses[$className] = false;
488+
}
485489
}
486490

487491
/**

src/Reflection/PhpDefect/PhpDefectClassReflectionExtension.php

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -148,22 +148,6 @@ class PhpDefectClassReflectionExtension implements PropertiesClassReflectionExte
148148
'exceptions_enabled' => 'int',
149149
'info' => 'array',
150150
],
151-
'XMLReader' => [
152-
'attributeCount' => 'int',
153-
'baseURI' => 'string',
154-
'depth' => 'int',
155-
'hasAttributes' => 'bool',
156-
'hasValue' => 'bool',
157-
'isDefault' => 'bool',
158-
'isEmptyElement' => 'bool',
159-
'localName' => 'string',
160-
'name' => 'string',
161-
'namespaceURI' => 'string',
162-
'nodeType' => 'int',
163-
'prefix' => 'string',
164-
'value' => 'string',
165-
'xmlLang' => 'string',
166-
],
167151
'ZipArchive' => [
168152
'status' => 'int',
169153
'statusSys' => 'int',

src/Reflection/Runtime/RuntimeReflectionProvider.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
class RuntimeReflectionProvider implements ReflectionProvider
2727
{
2828

29+
private ReflectionProvider\ReflectionProviderProvider $reflectionProviderProvider;
30+
2931
private ClassReflectionExtensionRegistryProvider $classReflectionExtensionRegistryProvider;
3032

3133
/** @var \PHPStan\Reflection\ClassReflection[] */
@@ -62,6 +64,7 @@ class RuntimeReflectionProvider implements ReflectionProvider
6264
private static array $anonymousClasses = [];
6365

6466
public function __construct(
67+
ReflectionProvider\ReflectionProviderProvider $reflectionProviderProvider,
6568
ClassReflectionExtensionRegistryProvider $classReflectionExtensionRegistryProvider,
6669
FunctionReflectionFactory $functionReflectionFactory,
6770
FileTypeMapper $fileTypeMapper,
@@ -74,6 +77,7 @@ public function __construct(
7477
StubPhpDocProvider $stubPhpDocProvider
7578
)
7679
{
80+
$this->reflectionProviderProvider = $reflectionProviderProvider;
7781
$this->classReflectionExtensionRegistryProvider = $classReflectionExtensionRegistryProvider;
7882
$this->functionReflectionFactory = $functionReflectionFactory;
7983
$this->fileTypeMapper = $fileTypeMapper;
@@ -194,7 +198,7 @@ private function getClassFromReflection(\ReflectionClass $reflectionClass, strin
194198
$className = $reflectionClass->getName();
195199
if (!isset($this->classReflections[$className])) {
196200
$classReflection = new ClassReflection(
197-
$this,
201+
$this->reflectionProviderProvider->getReflectionProvider(),
198202
$this->fileTypeMapper,
199203
$this->classReflectionExtensionRegistryProvider->getRegistry()->getPropertiesClassReflectionExtensions(),
200204
$this->classReflectionExtensionRegistryProvider->getRegistry()->getMethodsClassReflectionExtensions(),

src/Testing/TestCase.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ private function createRuntimeReflectionProvider(ReflectionProvider $actualRefle
206206
);
207207
$reflectionProvider = new ClassBlacklistReflectionProvider(
208208
new RuntimeReflectionProvider(
209+
$setterReflectionProviderProvider,
209210
$classReflectionExtensionRegistryProvider,
210211
$functionReflectionFactory,
211212
$fileTypeMapper,
@@ -223,6 +224,8 @@ private function createRuntimeReflectionProvider(ReflectionProvider $actualRefle
223224
'#^Hoa\\\\#',
224225
'#^DateTime(?:Interface|Immutable)?$#',
225226
'#^Soap(?:Client|Var|Server|Fault|Param|Header)$#',
227+
'#^Serializable$#',
228+
'#^XMLReader#',
226229
]
227230
);
228231
$this->setUpReflectionProvider(
@@ -362,6 +365,7 @@ private function createStaticReflectionProvider(): ReflectionProvider
362365
$classReflectionExtensionRegistryProvider = $this->getClassReflectionExtensionRegistryProvider();
363366

364367
$reflectionProvider = new BetterReflectionProvider(
368+
$setterReflectionProviderProvider,
365369
$classReflectionExtensionRegistryProvider,
366370
$classReflector,
367371
$fileTypeMapper,

stubs/iterable.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ interface SeekableIterator extends Iterator
9494
* @implements SeekableIterator<TKey, TValue>
9595
* @implements ArrayAccess<TKey, TValue>
9696
*/
97-
class ArrayIterator implements SeekableIterator, ArrayAccess, Countable, Serializable
97+
class ArrayIterator implements SeekableIterator, ArrayAccess, Countable
9898
{
9999

100100
/**

tests/PHPStan/Broker/BrokerTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ protected function setUp(): void
4242

4343
$setterReflectionProviderProvider = new SetterReflectionProviderProvider();
4444
$reflectionProvider = new RuntimeReflectionProvider(
45+
$setterReflectionProviderProvider,
4546
$classReflectionExtensionRegistryProvider,
4647
$this->createMock(FunctionReflectionFactory::class),
4748
new FileTypeMapper($setterReflectionProviderProvider, $this->getParser(), $phpDocStringResolver, $phpDocNodeResolver, $this->createMock(Cache::class), $anonymousClassNameHelper),

tests/PHPStan/Reflection/PhpDefect/PhpDefectClassReflectionExtensionTest.php

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use PHPStan\Analyser\Scope;
66
use PHPStan\Broker\Broker;
77
use PHPStan\Type\VerbosityLevel;
8-
use XMLReader;
98
use ZipArchive;
109

1110
class PhpDefectClassReflectionExtensionTest extends \PHPStan\Testing\TestCase
@@ -27,7 +26,6 @@ class PhpDefectClassReflectionExtensionTest extends \PHPStan\Testing\TestCase
2726
* @dataProvider dataDomTextProperties
2827
* @dataProvider dataDomProcessingInstructionProperties
2928
* @dataProvider dataDomXPathProperties
30-
* @dataProvider dataXmlReaderProperties
3129
* @dataProvider dataZipArchiveProperties
3230
* @dataProvider dataLibXMLErrorProperties
3331
* @param string $className
@@ -550,32 +548,6 @@ public function dataDomXPathProperties(): array
550548
];
551549
}
552550

553-
public function dataXmlReaderProperties(): array
554-
{
555-
return [
556-
[
557-
XMLReader::class,
558-
XMLReader::class,
559-
[
560-
'attributeCount' => 'int',
561-
'baseURI' => 'string',
562-
'depth' => 'int',
563-
'hasAttributes' => 'bool',
564-
'hasValue' => 'bool',
565-
'isDefault' => 'bool',
566-
'isEmptyElement' => 'bool',
567-
'localName' => 'string',
568-
'name' => 'string',
569-
'namespaceURI' => 'string',
570-
'nodeType' => 'int',
571-
'prefix' => 'string',
572-
'value' => 'string',
573-
'xmlLang' => 'string',
574-
],
575-
],
576-
];
577-
}
578-
579551
public function dataZipArchiveProperties(): array
580552
{
581553
if (!class_exists('ZipArchive')) {

0 commit comments

Comments
 (0)