@@ -166,10 +166,9 @@ public function getUninitializedProperties(
166166 $ initializedInConstructor = array_diff_key ($ uninitializedProperties , $ this ->collectUninitializedProperties ([$ classReflection ->getConstructor ()->getName ()], $ uninitializedProperties ));
167167 }
168168
169- $ methodsCalledFromConstructor = $ this ->getMethodsCalledFromConstructor ($ classReflection , $ initialInitializedProperties , $ initializedProperties , $ constructors , $ initializedInConstructor );
169+ $ methodsCalledFromConstructor = $ this ->getMethodsCalledFromConstructor ($ classReflection , $ initialInitializedProperties , $ initializedProperties , $ constructors , $ initializedInConstructor, $ constructors );
170170 $ prematureAccess = [];
171171 $ additionalAssigns = [];
172-
173172 foreach ($ this ->getPropertyUsages () as $ usage ) {
174173 $ fetch = $ usage ->getFetch ();
175174 if (!$ fetch instanceof PropertyFetch) {
@@ -211,7 +210,10 @@ public function getUninitializedProperties(
211210
212211 if ($ usage instanceof PropertyWrite) {
213212 if (array_key_exists ($ propertyName , $ initializedPropertiesMap )) {
214- $ hasInitialization = $ initializedPropertiesMap [$ propertyName ]->or ($ usageScope ->hasExpressionType (new PropertyInitializationExpr ($ propertyName )));
213+ $ hasInitialization = $ initializedPropertiesMap [$ propertyName ];
214+ if (in_array ($ function ->getName (), $ constructors , true )) {
215+ $ hasInitialization = $ hasInitialization ->or ($ usageScope ->hasExpressionType (new PropertyInitializationExpr ($ propertyName )));
216+ }
215217 if (
216218 !$ hasInitialization ->no ()
217219 && !$ usage ->isPromotedPropertyWrite ()
@@ -318,6 +320,7 @@ private function collectUninitializedProperties(array $constructors, array $unin
318320 * @param array<string, TrinaryLogic> $initialInitializedProperties
319321 * @param array<string, array<string, TrinaryLogic>> $initializedProperties
320322 * @param array<string, ClassPropertyNode> $initializedInConstructorProperties
323+ * @param string[] $originalConstructors
321324 *
322325 * @return array<string, array<string, TrinaryLogic>>
323326 */
@@ -327,6 +330,7 @@ private function getMethodsCalledFromConstructor(
327330 array $ initializedProperties ,
328331 array $ methods ,
329332 array $ initializedInConstructorProperties ,
333+ array $ originalConstructors ,
330334 ): array
331335 {
332336 $ originalMap = $ initializedProperties ;
@@ -363,7 +367,7 @@ private function getMethodsCalledFromConstructor(
363367 continue ;
364368 }
365369
366- if ($ inMethod ->getName () !== '__construct ' ) {
370+ if ($ inMethod ->getName () !== '__construct ' && in_array ( $ inMethod -> getName (), $ originalConstructors , true ) ) {
367371 foreach (array_keys ($ initializedInConstructorProperties ) as $ propertyName ) {
368372 $ initializedProperties [$ inMethod ->getName ()][$ propertyName ] = TrinaryLogic::createYes ();
369373 }
@@ -391,7 +395,7 @@ private function getMethodsCalledFromConstructor(
391395 return $ initializedProperties ;
392396 }
393397
394- return $ this ->getMethodsCalledFromConstructor ($ classReflection , $ initialInitializedProperties , $ initializedProperties , $ methods , $ initializedInConstructorProperties );
398+ return $ this ->getMethodsCalledFromConstructor ($ classReflection , $ initialInitializedProperties , $ initializedProperties , $ methods , $ initializedInConstructorProperties, $ originalConstructors );
395399 }
396400
397401 /**
0 commit comments