| 302 | } |
| 303 | |
| 304 | void AddonSystem::ParseAllAddonConfigs() |
| 305 | { |
| 306 | AutoArray<AddonDependency> dependencies; |
| 307 | |
| 308 | for (int i = 0; i < s_addonConfigs.Size(); i++) |
| 309 | { |
| 310 | const ParamFile& config = *s_addonConfigs.Get(i); |
| 311 | AddonDependency& dep = dependencies.Append(); |
| 312 | dep.addon = &config; |
| 313 | dep.preloaded = false; |
| 314 | |
| 315 | const ParamEntry* cfg = config.FindEntry("CfgPatches"); |
| 316 | if (cfg) |
| 317 | { |
| 318 | for (int j = 0; j < cfg->GetEntryCount(); j++) |
| 319 | { |
| 320 | const ParamEntry& entry = cfg->GetEntry(j); |
| 321 | if (!entry.IsClass()) |
| 322 | continue; |
| 323 | dep.preloaded = IsPreloadedAddon(entry.GetName()); |
| 324 | const ParamEntry* required = entry.FindEntry("requiredAddons"); |
| 325 | if (!required) |
| 326 | continue; |
| 327 | for (int k = 0; k < required->GetSize(); k++) |
| 328 | { |
| 329 | RStringB requiredName = (*required)[k]; |
| 330 | const ParamFile* file = FindAddonConfig(requiredName); |
| 331 | if (!file) |
| 332 | { |
| 333 | WarningMessage("Addon '%s' requires addon '%s'", (const char*)GetAddonName(config), |
| 334 | (const char*)requiredName); |
| 335 | continue; |
| 336 | } |
| 337 | dep.dependsOn.Add(file); |
| 338 | } |
| 339 | } |
| 340 | } |
| 341 | } |
| 342 | |
| 343 | AutoArray<AddonDependency> resolved; |
| 344 | while (dependencies.Size() > 0) |
| 345 | { |
| 346 | bool someResolved = false; |
| 347 | for (int preloaded = 1; preloaded >= 0; preloaded--) |
| 348 | { |
| 349 | for (int i = 0; i < dependencies.Size(); i++) |
| 350 | { |
| 351 | const AddonDependency& dep = dependencies[i]; |
| 352 | if ((int)dep.preloaded != preloaded) |
| 353 | continue; |
| 354 | if (dep.dependsOn.Size() > 0) |
| 355 | continue; |
| 356 | resolved.Add(dep); |
| 357 | for (int j = 0; j < dependencies.Size(); j++) |
| 358 | dependencies[j].Resolved(dep); |
| 359 | dependencies.Delete(i--); |
| 360 | someResolved = true; |
| 361 | } |
nothing calls this directly
no test coverage detected