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();
        }