@@ -152,15 +152,15 @@ public function getUninitializedProperties(
152
152
return [$ uninitializedProperties , [], []];
153
153
}
154
154
155
- $ methodsCalledFromConstructor = $ this ->getMethodsCalledFromConstructor ($ classReflection , $ initialInitializedProperties , $ initializedProperties , $ constructors );
156
- $ prematureAccess = [];
157
- $ additionalAssigns = [];
158
-
159
155
$ initializedInConstructor = [];
160
156
if ($ classReflection ->hasConstructor ()) {
161
157
$ initializedInConstructor = array_diff_key ($ uninitializedProperties , $ this ->collectUninitializedProperties ([$ classReflection ->getConstructor ()->getName ()], $ uninitializedProperties ));
162
158
}
163
159
160
+ $ methodsCalledFromConstructor = $ this ->getMethodsCalledFromConstructor ($ classReflection , $ initialInitializedProperties , $ initializedProperties , $ constructors , $ initializedInConstructor );
161
+ $ prematureAccess = [];
162
+ $ additionalAssigns = [];
163
+
164
164
foreach ($ this ->getPropertyUsages () as $ usage ) {
165
165
$ fetch = $ usage ->getFetch ();
166
166
if (!$ fetch instanceof PropertyFetch) {
@@ -311,17 +311,21 @@ private function collectUninitializedProperties(array $constructors, array $unin
311
311
* @param string[] $methods
312
312
* @param array<string, TrinaryLogic> $initialInitializedProperties
313
313
* @param array<string, array<string, TrinaryLogic>> $initializedProperties
314
+ * @param array<string, ClassPropertyNode> $initializedInConstructorProperties
315
+ *
314
316
* @return array<string, array<string, TrinaryLogic>>
315
317
*/
316
318
private function getMethodsCalledFromConstructor (
317
319
ClassReflection $ classReflection ,
318
320
array $ initialInitializedProperties ,
319
321
array $ initializedProperties ,
320
322
array $ methods ,
323
+ array $ initializedInConstructorProperties ,
321
324
): array
322
325
{
323
326
$ originalMap = $ initializedProperties ;
324
327
$ originalMethods = $ methods ;
328
+
325
329
foreach ($ this ->methodCalls as $ methodCall ) {
326
330
$ methodCallNode = $ methodCall ->getNode ();
327
331
if ($ methodCallNode instanceof Array_) {
@@ -353,6 +357,12 @@ private function getMethodsCalledFromConstructor(
353
357
continue ;
354
358
}
355
359
360
+ if ($ inMethod ->getName () !== '__construct ' ) {
361
+ foreach ($ initializedInConstructorProperties as $ propertyName => $ propertyNode ) {
362
+ $ initializedProperties [$ inMethod ->getName ()][$ propertyName ] = TrinaryLogic::createYes ();
363
+ }
364
+ }
365
+
356
366
$ methodName = $ methodCallNode ->name ->toString ();
357
367
if (array_key_exists ($ methodName , $ initializedProperties )) {
358
368
foreach ($ this ->getInitializedProperties ($ callScope , $ initializedProperties [$ inMethod ->getName ()] ?? $ initialInitializedProperties ) as $ propertyName => $ isInitialized ) {
@@ -375,7 +385,7 @@ private function getMethodsCalledFromConstructor(
375
385
return $ initializedProperties ;
376
386
}
377
387
378
- return $ this ->getMethodsCalledFromConstructor ($ classReflection , $ initialInitializedProperties , $ initializedProperties , $ methods );
388
+ return $ this ->getMethodsCalledFromConstructor ($ classReflection , $ initialInitializedProperties , $ initializedProperties , $ methods, $ initializedInConstructorProperties );
379
389
}
380
390
381
391
/**
0 commit comments