+ public function run($force = FALSE) {
+ $system = CRM_Extension_System::singleton();
+ $cache = $system->getCache();
+
+ $cachedScan = $force ? NULL : $cache->get('mixinScan');
+ $cachedBootData = $force ? NULL : $cache->get('mixinBoot');
+
+ [$funcFiles, $mixInfos] = $cachedScan ?: (new CRM_Extension_MixinScanner($system->getMapper(), $system->getManager(), TRUE))->build();
+ $bootData = $cachedBootData ?: new CRM_Extension_BootCache();
+
+ $this->loadMixins($bootData, $funcFiles, $mixInfos);
+
+ if ($cachedScan === NULL) {
+ $cache->set('mixinScan', [$funcFiles, $mixInfos], 24 * 60 * 60);
+ }
+ if ($cachedBootData === NULL) {
+ $bootData->lock();
+ $cache->set('mixinBoot', $bootData, 24 * 60 * 60);
+ }
+ }
+