| @@ -26,8 +26,14 @@ | ||
| 26 | 26 | */ |
| 27 | 27 | class InstalledVersions |
| 28 | 28 | { |
| 29 | 29 | /** |
| 30 | + * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to | |
| 31 | + * @internal | |
| 32 | + */ | |
| 33 | + private static $selfDir = null; | |
| 34 | + | |
| 35 | + /** | |
| 30 | 36 | * @var mixed[]|null |
| 31 | 37 | * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null |
| 32 | 38 | */ |
| 33 | 39 | private static $installed; |
| @@ -322,8 +328,20 @@ | ||
| 322 | 328 | self::$installedIsLocalDir = false; |
| 323 | 329 | } |
| 324 | 330 | |
| 325 | 331 | /** |
| 332 | + * @return string | |
| 333 | + */ | |
| 334 | + private static function getSelfDir() | |
| 335 | + { | |
| 336 | + if (self::$selfDir === null) { | |
| 337 | + self::$selfDir = strtr(__DIR__, '\\', '/'); | |
| 338 | + } | |
| 339 | + | |
| 340 | + return self::$selfDir; | |
| 341 | + } | |
| 342 | + | |
| 343 | + /** | |
| 326 | 344 | * @return array[] |
| 327 | 345 | * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> |
| 328 | 346 | */ |
| 329 | 347 | private static function getInstalled() |
| @@ -335,9 +353,9 @@ | ||
| 335 | 353 | $installed = array(); |
| 336 | 354 | $copiedLocalDir = false; |
| 337 | 355 | |
| 338 | 356 | if (self::$canGetVendors) { |
| 339 | - $selfDir = strtr(__DIR__, '\\', '/'); | |
| 357 | + $selfDir = self::getSelfDir(); | |
| 340 | 358 | foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { |
| 341 | 359 | $vendorDir = strtr($vendorDir, '\\', '/'); |
| 342 | 360 | if (isset(self::$installedByVendor[$vendorDir])) { |
| 343 | 361 | $installed[] = self::$installedByVendor[$vendorDir]; |