private IDocumentAnalysis TryRestoreCachedAnalysis(IDependencyChainNode <PythonAnalyzerEntry> node, IPythonModule module)
        {
            var moduleType = module.ModuleType;

            if (moduleType.CanBeCached() && _moduleDatabaseService?.ModuleExistsInStorage(module.Name, module.FilePath) == true)
            {
                if (_moduleDatabaseService.TryRestoreGlobalScope(module, out var gs))
                {
                    if (_log != null)
                    {
                        _log.Log(TraceEventType.Verbose, "Restored from database: ", module.Name);
                    }
                    var analysis = new DocumentAnalysis((IDocument)module, 1, gs, new ExpressionEval(_services, module, module.GetAst()), Array.Empty <string>());
                    gs.ReconstructVariables();
                    MarkNodeWalked(node);
                    return(analysis);
                }
                else
                {
                    if (_log != null)
                    {
                        _log.Log(TraceEventType.Verbose, "Restore from database failed for module ", module.Name);
                    }
                }
            }
            return(null);
        }
 public static bool ModuleExistsInStorage(this IModuleDatabaseService dbs, IPythonModule module)
 => dbs.ModuleExistsInStorage(module.Name, module.FilePath, module.ModuleType);