393{
394 NSAutoreleasePool *pool =
nil;
395 NSArray *stageKeys =
nil;
396 NSString *stageKey =
nil;
398 NSString *name =
nil;
399 NSMutableDictionary *dependenciesByStage =
nil,
400 *dependentsByStage =
nil;
401 NSSet *dependencies =
nil,
404
405 pool = [[NSAutoreleasePool alloc] init];
406
407
408
409
410
411 dependenciesByStage = [NSMutableDictionary dictionary];
412 dependentsByStage = [NSMutableDictionary dictionary];
413
414 for (;;)
415 {
416
417
418
419
420 stage = [_waitingStages anyObject];
421 if (stage ==
nil)
break;
422 [_waitingStages removeObject:stage];
423
424 key = [NSValue valueWithNonretainedObject:stage];
425
427 if (dependencies !=
nil)
428 {
429 [dependenciesByStage setObject:dependencies
430 forKey:key];
431 }
432
434 if (dependents !=
nil)
435 {
436 [dependentsByStage setObject:dependents
437 forKey:key];
438 }
439 }
440 [_waitingStages release];
441 _waitingStages =
nil;
442 _openForRegistration = NO;
443
444
445 stageKeys = [_stagesByName allKeys];
446
447 foreach (stageKey, stageKeys)
448 {
449 stage = [_stagesByName objectForKey:stageKey];
450 if (stage ==
nil)
continue;
451
452
454 if (![stageKey isEqualToString:name])
455 {
456 OOLog(
@"verifyOXP.buildDependencyGraph.badName",
@"***** Stage name appears to have changed from \"%@\
" to \"%@\" for verifier stage %@, removing.", stageKey, name, stage);
457 [_stagesByName removeObjectForKey:stageKey];
458 continue;
459 }
460
461
462 key = [NSValue valueWithNonretainedObject:stage];
463 dependencies = [dependenciesByStage objectForKey:key];
464
465 if (dependencies !=
nil && ![
self setUpDependencies:dependencies forStage:stage])
466 {
467 [_stagesByName removeObjectForKey:stageKey];
468 }
469 }
470
471
472
473
474
475 stageKeys = [_stagesByName allKeys];
476
477 foreach (stageKey, stageKeys)
478 {
479 stage = [_stagesByName objectForKey:stageKey];
480 if (stage ==
nil)
continue;
481
482
483 key = [NSValue valueWithNonretainedObject:stage];
484 dependents = [dependentsByStage objectForKey:key];
485
486 if (dependents !=
nil)
487 {
488 [self setUpDependents:dependents forStage:stage];
489 }
490 }
491
492 _waitingStages = [[NSMutableSet alloc] initWithArray:[_stagesByName allValues]];
493 [_waitingStages makeObjectsPerformSelector:@selector(dependencyRegistrationComplete)];
494
495 if ([[NSUserDefaults standardUserDefaults] boolForKey:@"oxp-verifier-dump-debug-graphviz"])
496 {
497 [self dumpDebugGraphviz];
498 }
499
500 [pool release];
501}
#define OOLog(class, format,...)