예제 #1
0
        /// <summary>
        /// Returns a <see cref="DispatcherHandler"/> for the specified <see cref="Dispatcher"/>.
        /// If a <see cref="DispatcherHandler"/> does not exists yet then one is created.
        /// </summary>
        /// <param name="dispatcher"></param>
        /// <returns></returns>
        static DispatcherHandler GetOrCreateDispatcherHander(Dispatcher dispatcher)
        {
            Debug.Assert(dispatcher != null);

            var lastDispatcherHandler = _lastDispatcherHandler;

            if (lastDispatcherHandler != null && dispatcher == lastDispatcherHandler.Dispatcher)
            {
                return(lastDispatcherHandler);
            }
            else
            {
                lock (_dispatcherHandlerList)
                {
                    var dispatcherHandler = _dispatcherHandlerList.Find(x => x.Dispatcher == dispatcher);
                    if (dispatcherHandler == null)
                    {
                        dispatcherHandler = new DispatcherHandler(dispatcher);
                        _dispatcherHandlerList.Add(dispatcherHandler);
                        dispatcher.ShutdownFinished += Dispatcher_ShutdownFinished;
                    }
                    _lastDispatcherHandler = dispatcherHandler;

                    return(dispatcherHandler);
                }
            }
        }
예제 #2
0
        public void RunClangTidy(int aCommandId)
        {
            if (mCommandsController.Running)
            {
                return;
            }

            mCommandsController.Running = true;

            var task = System.Threading.Tasks.Task.Run(() =>
            {
                try
                {
                    DocumentsHandler.SaveActiveDocuments();

                    if (!VsServiceProvider.TryGetService(typeof(DTE), out object dte))
                    {
                        return;
                    }

                    var dte2 = dte as DTE2;
                    AutomationUtil.SaveDirtyProjects(dte2.Solution);

                    CollectSelectedItems(false, ScriptConstants.kAcceptedFileExtensions);

                    using (var silentFileController = new SilentFileChangerController())
                    {
                        using (var fileChangerWatcher = new FileChangerWatcher())
                        {
                            var tidySettings = SettingsProvider.GetSettingsPage(typeof(ClangTidyOptionsView)) as ClangTidyOptionsView;

                            if (CommandIds.kTidyFixId == aCommandId || tidySettings.AutoTidyOnSave)
                            {
                                fileChangerWatcher.OnChanged += FileOpener.Open;

                                string solutionFolderPath = dte2.Solution.FullName
                                                            .Substring(0, dte2.Solution.FullName.LastIndexOf('\\'));

                                fileChangerWatcher.Run(solutionFolderPath);

                                FilePathCollector fileCollector = new FilePathCollector();
                                var filesPath = fileCollector.Collect(mItemsCollector.GetItems).ToList();

                                silentFileController.SilentFiles(filesPath);
                                silentFileController.SilentFiles(dte2.Documents);
                            }
                            RunScript(aCommandId);
                        }
                    }
                }
                catch (Exception exception)
                {
                    VsShellUtilities.ShowMessageBox(AsyncPackage, exception.Message, "Error",
                                                    OLEMSGICON.OLEMSGICON_CRITICAL, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
                }
            }).ContinueWith(tsk => DispatcherHandler.Invoke(() => mCommandsController.OnAfterClangCommand(), DispatcherPriority.Background));
        }
예제 #3
0
 static void Dispatcher_ShutdownFinished(object sender, EventArgs e)
 {
     lock (_dispatcherHandlerList)
     {
         _dispatcherHandlerList.RemoveAll(x => x.Dispatcher == sender);
         if (_lastDispatcherHandler != null && _lastDispatcherHandler.Dispatcher == sender)
         {
             _lastDispatcherHandler = null;
         }
     }
 }
예제 #4
0
 internal Dispatcher(Context context, Handler mainThreadHandler, IExecutorService service, ICache <Bitmap> cache, IDownloader <Bitmap> downloader)
 {
     m_DipatcherThread = new DispatcherThread();
     m_DipatcherThread.Start();
     m_Handler           = new DispatcherHandler(m_DipatcherThread.Looper, this);
     m_Context           = context;
     m_MainThreadHandler = mainThreadHandler;
     m_Cache             = cache;
     m_Downloader        = downloader;
     m_Service           = service;
     m_AirplaneMode      = AndroidUtils.IsAirplaneModeOn(m_Context);
     m_Receiver          = new NetworkBroadcastReceiver(this);
     m_Receiver.Register();
 }
 public DispatcherStreamHandler(string method, string path, DispatcherHandler handler)
     : base(method, path, null, null)
 {
     m_handler = handler;
 }
 public DispatcherStreamHandler(string method, string path, DispatcherHandler handler) : base(method, path, null, null)
 {
     m_handler = handler;
 }