private IntPtr CreateDocumentView( string physicalView, string documentName, IVsHierarchy hierarchy, VSConstants.VSITEMID itemid, IVsTextLines textLines, IntPtr docDataExisting, Guid languageServiceId, out string editorCaption, out Guid cmdUI) { // Init out params editorCaption = string.Empty; cmdUI = Guid.Empty; if (string.IsNullOrEmpty(physicalView)) { // create code window as default physical view return(CreateTextView( textLines, documentName, hierarchy, itemid, docDataExisting, languageServiceId, ref editorCaption, ref cmdUI)); } // We couldn't create the view // Return special error code so VS can try another editor factory. ErrorHandler.ThrowOnFailure((int)VSConstants.VS_E_UNSUPPORTEDFORMAT); return(IntPtr.Zero); }
public TextBufferInitializationTracker( string documentName, IVsHierarchy hierarchy, VSConstants.VSITEMID itemid, IVsTextLines textLines, Guid languageServiceId, List <TextBufferInitializationTracker> trackers) { VsAppShell.Current.CompositionService.SatisfyImportsOnce(this); _documentName = documentName; _hierarchy = hierarchy; _itemid = itemid; _textLines = textLines; _languageServiceGuid = languageServiceId; _trackers = trackers; IConnectionPointContainer cpc = textLines as IConnectionPointContainer; Guid g = typeof(IVsTextBufferDataEvents).GUID; cpc.FindConnectionPoint(g, out cp); cp.Advise(this, out cookie); _trackers.Add(this); }
public SourceFile(FileInfo file, VSConstants.VSITEMID itemId, IVsProject project, DTE dte) { this.File = file ?? throw new ArgumentNullException(nameof(file)); this.ItemId = itemId; this.Dte = dte ?? throw new ArgumentNullException(nameof(dte)); this.Project = project ?? throw new ArgumentNullException(nameof(project)); this.Reader = this.ReaderFor(dte, file); }
private static VSConstants.VSITEMID NextSibling(IVsHierarchy hierarchy, VSConstants.VSITEMID firstID) { object siblingIDObj = null; hierarchy.GetProperty((uint)firstID, (int)__VSHPROPID.VSHPROPID_NextSibling, out siblingIDObj); if (siblingIDObj != null) { return((VSConstants.VSITEMID)(int) siblingIDObj); } return(VSConstants.VSITEMID.Nil); }
private static VSConstants.VSITEMID FirstChild(IVsHierarchy hierarchy, VSConstants.VSITEMID rootID) { object childIDObj = null; hierarchy.GetProperty((uint)rootID, (int)__VSHPROPID.VSHPROPID_FirstChild, out childIDObj); if (childIDObj != null) { return((VSConstants.VSITEMID)(int) childIDObj); } return(VSConstants.VSITEMID.Nil); }
private List <VSConstants.VSITEMID> ChildrenOf(IVsHierarchy hierarchy, VSConstants.VSITEMID rootID) { var result = new List <VSConstants.VSITEMID>(); for (VSConstants.VSITEMID itemID = FirstChild(hierarchy, rootID); itemID != VSConstants.VSITEMID.Nil; itemID = NextSibling(hierarchy, itemID)) { result.Add(itemID); result.AddRange(ChildrenOf(hierarchy, itemID)); } return(result); }
public static IEnumerable <VSConstants.VSITEMID> GetChildrenIds(this IVsHierarchy hierarchy, VSConstants.VSITEMID startingWith) { hierarchy.GetProperty((uint)startingWith, (int)__VSHPROPID.VSHPROPID_FirstChild, out object idObj); while (idObj != null) { if (idObj is System.Reflection.Missing) { break; } VSConstants.VSITEMID id = (VSConstants.VSITEMID)(int) idObj; yield return(id); hierarchy.GetProperty((uint)id, (int)__VSHPROPID.VSHPROPID_NextSibling, out idObj); } }
private IntPtr CreateTextView( IVsTextLines textLines, string documentName, IVsHierarchy hierarchy, VSConstants.VSITEMID itemid, IntPtr docDataExisting, Guid languageServiceId, ref string editorCaption) { IVsCodeWindow window = _adaptersFactory.CreateVsCodeWindowAdapter(VsServiceProvider); ErrorHandler.ThrowOnFailure(window.SetBuffer(textLines)); ErrorHandler.ThrowOnFailure(window.SetBaseEditorCaption(null)); ErrorHandler.ThrowOnFailure(window.GetEditorCaption(READONLYSTATUS.ROSTATUS_Unknown, out editorCaption)); CreateTextBufferInitializationTracker(textLines, documentName, hierarchy, itemid, docDataExisting, languageServiceId); return(Marshal.GetIUnknownForObject(window)); }
protected virtual void CreateTextBufferInitializationTracker( IVsTextLines textLines, string documentName, IVsHierarchy hierarchy, VSConstants.VSITEMID itemid, IntPtr docDataExisting, Guid languageServiceId) { // At this point buffer hasn't been initialized with content yet and hence we cannot // get ITextBuffer from the adapter. In order to get text buffer and properly attach // view filters we need to create a proxy class which will get called when document // is fully loaded and text buffer is finally populated with content. TextBufferInitializationTracker tracker = new TextBufferInitializationTracker( documentName, hierarchy, itemid, textLines, languageServiceId, InitializationTrackers); if (docDataExisting != IntPtr.Zero) { // When creating a new view for an existing buffer, the tracker object has to clean itself up tracker.OnLoadCompleted(0); } }
public TextBufferInitializationTracker( string documentName, IVsHierarchy hierarchy, VSConstants.VSITEMID itemid, IVsTextLines textLines, Guid languageServiceId, List<TextBufferInitializationTracker> trackers) { VsAppShell.Current.CompositionService.SatisfyImportsOnce(this); _documentName = documentName; _hierarchy = hierarchy; _itemid = itemid; _textLines = textLines; _languageServiceGuid = languageServiceId; _trackers = trackers; IConnectionPointContainer cpc = textLines as IConnectionPointContainer; Guid g = typeof(IVsTextBufferDataEvents).GUID; cpc.FindConnectionPoint(g, out cp); cp.Advise(this, out cookie); _trackers.Add(this); }
private static IEnumerable <ISource> GetSourceFiles(this IVsProject inProject, DTE dte, VSConstants.VSITEMID startingWith) => ((IVsHierarchy)inProject).GetChildrenIds(startingWith).SelectMany(id => inProject.FilesUnder(dte, id));
private static IEnumerable <ISource> FilesUnder(this IVsProject inProject, DTE dte, VSConstants.VSITEMID id) { Option <ISource> file = inProject.TryFindFile(dte, id); IEnumerable <ISource> result = file.OfType <SourceFile>() is Some <SourceFile> some ? new [] { some.Content }.Concat(inProject.GetSourceFiles(some.Content.Dte, some.Content.ItemId)) : file is Some <ISource> general ? new[] { general.Content } : inProject.GetSourceFiles(dte, id); return(result); }
private static Option <string> FilePathFor(this IVsProject project, VSConstants.VSITEMID itemId) => project.GetMkDocument((uint)itemId, out string path) == VSConstants.S_OK ? (Option <string>)path : None.Value;
private static Option <ISource> TryFindFile(this IVsProject project, DTE dte, VSConstants.VSITEMID itemId) => project.FilePathFor(itemId) .When(path => !string.IsNullOrEmpty(path)) .When(File.Exists) .Map(path => new FileInfo(path)) .Map <ISource>(file => new SourceFile(file, itemId, project, dte));
public static object GetPropertyValue(this IVsProject project, __VSHPROPID propid, VSConstants.VSITEMID itemId = VSConstants.VSITEMID.Root) { return(GetPropertyValue((IVsHierarchy)project, propid, itemId)); }
public static object GetPropertyValue(this IVsHierarchy vsHierarchy, __VSHPROPID propid, VSConstants.VSITEMID itemId = VSConstants.VSITEMID.Root) { return(GetPropertyValue(vsHierarchy, (int)propid, (uint)itemId)); }
public static void Open(this IVsProject project, VSConstants.VSITEMID itemId) { Guid view = Guid.Empty; project.OpenItem((uint)itemId, ref view, IntPtr.Zero, out IVsWindowFrame _); }