@@ -121,6 +121,13 @@ private function getPublicMembersUsages(
121121 continue ;
122122 }
123123
124+ // Skip methods declared outside analysed paths (vendor base classes/traits)
125+ $ declaringFile = $ method ->getDeclaringClass ()->getFileName ();
126+
127+ if (!$ this ->isFileAnalysed ($ declaringFile === false ? null : $ declaringFile )) {
128+ continue ;
129+ }
130+
124131 // Mark method as used
125132 $ usages [] = new ClassMethodUsage (
126133 UsageOrigin::createVirtual ($ provider , VirtualUsageData::withNote ($ context )),
@@ -152,6 +159,13 @@ private function getPublicMembersUsages(
152159 continue ;
153160 }
154161
162+ // Skip properties declared outside analysed paths (vendor base classes/traits)
163+ $ declaringFile = $ property ->getDeclaringClass ()->getFileName ();
164+
165+ if (!$ this ->isFileAnalysed ($ declaringFile === false ? null : $ declaringFile )) {
166+ continue ;
167+ }
168+
155169 $ usages [] = new ClassPropertyUsage (
156170 UsageOrigin::createVirtual ($ provider , VirtualUsageData::withNote ($ context )),
157171 new ClassPropertyRef ($ className , $ property ->getName (), possibleDescendant: false ),
@@ -179,19 +193,22 @@ private function getPublicMembersUsages(
179193
180194 private function shouldSkipClass (ClassReflection $ classReflection ): bool
181195 {
182- $ fileName = $ classReflection ->getFileName ();
196+ return !$ this ->isFileAnalysed ($ classReflection ->getFileName ());
197+ }
183198
199+ private function isFileAnalysed (?string $ fileName ): bool
200+ {
184201 if ($ fileName === null ) {
185- return true ;
202+ return false ;
186203 }
187204
188205 foreach ($ this ->analysedPaths as $ path ) {
189206 if (str_starts_with ($ fileName , $ path )) {
190- return false ; // do not traverse non-analyzed classes (e.g. vendor)
207+ return true ;
191208 }
192209 }
193210
194- return true ;
211+ return false ;
195212 }
196213
197214}
0 commit comments