Example #1
0
        internal IBuiltinsPythonModule CreateBuiltinsModule()
        {
            if (BuiltinsModule == null)
            {
                // Initialize built-in
                var moduleName = BuiltinTypeId.Unknown.GetModuleName(_interpreter.LanguageVersion);

                ModuleCache = new ModuleCache(_interpreter, _services);
                var modulePath = ModuleCache.GetCacheFilePath(_interpreter.Configuration.InterpreterPath);

                var b = new BuiltinsPythonModule(moduleName, modulePath, _services);
                BuiltinsModule             = b;
                Modules[BuiltinModuleName] = new ModuleRef(b);
            }
            return(BuiltinsModule);
        }
        public async Task ReloadAsync(CancellationToken cancellationToken = default)
        {
            foreach (var uri in Modules
                     .Where(m => m.Value.Value?.Name != BuiltinModuleName)
                     .Select(m => m.Value.Value?.Uri)
                     .ExcludeDefault())
            {
                GetRdt()?.UnlockDocument(uri);
            }

            // Preserve builtins, they don't need to be reloaded since interpreter does not change.
            var builtinsIsCreated = Modules.TryGetValue(BuiltinModuleName, out var builtinsRef);

            Modules.Clear();

            await ReloadSearchPaths(cancellationToken);

            PathResolver = new PathResolver(Interpreter.LanguageVersion, Root, InterpreterPaths, UserPaths);

            var addedRoots = new HashSet <string> {
                Root
            };

            addedRoots.UnionWith(InterpreterPaths);
            addedRoots.UnionWith(UserPaths);
            ReloadModulePaths(addedRoots, cancellationToken);

            if (!builtinsIsCreated)
            {
                _builtins   = CreateBuiltinsModule(Services, Interpreter, StubCache);
                builtinsRef = new ModuleRef(_builtins);
                _builtins.Initialize();
            }

            Modules[BuiltinModuleName] = builtinsRef;
            AddBuiltinTypesToPathResolver();
        }