public NavigationBarClient(
            IVsDropdownBarManager manager,
            IVsCodeWindow codeWindow,
            IServiceProvider serviceProvider)
        {
            _manager          = manager;
            _codeWindow       = codeWindow;
            _currentTypeItems = SpecializedCollections.EmptyList <NavigationBarItem>();

            var vsShell = serviceProvider.GetService(typeof(SVsShell)) as IVsShell;

            if (vsShell != null)
            {
                int hresult = vsShell.GetProperty((int)__VSSPROPID.VSSPROPID_ObjectMgrTypesImgList, out var varImageList);
                if (ErrorHandler.Succeeded(hresult) && varImageList != null)
                {
                    _imageList = (IntPtr)(int)varImageList;
                }
            }

            _codeWindowEventsSink         = ComEventSink.Advise <IVsCodeWindowEvents>(codeWindow, this);
            _editorAdaptersFactoryService = serviceProvider.GetMefService <IVsEditorAdaptersFactoryService>();
            codeWindow.GetPrimaryView(out var pTextView);
            StartTrackingView(pTextView);

            pTextView = null;
            codeWindow.GetSecondaryView(out pTextView);
            StartTrackingView(pTextView);
        }
Exemplo n.º 2
0
        public NavigationBarClient(
            IVsDropdownBarManager manager,
            IVsCodeWindow codeWindow,
            IServiceProvider serviceProvider,
            VisualStudioWorkspaceImpl workspace)
        {
            _manager          = manager;
            _codeWindow       = codeWindow;
            _workspace        = workspace;
            _imageService     = (IVsImageService2)serviceProvider.GetService(typeof(SVsImageService));
            _projectItems     = SpecializedCollections.EmptyList <NavigationBarProjectItem>();
            _currentTypeItems = SpecializedCollections.EmptyList <NavigationBarItem>();

            var vsShell = serviceProvider.GetService(typeof(SVsShell)) as IVsShell;

            vsShell?.TryGetPropertyValue(__VSSPROPID.VSSPROPID_ObjectMgrTypesImgList, out _imageList);

            _codeWindowEventsSink         = ComEventSink.Advise <IVsCodeWindowEvents>(codeWindow, this);
            _editorAdaptersFactoryService = serviceProvider.GetMefService <IVsEditorAdaptersFactoryService>();
            codeWindow.GetPrimaryView(out var pTextView);
            StartTrackingView(pTextView);

            pTextView = null;
            codeWindow.GetSecondaryView(out pTextView);
            StartTrackingView(pTextView);
        }
