public class ItemOperationsCallbackProvider()

in EnvDTE.Host/Callback/Impl/IDEImpl/ItemOperationsCallbackProvider.cs [19:60]


public class ItemOperationsCallbackProvider(
    ISolution solution,
    ISimpleLazy<IEditorManager> editorManager)
    : IEnvDteCallbackProvider
{
    public void RegisterCallbacks(DteProtocolModel model, IScheduler scheduler)
    {
        model.ItemOperations_open_File.SetAsync(async (lifetime, args) =>
        {
            var options = new OpenFileOptions(FileView: ParseFileView(args.ViewKind));
            await lifetime.StartMainReadAsync(async () => await editorManager.Value.OpenFileAsync(
                    VirtualFileSystemPath.Parse(args.FileName, InteractionContext.SolutionContext), options));

            return new IdeWindow();
        });

        model.ItemOperations_isOpen_File.SetAsync(async (lifetime, args) =>
        {
            var file = VirtualFileSystemPath.Parse(args.FileName, InteractionContext.SolutionContext);
            var options = new OpenFileOptions(FileView: ParseFileView(args.ViewKind));
            var location = options.ToTextControlLocation();

            return await lifetime.StartMainRead(() =>
            {
                var textControlId = TextControlModelIdUtil.CreateDefaultTextControlId(file, location, solution);
                var projectFile = DocumentHostProjectFileUtil.GetOrCreateProjectFile(solution, file, textControlId.DocumentId);
                return editorManager.Value.IsOpenedInTextControl(projectFile);
            });
        });
    }

    private static FileView ParseFileView([NotNull] string str) => str switch
    {
        "{00000000-0000-0000-0000-000000000000}" => FileView.Primary,
        "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" => FileView.TextView, // TextView is default
        "{7651A700-06E5-11D1-8EBD-00A0C90F26EA}" => FileView.Debugging,
        "{7651A701-06E5-11D1-8EBD-00A0C90F26EA}" => FileView.Code,
        "{7651A702-06E5-11D1-8EBD-00A0C90F26EA}" => FileView.Designer,
        "{7651A703-06E5-11D1-8EBD-00A0C90F26EA}" => FileView.TextView,
        _ => throw new ArgumentOutOfRangeException(nameof(str))
    };
}