@@ -50,10 +50,11 @@ type ArcRsdoctorPluginHooks = Arc<AtomicRefCell<RsdoctorPluginHooks>>;
50
50
static COMPILATION_HOOKS_MAP : LazyLock < FxDashMap < CompilationId , ArcRsdoctorPluginHooks > > =
51
51
LazyLock :: new ( Default :: default) ;
52
52
53
- static MODULE_UKEY_MAP : LazyLock < FxDashMap < Identifier , ModuleUkey > > =
54
- LazyLock :: new ( FxDashMap :: default) ;
55
- static ENTRYPOINT_UKEY_MAP : LazyLock < FxDashMap < ChunkGroupUkey , EntrypointUkey > > =
53
+ static MODULE_UKEY_MAP : LazyLock < FxDashMap < CompilationId , HashMap < Identifier , ModuleUkey > > > =
56
54
LazyLock :: new ( FxDashMap :: default) ;
55
+ static ENTRYPOINT_UKEY_MAP : LazyLock <
56
+ FxDashMap < CompilationId , HashMap < ChunkGroupUkey , EntrypointUkey > > ,
57
+ > = LazyLock :: new ( FxDashMap :: default) ;
57
58
58
59
#[ derive( Debug , Hash , PartialEq , Eq ) ]
59
60
pub enum RsdoctorPluginModuleGraphFeature {
@@ -178,10 +179,11 @@ impl RsdoctorPlugin {
178
179
#[ plugin_hook( CompilerCompilation for RsdoctorPlugin ) ]
179
180
async fn compilation (
180
181
& self ,
181
- _compilation : & mut Compilation ,
182
+ compilation : & mut Compilation ,
182
183
_params : & mut CompilationParams ,
183
184
) -> Result < ( ) > {
184
- MODULE_UKEY_MAP . clear ( ) ;
185
+ MODULE_UKEY_MAP . insert ( compilation. id ( ) , HashMap :: default ( ) ) ;
186
+ ENTRYPOINT_UKEY_MAP . insert ( compilation. id ( ) , HashMap :: default ( ) ) ;
185
187
Ok ( ( ) )
186
188
}
187
189
@@ -221,8 +223,13 @@ async fn optimize_chunks(&self, compilation: &mut Compilation) -> Result<Option<
221
223
chunk_group_by_ukey,
222
224
) ) ;
223
225
224
- for ( entrypoint_ukey, entrypoint) in rsd_entrypoints. iter ( ) {
225
- ENTRYPOINT_UKEY_MAP . insert ( * entrypoint_ukey, entrypoint. ukey ) ;
226
+ {
227
+ let mut entrypoint_ukey_map = ENTRYPOINT_UKEY_MAP
228
+ . get_mut ( & compilation. id ( ) )
229
+ . expect ( "should have entrypoint ukey map" ) ;
230
+ for ( entrypoint_ukey, entrypoint) in rsd_entrypoints. iter ( ) {
231
+ entrypoint_ukey_map. insert ( * entrypoint_ukey, entrypoint. ukey ) ;
232
+ }
226
233
}
227
234
228
235
tokio:: spawn ( async move {
@@ -267,18 +274,26 @@ async fn optimize_chunk_modules(&self, compilation: &mut Compilation) -> Result<
267
274
& compilation. options . context ,
268
275
) ) ;
269
276
270
- for ( module_id, module) in rsd_modules. iter ( ) {
271
- MODULE_UKEY_MAP . insert ( * module_id, module. ukey ) ;
277
+ {
278
+ let mut module_ukey_map = MODULE_UKEY_MAP
279
+ . get_mut ( & compilation. id ( ) )
280
+ . expect ( "should have module ukey map" ) ;
281
+ for ( module_id, module) in rsd_modules. iter ( ) {
282
+ module_ukey_map. insert ( * module_id, module. ukey ) ;
283
+ }
272
284
}
273
285
286
+ let module_ukey_map = MODULE_UKEY_MAP
287
+ . get ( & compilation. id ( ) )
288
+ . expect ( "should have module ukey map" ) ;
274
289
// 2. collect concatenate children
275
290
let ( child_map, parent_map) = collect_concatenated_modules ( & modules) ;
276
291
for ( module_id, children) in child_map {
277
292
if let Some ( rsd_module) = rsd_modules. get_mut ( & module_id) {
278
293
rsd_module. modules . extend (
279
294
children
280
295
. iter ( )
281
- . filter_map ( |i| MODULE_UKEY_MAP . get ( i) . map ( |u| * u ) )
296
+ . filter_map ( |i| module_ukey_map . get ( i) . copied ( ) )
282
297
. collect :: < HashSet < _ > > ( ) ,
283
298
) ;
284
299
}
@@ -290,14 +305,14 @@ async fn optimize_chunk_modules(&self, compilation: &mut Compilation) -> Result<
290
305
rsd_module. belong_modules . extend (
291
306
parents
292
307
. iter ( )
293
- . filter_map ( |i| MODULE_UKEY_MAP . get ( i) . map ( |u| * u ) )
308
+ . filter_map ( |i| module_ukey_map . get ( i) . copied ( ) )
294
309
. collect :: < HashSet < _ > > ( ) ,
295
310
) ;
296
311
}
297
312
}
298
313
299
314
// 4. collect module dependencies
300
- let dependency_infos = collect_module_dependencies ( & modules, & MODULE_UKEY_MAP , & module_graph) ;
315
+ let dependency_infos = collect_module_dependencies ( & modules, & module_ukey_map , & module_graph) ;
301
316
for ( origin_module_id, dependencies) in dependency_infos {
302
317
for ( dep_module_id, ( dep_id, dependency) ) in dependencies {
303
318
if let Some ( rsd_module) = rsd_modules. get_mut ( & dep_module_id) {
@@ -338,7 +353,7 @@ async fn optimize_chunk_modules(&self, compilation: &mut Compilation) -> Result<
338
353
339
354
// 6. collect chunk modules
340
355
let chunk_modules =
341
- collect_chunk_modules ( chunk_by_ukey, & MODULE_UKEY_MAP , chunk_graph, & module_graph) ;
356
+ collect_chunk_modules ( chunk_by_ukey, & module_ukey_map , chunk_graph, & module_graph) ;
342
357
343
358
tokio:: spawn ( async move {
344
359
match hooks
@@ -368,8 +383,13 @@ async fn module_ids(&self, compilation: &mut Compilation) -> Result<()> {
368
383
let hooks = RsdoctorPlugin :: get_compilation_hooks ( compilation. id ( ) ) ;
369
384
let module_graph = compilation. get_module_graph ( ) ;
370
385
let modules = module_graph. modules ( ) ;
371
- let rsd_module_ids =
372
- collect_module_ids ( & modules, & MODULE_UKEY_MAP , & compilation. module_ids_artifact ) ;
386
+ let rsd_module_ids = collect_module_ids (
387
+ & modules,
388
+ & MODULE_UKEY_MAP
389
+ . get ( & compilation. id ( ) )
390
+ . expect ( "should have module ukey map" ) ,
391
+ & compilation. module_ids_artifact ,
392
+ ) ;
373
393
374
394
tokio:: spawn ( async move {
375
395
match hooks
@@ -397,8 +417,14 @@ async fn after_code_generation(&self, compilation: &mut Compilation) -> Result<(
397
417
let hooks = RsdoctorPlugin :: get_compilation_hooks ( compilation. id ( ) ) ;
398
418
let module_graph = compilation. get_module_graph ( ) ;
399
419
let modules = module_graph. modules ( ) ;
400
- let rsd_module_original_sources =
401
- collect_module_original_sources ( & modules, & MODULE_UKEY_MAP , & module_graph, compilation) ;
420
+ let rsd_module_original_sources = collect_module_original_sources (
421
+ & modules,
422
+ & MODULE_UKEY_MAP
423
+ . get ( & compilation. id ( ) )
424
+ . expect ( "should have module ukey map" ) ,
425
+ & module_graph,
426
+ compilation,
427
+ ) ;
402
428
403
429
tokio:: spawn ( async move {
404
430
match hooks
@@ -431,7 +457,9 @@ async fn after_process_assets(&self, compilation: &mut Compilation) -> Result<()
431
457
let rsd_entrypoint_assets = collect_entrypoint_assets (
432
458
& compilation. entrypoints ,
433
459
& rsd_assets,
434
- & ENTRYPOINT_UKEY_MAP ,
460
+ & ENTRYPOINT_UKEY_MAP
461
+ . get ( & compilation. id ( ) )
462
+ . expect ( "should have entrypoint ukey map" ) ,
435
463
chunk_group_by_ukey,
436
464
chunk_by_ukey,
437
465
) ;
0 commit comments