Exemplo n.º 3
0
        public LanguageSettingsPersister(
            [Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider,
            IGlobalOptionService optionService)
            : base(assertIsForeground: true)
        {
            _textManager   = (IVsTextManager4)serviceProvider.GetService(typeof(SVsTextManager));
            _optionService = optionService;

            // TODO: make this configurable
            _languageMap = BidirectionalMap <string, Tuple <Guid> > .Empty.Add(LanguageNames.CSharp, Tuple.Create(Guids.CSharpLanguageServiceId))
                           .Add(LanguageNames.VisualBasic, Tuple.Create(Guids.VisualBasicLanguageServiceId))
                           .Add("TypeScript", Tuple.Create(new Guid("4a0dddb5-7a95-4fbf-97cc-616d07737a77")))
                           .Add("F#", Tuple.Create(new Guid("BC6DD5A5-D4D6-4dab-A00D-A51242DBAF1B")))
                           .Add("Xaml", Tuple.Create(new Guid("CD53C9A1-6BC2-412B-BE36-CC715ED8DD41")));

            foreach (var languageGuid in _languageMap.Values)
            {
                var languagePreferences = new LANGPREFERENCES3[1];
                languagePreferences[0].guidLang = languageGuid.Item1;

                // The function can potentially fail if that language service isn't installed
                if (ErrorHandler.Succeeded(_textManager.GetUserPreferences4(pViewPrefs: null, pLangPrefs: languagePreferences, pColorPrefs: null)))
                {
                    RefreshLanguageSettings(languagePreferences);
                }
            }

            _textManagerEvents2Sink = ComEventSink.Advise <IVsTextManagerEvents4>(_textManager, this);
        }
        public LanguageSettingsPersister(
            [Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider,
            IGlobalOptionService optionService)
            : base(assertIsForeground: true)
        {
            _textManager   = (IVsTextManager4)serviceProvider.GetService(typeof(SVsTextManager));
            _optionService = optionService;

            // TODO: make this configurable
            _languageMap = BidirectionalMap <string, Tuple <Guid> > .Empty.Add(LanguageNames.Hlsl, Tuple.Create(Guids.HlslLanguageServiceId))
                           .Add(LanguageNames.ShaderLab, Tuple.Create(Guids.ShaderLabLanguageServiceId));

            foreach (var languageGuid in _languageMap.Values)
            {
                var languagePreferences = new LANGPREFERENCES3[1];
                languagePreferences[0].guidLang = languageGuid.Item1;

                // The function can potentially fail if that language service isn't installed
                if (ErrorHandler.Succeeded(_textManager.GetUserPreferences4(pViewPrefs: null, pLangPrefs: languagePreferences, pColorPrefs: null)))
                {
                    RefreshLanguageSettings(languagePreferences);
                }
            }

            _textManagerEvents2Sink = ComEventSink.Advise <IVsTextManagerEvents4>(_textManager, this);
        }
Exemplo n.º 5
0
            public VsCodeWindowManager(TLanguageService languageService, IVsCodeWindow codeWindow)
            {
                _languageService = languageService;
                _codeWindow      = codeWindow;

                _globalOptions = languageService.Package.ComponentModel.GetService <IGlobalOptionService>();

                _sink = ComEventSink.Advise <IVsCodeWindowEvents>(codeWindow, this);
                _globalOptions.OptionChanged += GlobalOptionChanged;
            }
            public VsCodeWindowManager(TLanguageService languageService, IVsCodeWindow codeWindow)
            {
                _languageService = languageService;
                _codeWindow      = codeWindow;

                var workspace = languageService.Package.ComponentModel.GetService <VisualStudioWorkspace>();

                _optionService = workspace.Services.GetService <IOptionService>();

                _sink = ComEventSink.Advise <IVsCodeWindowEvents>(codeWindow, this);
                _optionService.OptionChanged += OnOptionChanged;
            }
Exemplo n.º 7
0
            public VsCodeWindowManager(TLanguageService languageService, IVsCodeWindow codeWindow)
            {
                _languageService = languageService;
                _codeWindow      = codeWindow;

                _threadingContext = languageService.Package.ComponentModel.GetService <IThreadingContext>();

                var listenerProvider = languageService.Package.ComponentModel.GetService <IAsynchronousOperationListenerProvider>();

                _asynchronousOperationListener = listenerProvider.GetListener(FeatureAttribute.NavigationBar);

                _sink = ComEventSink.Advise <IVsCodeWindowEvents>(codeWindow, this);
            }
Exemplo n.º 8
0
        private async Task InitializeAndPopulateSnippetsCacheAsync(Shell.IAsyncServiceProvider asyncServiceProvider)
        {
            await _threadingContext.JoinableTaskFactory.SwitchToMainThreadAsync();

            var textManager = (IVsTextManager2?)await asyncServiceProvider.GetServiceAsync(typeof(SVsTextManager)).ConfigureAwait(true);

            Assumes.Present(textManager);

            if (textManager.GetExpansionManager(out _expansionManager) == VSConstants.S_OK)
            {
                ComEventSink.Advise <IVsExpansionEvents>(_expansionManager, this);
                await PopulateSnippetCacheAsync().ConfigureAwait(false);
            }
        }
        // We make sure this code is from the UI by asking for the optionservice in the initialize() in AbstractPackage`2
        public AbstractLanguageSettingsSerializer(Guid languageServiceguid, string languageName, IServiceProvider serviceProvider)
            : base(assertIsForeground: true)
        {
            _serviceProvider = serviceProvider;
            _languageName    = languageName;

            _textManager = (IVsTextManager4)serviceProvider.GetService(typeof(SVsTextManager));

            var langPrefs = new LANGPREFERENCES3[1];

            langPrefs[0].guidLang = languageServiceguid;
            Marshal.ThrowExceptionForHR(_textManager.GetUserPreferences4(pViewPrefs: null, pLangPrefs: langPrefs, pColorPrefs: null));
            _languageSetting        = langPrefs[0];
            _textManagerEvents2Sink = ComEventSink.Advise <IVsTextManagerEvents4>(_textManager, this);
        }
Exemplo n.º 10
0
        private object InPlaceAdd(object handler)
        {
            ContractUtils.RequiresNotNull(handler, "handler");
            VerifyHandler(handler);

            //
            // Demand Full Trust to proceed with the operation.
            //

            new PermissionSet(PermissionState.Unrestricted).Demand();

            ComEventSink comEventSink = ComEventSink.FromRuntimeCallableWrapper(_rcw, _sourceIid, true);

            comEventSink.AddHandler(_dispid, handler);
            return(this);
        }
Exemplo n.º 11
0
        public AbstractSnippetInfoService(
            Shell.SVsServiceProvider serviceProvider,
            Guid languageGuidForSnippets,
            IEnumerable <Lazy <IAsynchronousOperationListener, FeatureMetadata> > asyncListeners)
        {
            AssertIsForeground();

            if (serviceProvider != null)
            {
                var textManager = (IVsTextManager2)serviceProvider.GetService(typeof(SVsTextManager));
                if (textManager.GetExpansionManager(out _expansionManager) == VSConstants.S_OK)
                {
                    ComEventSink.Advise <IVsExpansionEvents>(_expansionManager, this);
                    _waiter = new AggregateAsynchronousOperationListener(asyncListeners, FeatureAttribute.Snippets);
                    _languageGuidForSnippets = languageGuidForSnippets;
                    PopulateSnippetCaches();
                }
            }
        }
Exemplo n.º 12
0
        public AbstractSnippetInfoService(
            IThreadingContext threadingContext,
            Shell.SVsServiceProvider serviceProvider,
            Guid languageGuidForSnippets,
            IAsynchronousOperationListenerProvider listenerProvider)
            : base(threadingContext)
        {
            AssertIsForeground();

            if (serviceProvider != null)
            {
                var textManager = (IVsTextManager2)serviceProvider.GetService(typeof(SVsTextManager));
                if (textManager.GetExpansionManager(out _expansionManager) == VSConstants.S_OK)
                {
                    ComEventSink.Advise <IVsExpansionEvents>(_expansionManager, this);
                    _waiter = listenerProvider.GetListener(FeatureAttribute.Snippets);
                    _languageGuidForSnippets = languageGuidForSnippets;
                    PopulateSnippetCaches();
                }
            }
        }
Exemplo n.º 13
0
        public LanguageSettingsPersister(
            IThreadingContext threadingContext,
            IVsTextManager4 textManager,
            IGlobalOptionService globalOptions)
            : base(threadingContext, assertIsForeground: true)
        {
            _textManager   = textManager;
            _globalOptions = globalOptions;

            var languageMap = BidirectionalMap <string, Tuple <Guid> > .Empty;

            InitializeSettingsForLanguage(LanguageNames.CSharp, Guids.CSharpLanguageServiceId);
            InitializeSettingsForLanguage(LanguageNames.VisualBasic, Guids.VisualBasicLanguageServiceId);
            InitializeSettingsForLanguage(InternalLanguageNames.TypeScript, new Guid("4a0dddb5-7a95-4fbf-97cc-616d07737a77"));
            InitializeSettingsForLanguage("F#", new Guid("BC6DD5A5-D4D6-4dab-A00D-A51242DBAF1B"));
            InitializeSettingsForLanguage("Xaml", new Guid("CD53C9A1-6BC2-412B-BE36-CC715ED8DD41"));

            void InitializeSettingsForLanguage(string languageName, Guid languageGuid)
            {
                var languagePreferences = new LANGPREFERENCES3[1];

                languagePreferences[0].guidLang = languageGuid;

                // The function can potentially fail if that language service isn't installed
                if (ErrorHandler.Succeeded(_textManager.GetUserPreferences4(pViewPrefs: null, pLangPrefs: languagePreferences, pColorPrefs: null)))
                {
                    RefreshLanguageSettings(languagePreferences, languageName);
                    languageMap = languageMap.Add(languageName, Tuple.Create(languageGuid));
                }
                else
                {
                    FatalError.ReportWithDumpAndCatch(new InvalidOperationException("GetUserPreferences4 failed"), ErrorSeverity.Diagnostic);
                }
            }

            _languageMap            = languageMap;
            _textManagerEvents2Sink = ComEventSink.Advise <IVsTextManagerEvents4>(_textManager, this);
        }
Exemplo n.º 14
0
        public NavigationBar(
            ITextBuffer textBuffer,
            IVsDropdownBarManager manager,
            IVsCodeWindow codeWindow,
            IServiceProvider serviceProvider) : base(textBuffer)
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            Logger.Trace($"{nameof(NavigationBar)}:Ctor");

            _manager          = manager;
            _codeWindow       = codeWindow;
            _projectItems     = ImmutableList <NavigationBarItem> .Empty;
            _taskItems        = ImmutableList <NavigationBarItem> .Empty;
            _activeSelections = new Dictionary <int, int>();
            _focusedCombo     = -1;
            _trackedViews     = new Dictionary <IVsTextView, IWpfTextView>();

            _workspaceRegistration = Workspace.GetWorkspaceRegistration(TextBuffer.AsTextContainer());
            _workspaceRegistration.WorkspaceChanged += OnWorkspaceRegistrationChanged;
            VSColorTheme.ThemeChanged += OnThemeChanged;

            #pragma warning disable VSSDK006 // Check services exist
            var componentModel = (IComponentModel)serviceProvider.GetService(typeof(SComponentModel));
            #pragma warning restore VSSDK006 // Check services exist
            _editorAdaptersFactoryService = componentModel.GetService <IVsEditorAdaptersFactoryService>();

            _comEventSink = ComEventSink.Advise <IVsCodeWindowEvents>(codeWindow, this);

            codeWindow.GetPrimaryView(out var pTextView);
            ConnectView(pTextView);

            codeWindow.GetSecondaryView(out pTextView);
            ConnectView(pTextView);

            ConnectToWorkspace(_workspaceRegistration.Workspace);
        }
Exemplo n.º 15
0
        public static ComEventSink FromRuntimeCallableWrapper(object rcw, Guid sourceIid, bool createIfNotFound)
        {
            List <ComEventSink> comEventSinks = ComEventSinksContainer.FromRuntimeCallableWrapper(rcw, createIfNotFound);

            if (comEventSinks == null)
            {
                return(null);
            }

            ComEventSink comEventSink = null;

            lock (comEventSinks) {
                foreach (ComEventSink sink in comEventSinks)
                {
                    if (sink._sourceIid == sourceIid)
                    {
                        comEventSink = sink;
                        break;
                    }
                    else if (sink._sourceIid == Guid.Empty)
                    {
                        // we found a ComEventSink object that
                        // was previously disposed. Now we will reuse it.
                        sink.Initialize(rcw, sourceIid);
                        comEventSink = sink;
                    }
                }

                if (comEventSink == null && createIfNotFound == true)
                {
                    comEventSink = new ComEventSink(rcw, sourceIid);
                    comEventSinks.Add(comEventSink);
                }
            }

            return(comEventSink);
        }
Exemplo n.º 16
0
        public AbstractSnippetInfoService(
            Shell.SVsServiceProvider serviceProvider,
            Guid languageGuidForSnippets,
            IEnumerable <Lazy <IAsynchronousOperationListener, FeatureMetadata> > asyncListeners)
        {
            _languageGuidForSnippets = languageGuidForSnippets;

            if (serviceProvider != null)
            {
                var textManager = (IVsTextManager2)serviceProvider.GetService(typeof(SVsTextManager));
                if (textManager.GetExpansionManager(out _expansionManager) == VSConstants.S_OK)
                {
                    ComEventSink.Advise <IVsExpansionEvents>(_expansionManager, this);
                }
            }

            IAsynchronousOperationListener waiter = new AggregateAsynchronousOperationListener(asyncListeners, FeatureAttribute.Snippets);
            var token = waiter.BeginAsyncOperation(GetType().Name + ".Start");

            InitialCachePopulationTask = Task.Factory.StartNew(() => PopulateSnippetCaches(),
                                                               CancellationToken.None,
                                                               TaskCreationOptions.None,
                                                               ForegroundTaskScheduler).CompletesAsyncOperation(token);
        }
Exemplo n.º 17
0
 public ComEventSinkProxy(ComEventSink sink, Guid sinkIid)
     : base(typeof(ComEventSink)) {
     _sink = sink;
     _sinkIid = sinkIid;
 }
Exemplo n.º 18
0
 public ComEventSinkProxy(ComEventSink sink, Guid sinkIid)
     : base(typeof(ComEventSink))
 {
     _sink    = sink;
     _sinkIid = sinkIid;
 }
Exemplo n.º 19
0
        public static ComEventSink FromRuntimeCallableWrapper(object rcw, Guid sourceIid, bool createIfNotFound) {
            List<ComEventSink> comEventSinks = ComEventSinksContainer.FromRuntimeCallableWrapper(rcw, createIfNotFound);

            if (comEventSinks == null) {
                return null;
            }

            ComEventSink comEventSink = null;
            lock (comEventSinks) {

                foreach (ComEventSink sink in comEventSinks) {
                    if (sink._sourceIid == sourceIid) {
                        comEventSink = sink;
                        break;
                    } else if (sink._sourceIid == Guid.Empty) {
                        // we found a ComEventSink object that 
                        // was previously disposed. Now we will reuse it.
                        sink.Initialize(rcw, sourceIid);
                        comEventSink = sink;
                    }
                }

                if (comEventSink == null && createIfNotFound == true) {
                    comEventSink = new ComEventSink(rcw, sourceIid);
                    comEventSinks.Add(comEventSink);
                }
            }

            return comEventSink;
        }