public MainViewModelBase(IServiceProvider serviceProvider, ITelemetryProvider telemetryProvider, ICommandProvider commands, IApplicationSettings settings, NuGetViewModel nugetViewModel)
        {
            _serviceProvider   = serviceProvider;
            _telemetryProvider = telemetryProvider;
            _commands          = commands;

            settings.LoadFrom(Path.Combine(GetDefaultDocumentPath(), ConfigFileName));
            Settings = settings;

            _telemetryProvider.Initialize(_currentVersion.ToString(), settings);
            _telemetryProvider.LastErrorChanged += () =>
            {
                OnPropertyChanged(nameof(LastError));
                OnPropertyChanged(nameof(HasError));
            };

            NuGet = nugetViewModel;
            NuGetConfiguration = new NuGetConfiguration(NuGet.GlobalPackageFolder, NuGetPathVariableName);

            NewDocumentCommand          = commands.Create(CreateNewDocument);
            OpenFileCommand             = commands.CreateAsync(OpenFile);
            CloseCurrentDocumentCommand = commands.CreateAsync(CloseCurrentDocument);
            ClearErrorCommand           = commands.Create(() => _telemetryProvider.ClearLastError());
            ReportProblemCommand        = commands.Create(ReportProblem);
            EditUserDocumentPathCommand = commands.Create(EditUserDocumentPath);
            ToggleOptimizationCommand   = commands.Create(() => settings.OptimizeCompilation = !settings.OptimizeCompilation);

            _editorFontSize = Settings.EditorFontSize;

            DocumentRoot = CreateDocumentRoot();

            OpenDocuments = new ObservableCollection <OpenDocumentViewModel>();
            OpenDocuments.CollectionChanged += (sender, args) => OnPropertyChanged(nameof(HasNoOpenDocuments));
        }
        public ICommand GetActionCommand(object action)
        {
            if (action is CodeAction codeAction)
            {
                return((ICommand)_commandProvider.CreateAsync(() => ExecuteCodeAction(codeAction)));
            }
            var codeFix = action as CodeFix;

            if (codeFix == null || codeFix.Action.HasCodeActions())
            {
                return(null);
            }
            return((ICommand)_commandProvider.CreateAsync(() => ExecuteCodeAction(codeFix.Action)));
        }
        public MainViewModel(IServiceLocator serviceLocator, ITelemetryProvider telemetryProvider, ICommandProvider commands, NuGetViewModel nugetViewModel)
        {
            _serviceLocator    = serviceLocator;
            _telemetryProvider = telemetryProvider;
            _telemetryProvider.Initialize(_currentVersion.ToString());
            _telemetryProvider.LastErrorChanged += () => OnPropertyChanged(nameof(LastError));

            NuGet = nugetViewModel;
            NuGetConfiguration = new NuGetConfiguration(NuGet.GlobalPackageFolder, NuGetPathVariableName);
            RoslynHost         = new RoslynHost(NuGetConfiguration, new[]
            {
                // TODO: xplat
                Assembly.Load("RoslynPad.Roslyn.Windows"),
                Assembly.Load("RoslynPad.Editor.Windows")
            });

            NewDocumentCommand          = commands.Create(CreateNewDocument);
            CloseCurrentDocumentCommand = commands.CreateAsync(CloseCurrentDocument);
            ClearErrorCommand           = commands.Create(() => _telemetryProvider.ClearLastError());
            ReportProblemCommand        = commands.Create(ReportProblem);
            EditUserDocumentPathCommand = commands.Create(EditUserDocumentPath);

            _editorFontSize = Properties.Settings.Default.EditorFontSize;

            DocumentRoot = CreateDocumentRoot();

            OpenDocuments = new ObservableCollection <OpenDocumentViewModel>();
            OpenDocuments.CollectionChanged += (sender, args) => OnPropertyChanged(nameof(HasNoOpenDocuments));
        }
        public NuGetDocumentViewModel(NuGetViewModel nuGetViewModel, ICommandProvider commands)
        {
            _nuGetViewModel = nuGetViewModel;

            InstallPackageCommand = commands.CreateAsync <PackageData>(InstallPackage);

            IsEnabled = true;
        }
        public OpenDocumentViewModel(IServiceLocator serviceLocator, MainViewModel mainViewModel, ICommandProvider commands)
        {
            _serviceLocator = serviceLocator;
            MainViewModel   = mainViewModel;
            CommandProvider = commands;
            NuGet           = serviceLocator.GetInstance <NuGetDocumentViewModel>();
            _dispatcher     = Dispatcher.CurrentDispatcher;

            var roslynHost = mainViewModel.RoslynHost;

            Platform       = Platform.X86;
            _executionHost = new ExecutionHost(GetHostExeName(), _workingDirectory,
                                               roslynHost.DefaultReferences.OfType <PortableExecutableReference>().Select(x => x.FilePath),
                                               roslynHost.DefaultImports, mainViewModel.NuGetConfiguration);

            SaveCommand               = commands.CreateAsync(() => Save(promptSave: false));
            RunCommand                = commands.CreateAsync(Run, () => !IsRunning);
            CompileAndSaveCommand     = commands.CreateAsync(CompileAndSave);
            RestartHostCommand        = commands.CreateAsync(RestartHost);
            FormatDocumentCommand     = commands.CreateAsync(FormatDocument);
            CommentSelectionCommand   = commands.CreateAsync(() => CommentUncommentSelection(CommentAction.Comment));
            UncommentSelectionCommand = commands.CreateAsync(() => CommentUncommentSelection(CommentAction.Uncomment));
            RenameSymbolCommand       = commands.CreateAsync(RenameSymbol);
        }