Skip to content

Commit f7bd92f

Browse files
authored
Fix the autoloading of Composer files (#774)
Related to #298
1 parent 2647b91 commit f7bd92f

File tree

3 files changed

+157
-1
lines changed

3 files changed

+157
-1
lines changed

fixtures/set035-composer-files-autoload/test.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
$output = file_get_contents(__DIR__.'/output');
44

5-
$functionAutoloadFailed = 0 === preg_match(
5+
$functionAutoloadFailed = 1 === preg_match(
66
'#PHP Fatal error: Uncaught Error: Call to undefined function GuzzleHttp\\describe_type\(\)#',
77
$output,
88
);

src/Autoload/ScoperAutoloadGenerator.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,21 @@ public function dump(): string
8787
// scoper-autoload.php @generated by PhpScoper
8888
8989
namespace {
90+
// Backup the autoloaded Composer files
91+
if (isset(\$GLOBALS['__composer_autoload_files'])) {
92+
\$existingComposerAutoloadFiles = \$GLOBALS['__composer_autoload_files'];
93+
}
94+
9095
\$loader = require_once __DIR__.'/autoload.php';
96+
// Ensure InstalledVersions is available
9197
require_once __DIR__.'/composer/InstalledVersions.php';
98+
99+
// Restore the backup
100+
if (isset(\$existingComposerAutoloadFiles)) {
101+
\$GLOBALS['__composer_autoload_files'] = \$existingComposerAutoloadFiles;
102+
} else {
103+
unset(\$GLOBALS['__composer_autoload_files']);
104+
}
92105
}
93106
94107
{$statements}
@@ -104,9 +117,22 @@ public function dump(): string
104117
105118
// scoper-autoload.php @generated by PhpScoper
106119
120+
// Backup the autoloaded Composer files
121+
if (isset(\$GLOBALS['__composer_autoload_files'])) {
122+
\$existingComposerAutoloadFiles = \$GLOBALS['__composer_autoload_files'];
123+
}
124+
107125
\$loader = require_once __DIR__.'/autoload.php';
126+
// Ensure InstalledVersions is available
108127
require_once __DIR__.'/composer/InstalledVersions.php';
109128
129+
// Restore the backup
130+
if (isset(\$existingComposerAutoloadFiles)) {
131+
\$GLOBALS['__composer_autoload_files'] = \$existingComposerAutoloadFiles;
132+
} else {
133+
unset(\$GLOBALS['__composer_autoload_files']);
134+
}
135+
110136
{$statements}
111137
112138
return \$loader;

tests/Autoload/ScoperAutoloadGeneratorTest.php

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,22 @@ public static function provideRegistry(): iterable
4444
4545
// scoper-autoload.php @generated by PhpScoper
4646
47+
// Backup the autoloaded Composer files
48+
if (isset($GLOBALS['__composer_autoload_files'])) {
49+
$existingComposerAutoloadFiles = $GLOBALS['__composer_autoload_files'];
50+
}
51+
4752
$loader = require_once __DIR__.'/autoload.php';
53+
// Ensure InstalledVersions is available
4854
require_once __DIR__.'/composer/InstalledVersions.php';
4955
56+
// Restore the backup
57+
if (isset($existingComposerAutoloadFiles)) {
58+
$GLOBALS['__composer_autoload_files'] = $existingComposerAutoloadFiles;
59+
} else {
60+
unset($GLOBALS['__composer_autoload_files']);
61+
}
62+
5063
return $loader;
5164

5265
PHP,
@@ -65,9 +78,22 @@ public static function provideRegistry(): iterable
6578
6679
// scoper-autoload.php @generated by PhpScoper
6780
81+
// Backup the autoloaded Composer files
82+
if (isset($GLOBALS['__composer_autoload_files'])) {
83+
$existingComposerAutoloadFiles = $GLOBALS['__composer_autoload_files'];
84+
}
85+
6886
$loader = require_once __DIR__.'/autoload.php';
87+
// Ensure InstalledVersions is available
6988
require_once __DIR__.'/composer/InstalledVersions.php';
7089
90+
// Restore the backup
91+
if (isset($existingComposerAutoloadFiles)) {
92+
$GLOBALS['__composer_autoload_files'] = $existingComposerAutoloadFiles;
93+
} else {
94+
unset($GLOBALS['__composer_autoload_files']);
95+
}
96+
7197
// Function aliases. For more information see:
7298
// https://github.com/humbug/php-scoper/blob/master/docs/further-reading.md#function-aliases
7399
if (!function_exists('bar')) { function bar() { return \Humbug\bar(...func_get_args()); } }
@@ -91,9 +117,22 @@ public static function provideRegistry(): iterable
91117
92118
// scoper-autoload.php @generated by PhpScoper
93119
120+
// Backup the autoloaded Composer files
121+
if (isset($GLOBALS['__composer_autoload_files'])) {
122+
$existingComposerAutoloadFiles = $GLOBALS['__composer_autoload_files'];
123+
}
124+
94125
$loader = require_once __DIR__.'/autoload.php';
126+
// Ensure InstalledVersions is available
95127
require_once __DIR__.'/composer/InstalledVersions.php';
96128
129+
// Restore the backup
130+
if (isset($existingComposerAutoloadFiles)) {
131+
$GLOBALS['__composer_autoload_files'] = $existingComposerAutoloadFiles;
132+
} else {
133+
unset($GLOBALS['__composer_autoload_files']);
134+
}
135+
97136
// Function aliases. For more information see:
98137
// https://github.com/humbug/php-scoper/blob/master/docs/further-reading.md#function-aliases
99138
if (!function_exists('bar')) { function bar() { return \Humbug\bar(...func_get_args()); } }
@@ -119,8 +158,21 @@ public static function provideRegistry(): iterable
119158
// scoper-autoload.php @generated by PhpScoper
120159
121160
namespace {
161+
// Backup the autoloaded Composer files
162+
if (isset($GLOBALS['__composer_autoload_files'])) {
163+
$existingComposerAutoloadFiles = $GLOBALS['__composer_autoload_files'];
164+
}
165+
122166
$loader = require_once __DIR__.'/autoload.php';
167+
// Ensure InstalledVersions is available
123168
require_once __DIR__.'/composer/InstalledVersions.php';
169+
170+
// Restore the backup
171+
if (isset($existingComposerAutoloadFiles)) {
172+
$GLOBALS['__composer_autoload_files'] = $existingComposerAutoloadFiles;
173+
} else {
174+
unset($GLOBALS['__composer_autoload_files']);
175+
}
124176
}
125177
126178
// Function aliases. For more information see:
@@ -156,8 +208,21 @@ public static function provideRegistry(): iterable
156208
// scoper-autoload.php @generated by PhpScoper
157209
158210
namespace {
211+
// Backup the autoloaded Composer files
212+
if (isset($GLOBALS['__composer_autoload_files'])) {
213+
$existingComposerAutoloadFiles = $GLOBALS['__composer_autoload_files'];
214+
}
215+
159216
$loader = require_once __DIR__.'/autoload.php';
217+
// Ensure InstalledVersions is available
160218
require_once __DIR__.'/composer/InstalledVersions.php';
219+
220+
// Restore the backup
221+
if (isset($existingComposerAutoloadFiles)) {
222+
$GLOBALS['__composer_autoload_files'] = $existingComposerAutoloadFiles;
223+
} else {
224+
unset($GLOBALS['__composer_autoload_files']);
225+
}
161226
}
162227
163228
// Function aliases. For more information see:
@@ -190,9 +255,22 @@ public static function provideRegistry(): iterable
190255
191256
// scoper-autoload.php @generated by PhpScoper
192257
258+
// Backup the autoloaded Composer files
259+
if (isset($GLOBALS['__composer_autoload_files'])) {
260+
$existingComposerAutoloadFiles = $GLOBALS['__composer_autoload_files'];
261+
}
262+
193263
$loader = require_once __DIR__.'/autoload.php';
264+
// Ensure InstalledVersions is available
194265
require_once __DIR__.'/composer/InstalledVersions.php';
195266
267+
// Restore the backup
268+
if (isset($existingComposerAutoloadFiles)) {
269+
$GLOBALS['__composer_autoload_files'] = $existingComposerAutoloadFiles;
270+
} else {
271+
unset($GLOBALS['__composer_autoload_files']);
272+
}
273+
196274
// Class aliases. For more information see:
197275
// https://github.com/humbug/php-scoper/blob/master/docs/further-reading.md#class-aliases
198276
function humbug_phpscoper_expose_class(string $exposed, string $prefixed): void {
@@ -220,9 +298,22 @@ function humbug_phpscoper_expose_class(string $exposed, string $prefixed): void
220298
221299
// scoper-autoload.php @generated by PhpScoper
222300
301+
// Backup the autoloaded Composer files
302+
if (isset($GLOBALS['__composer_autoload_files'])) {
303+
$existingComposerAutoloadFiles = $GLOBALS['__composer_autoload_files'];
304+
}
305+
223306
$loader = require_once __DIR__.'/autoload.php';
307+
// Ensure InstalledVersions is available
224308
require_once __DIR__.'/composer/InstalledVersions.php';
225309
310+
// Restore the backup
311+
if (isset($existingComposerAutoloadFiles)) {
312+
$GLOBALS['__composer_autoload_files'] = $existingComposerAutoloadFiles;
313+
} else {
314+
unset($GLOBALS['__composer_autoload_files']);
315+
}
316+
226317
// Class aliases. For more information see:
227318
// https://github.com/humbug/php-scoper/blob/master/docs/further-reading.md#class-aliases
228319
function humbug_phpscoper_expose_class(string $exposed, string $prefixed): void {
@@ -257,8 +348,21 @@ function humbug_phpscoper_expose_class(string $exposed, string $prefixed): void
257348
// scoper-autoload.php @generated by PhpScoper
258349
259350
namespace {
351+
// Backup the autoloaded Composer files
352+
if (isset($GLOBALS['__composer_autoload_files'])) {
353+
$existingComposerAutoloadFiles = $GLOBALS['__composer_autoload_files'];
354+
}
355+
260356
$loader = require_once __DIR__.'/autoload.php';
357+
// Ensure InstalledVersions is available
261358
require_once __DIR__.'/composer/InstalledVersions.php';
359+
360+
// Restore the backup
361+
if (isset($existingComposerAutoloadFiles)) {
362+
$GLOBALS['__composer_autoload_files'] = $existingComposerAutoloadFiles;
363+
} else {
364+
unset($GLOBALS['__composer_autoload_files']);
365+
}
262366
}
263367
264368
// Class aliases. For more information see:
@@ -308,9 +412,22 @@ function humbug_phpscoper_expose_class(string $exposed, string $prefixed): void
308412
309413
// scoper-autoload.php @generated by PhpScoper
310414
415+
// Backup the autoloaded Composer files
416+
if (isset($GLOBALS['__composer_autoload_files'])) {
417+
$existingComposerAutoloadFiles = $GLOBALS['__composer_autoload_files'];
418+
}
419+
311420
$loader = require_once __DIR__.'/autoload.php';
421+
// Ensure InstalledVersions is available
312422
require_once __DIR__.'/composer/InstalledVersions.php';
313423
424+
// Restore the backup
425+
if (isset($existingComposerAutoloadFiles)) {
426+
$GLOBALS['__composer_autoload_files'] = $existingComposerAutoloadFiles;
427+
} else {
428+
unset($GLOBALS['__composer_autoload_files']);
429+
}
430+
314431
// Function aliases. For more information see:
315432
// https://github.com/humbug/php-scoper/blob/master/docs/further-reading.md#function-aliases
316433
if (!function_exists('__autoload')) { function __autoload($className) { return \Humbug\__autoload(...func_get_args()); } }
@@ -335,8 +452,21 @@ function humbug_phpscoper_expose_class(string $exposed, string $prefixed): void
335452
// scoper-autoload.php @generated by PhpScoper
336453
337454
namespace {
455+
// Backup the autoloaded Composer files
456+
if (isset($GLOBALS['__composer_autoload_files'])) {
457+
$existingComposerAutoloadFiles = $GLOBALS['__composer_autoload_files'];
458+
}
459+
338460
$loader = require_once __DIR__.'/autoload.php';
461+
// Ensure InstalledVersions is available
339462
require_once __DIR__.'/composer/InstalledVersions.php';
463+
464+
// Restore the backup
465+
if (isset($existingComposerAutoloadFiles)) {
466+
$GLOBALS['__composer_autoload_files'] = $existingComposerAutoloadFiles;
467+
} else {
468+
unset($GLOBALS['__composer_autoload_files']);
469+
}
340470
}
341471
342472
// Function aliases. For more information see:

0 commit comments

Comments
 (0)