public CPSProject( VisualStudioProjectTracker projectTracker, Func <ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectDisplayName, string projectFilePath, IVsHierarchy hierarchy, string language, Guid projectGuid, string commandLineForOptions, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt, ICommandLineParserService commandLineParserServiceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectDisplayName, projectFilePath, hierarchy, language, projectGuid, serviceProvider, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt, commandLineParserServiceOpt) { // Initialize the options. SetCommandLineArguments(commandLineForOptions); // We need to ensure that the bin output path for the project has been initialized before we hookup the project with the project tracker. // If we were unable to set the output path from SetCommandLineArguments (due to null output file name or directory in the given commandLineForOptions), // we set a default unique output path. if (this.TryGetBinOutputPath() == null) { var uniqueDefaultOutputPath = PathUtilities.CombinePathsUnchecked(Path.GetTempPath(), projectDisplayName + projectGuid.GetHashCode().ToString()); SetOutputPathAndRelatedData(objOutputPath: uniqueDefaultOutputPath, hasSameBinAndObjOutputPaths: true); } Contract.ThrowIfNull(this.TryGetBinOutputPath()); // Now hook up the project to the project tracker. projectTracker.AddProject(this); _lastDesignTimeBuildSucceeded = true; }
public CSharpProjectShim( ICSharpProjectRoot projectRoot, VisualStudioProjectTracker projectTracker, Func <ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectSystemName, IVsHierarchy hierarchy, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt, ICommandLineParserService commandLineParserServiceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectSystemName, hierarchy, LanguageNames.CSharp, serviceProvider, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt, commandLineParserServiceOpt) { _projectRoot = projectRoot; _warningNumberArrayPointer = Marshal.AllocHGlobal(0); // Ensure the default options are set up ResetAllOptions(); UpdateOptions(); projectTracker.AddProject(this); }
public CPSProject( VisualStudioProjectTracker projectTracker, Func<ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectDisplayName, string projectFilePath, IVsHierarchy hierarchy, string language, Guid projectGuid, string commandLineForOptions, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt, ICommandLineParserService commandLineParserServiceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectDisplayName, projectFilePath, hierarchy, language, projectGuid, serviceProvider, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt, commandLineParserServiceOpt) { // Initialize the options. SetCommandLineArguments(commandLineForOptions); // We need to ensure that the bin output path for the project has been initialized before we hookup the project with the project tracker. // If we were unable to set the output path from SetCommandLineArguments (due to null output file name or directory in the given commandLineForOptions), // we set a default unique output path. if (this.TryGetBinOutputPath() == null) { var uniqueDefaultOutputPath = PathUtilities.CombinePathsUnchecked(Path.GetTempPath(), projectDisplayName + projectGuid.GetHashCode().ToString()); SetOutputPathAndRelatedData(objOutputPath: uniqueDefaultOutputPath, hasSameBinAndObjOutputPaths: true); } Contract.ThrowIfNull(this.TryGetBinOutputPath()); // Now hook up the project to the project tracker. projectTracker.AddProject(this); _lastDesignTimeBuildSucceeded = true; }
// internal for testing purposes only. internal static CPSProject CreateCPSProject(VisualStudioProjectTracker projectTracker, IServiceProvider serviceProvider, IVsHierarchy hierarchy, string projectDisplayName, string projectFilePath, Guid projectGuid, string language, ICommandLineParserService commandLineParserService, string binOutputPath) { return new CPSProject(projectTracker, reportExternalErrorCreatorOpt: null, hierarchy: hierarchy, language: language, serviceProvider: serviceProvider, visualStudioWorkspaceOpt: null, hostDiagnosticUpdateSourceOpt: null, projectDisplayName: projectDisplayName, projectFilePath: projectFilePath, projectGuid: projectGuid, binOutputPath: binOutputPath, commandLineParserServiceOpt: commandLineParserService); }
public AbstractLegacyProject( VisualStudioProjectTracker projectTracker, Func<ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectSystemName, IVsHierarchy hierarchy, string language, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt, ICommandLineParserService commandLineParserServiceOpt = null) : base(projectTracker, reportExternalErrorCreatorOpt, projectSystemName, projectFilePath: GetProjectFilePath(hierarchy), hierarchy: hierarchy, projectGuid: GetProjectIDGuid(hierarchy), language: language, serviceProvider: serviceProvider, visualStudioWorkspaceOpt: visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt: hostDiagnosticUpdateSourceOpt, commandLineParserServiceOpt: commandLineParserServiceOpt) { if (Hierarchy != null) { ConnectHierarchyEvents(); this.IsWebSite = GetIsWebsiteProject(Hierarchy); } // Initialize command line arguments. base.SetArguments(commandLine: string.Empty); }
public AbstractLegacyProject( VisualStudioProjectTracker projectTracker, Func<ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectSystemName, IVsHierarchy hierarchy, string language, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectSystemName, projectFilePath: GetProjectFilePath(hierarchy), projectGuid: GetProjectIDGuid(hierarchy), projectTypeGuid: GetProjectType(hierarchy), hierarchy: hierarchy, language: language, serviceProvider: serviceProvider, visualStudioWorkspaceOpt: visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt: hostDiagnosticUpdateSourceOpt) { ConnectHierarchyEvents(); this.IsWebSite = GetIsWebsiteProject(hierarchy); _lastParsedCompilerOptions = string.Empty; var commandLineArguments = ParseCommandLineArguments(SpecializedCollections.EmptyEnumerable<string>()); base.SetArguments(commandLineArguments); }
public CSharpProjectShim( ICSharpProjectRoot projectRoot, VisualStudioProjectTracker projectTracker, Func <ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectSystemName, IVsHierarchy hierarchy, IServiceProvider serviceProvider, MiscellaneousFilesWorkspace miscellaneousFilesWorkspaceOpt, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectSystemName, hierarchy, LanguageNames.CSharp, serviceProvider, miscellaneousFilesWorkspaceOpt, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt) { _projectRoot = projectRoot; _warningNumberArrayPointer = Marshal.AllocHGlobal(0); InitializeOptions(); projectTracker.AddProject(this); }
public AbstractLegacyProject( VisualStudioProjectTracker projectTracker, Func <ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectSystemName, IVsHierarchy hierarchy, string language, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt, ICommandLineParserService commandLineParserServiceOpt = null) : base(projectTracker, reportExternalErrorCreatorOpt, projectSystemName, projectFilePath: GetProjectFilePath(hierarchy), hierarchy: hierarchy, projectGuid: GetProjectIDGuid(hierarchy), language: language, serviceProvider: serviceProvider, visualStudioWorkspaceOpt: visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt: hostDiagnosticUpdateSourceOpt, commandLineParserServiceOpt: commandLineParserServiceOpt) { if (Hierarchy != null) { ConnectHierarchyEvents(); this.IsWebSite = GetIsWebsiteProject(Hierarchy); } // Initialize command line arguments. base.SetArguments(commandLine: string.Empty); }
// internal for testing purposes only. internal static CPSProject CreateCPSProject(VisualStudioProjectTracker projectTracker, IServiceProvider serviceProvider, IVsHierarchy hierarchy, string projectDisplayName, string projectFilePath, Guid projectGuid, string language, ICommandLineParserService commandLineParserService, string binOutputPath) { return(new CPSProject(projectTracker, reportExternalErrorCreatorOpt: null, hierarchy: hierarchy, language: language, serviceProvider: serviceProvider, visualStudioWorkspaceOpt: null, hostDiagnosticUpdateSourceOpt: null, projectDisplayName: projectDisplayName, projectFilePath: projectFilePath, projectGuid: projectGuid, binOutputPath: binOutputPath, commandLineParserServiceOpt: commandLineParserService)); }
internal ContainedLanguage( IVsTextBufferCoordinator bufferCoordinator, IComponentModel componentModel, VisualStudioProject project, IVsHierarchy hierarchy, uint itemid, VisualStudioProjectTracker projectTrackerOpt, ProjectId projectId, TLanguageService languageService, AbstractFormattingRule vbHelperFormattingRule = null) { this.BufferCoordinator = bufferCoordinator; this.ComponentModel = componentModel; this.Project = project; _languageService = languageService; this.Workspace = projectTrackerOpt?.Workspace ?? componentModel.GetService <VisualStudioWorkspace>(); _editorAdaptersFactoryService = componentModel.GetService <IVsEditorAdaptersFactoryService>(); _diagnosticAnalyzerService = componentModel.GetService <IDiagnosticAnalyzerService>(); // Get the ITextBuffer for the secondary buffer Marshal.ThrowExceptionForHR(bufferCoordinator.GetSecondaryBuffer(out var secondaryTextLines)); var secondaryVsTextBuffer = (IVsTextBuffer)secondaryTextLines; SubjectBuffer = _editorAdaptersFactoryService.GetDocumentBuffer(secondaryVsTextBuffer); // Get the ITextBuffer for the primary buffer Marshal.ThrowExceptionForHR(bufferCoordinator.GetPrimaryBuffer(out var primaryTextLines)); DataBuffer = _editorAdaptersFactoryService.GetDataBuffer((IVsTextBuffer)primaryTextLines); // Create our tagger var bufferTagAggregatorFactory = ComponentModel.GetService <IBufferTagAggregatorFactoryService>(); _bufferTagAggregator = bufferTagAggregatorFactory.CreateTagAggregator <ITag>(SubjectBuffer); if (!ErrorHandler.Succeeded(((IVsProject)hierarchy).GetMkDocument(itemid, out var filePath))) { // we couldn't look up the document moniker from an hierarchy for an itemid. // Since we only use this moniker as a key, we could fall back to something else, like the document name. Debug.Assert(false, "Could not get the document moniker for an item from its hierarchy."); if (!hierarchy.TryGetItemName(itemid, out filePath)) { FatalError.Report(new System.Exception("Failed to get document moniker for a contained document")); } } DocumentId documentId; if (this.Project != null) { documentId = this.Project.AddSourceTextContainer( SubjectBuffer.AsTextContainer(), filePath, sourceCodeKind: SourceCodeKind.Regular, folders: default,
public PythonProjectSite(VisualStudioProjectTracker projectTracker, string projectName, string projectFilePath, IVsHierarchy hierarchy, Guid projectGuid, IServiceProvider provider, VisualStudioWorkspaceImpl workspaceImpl, HostDiagnosticUpdateSource hostDiagnosticsUpdateSource ) : base(projectTracker, null, projectName, projectFilePath, hierarchy, "Python", projectGuid, provider, workspaceImpl, hostDiagnosticsUpdateSource) { }
public CPSProjectFactory( VisualStudioProjectTracker projectTracker, SVsServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspace, HostDiagnosticUpdateSource hostDiagnosticUpdateSource) { _projectTracker = projectTracker; _serviceProvider = serviceProvider; _visualStudioWorkspace = visualStudioWorkspace; _hostDiagnosticUpdateSource = hostDiagnosticUpdateSource; _externalErrorReporterMap = new Dictionary<string, IVsReportExternalErrors>(StringComparer.OrdinalIgnoreCase); }
public CPSProjectFactory( VisualStudioProjectTracker projectTracker, SVsServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspace, HostDiagnosticUpdateSource hostDiagnosticUpdateSource) { _projectTracker = projectTracker; _serviceProvider = serviceProvider; _visualStudioWorkspace = visualStudioWorkspace; _hostDiagnosticUpdateSource = hostDiagnosticUpdateSource; _externalErrorReporterMap = new Dictionary <string, IVsReportExternalErrors>(StringComparer.OrdinalIgnoreCase); }
public XamlProject(VisualStudioProjectTracker projectTracker, IVsHierarchy hierarchy, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspace) : base( projectTracker, reportExternalErrorCreatorOpt: null, projectSystemName: $"{XamlProject.GetProjectName(hierarchy)}-{nameof(XamlProject)}", hierarchy: hierarchy, language: StringConstants.XamlLanguageName, serviceProvider: serviceProvider, visualStudioWorkspaceOpt: visualStudioWorkspace, hostDiagnosticUpdateSourceOpt: null) { projectTracker.AddProject(this); }
public CSharpLspProject(VisualStudioProjectTracker projectTracker, Func <ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectSystemName, string projectFilePath, IVsHierarchy hierarchy, string language, Guid projectGuid, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt, ICommandLineParserService commandLineParserServiceOpt = null) : base(projectTracker, reportExternalErrorCreatorOpt, projectSystemName, projectFilePath, hierarchy, language, projectGuid, serviceProvider, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt, commandLineParserServiceOpt) { }
public async Task InitializeProjectTrackerAsync() { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); #pragma warning disable CS0618 // Type or member is obsolete. This is the new liveshare layer. ProjectTracker = new VisualStudioProjectTracker(_serviceProvider, _remoteLanguageServiceWorkspace); var documentProvider = (DocumentProvider)Activator.CreateInstance(typeof(DocumentProvider)); var metadataReferenceProvider = _remoteLanguageServiceWorkspace.Services.GetService <VisualStudioMetadataReferenceManager>(); var ruleSetFileProvider = _remoteLanguageServiceWorkspace.Services.GetService <VisualStudioRuleSetManager>(); ProjectTracker.InitializeProviders(documentProvider, metadataReferenceProvider, ruleSetFileProvider); ProjectTracker.StartPushingToWorkspaceAndNotifyOfOpenDocuments(Enumerable.Empty <AbstractProject>()); #pragma warning restore CS0618 // Type or member is obsolete. This is the new liveshare layer. }
public CSharpProjectShimWithServices( ICSharpProjectRoot projectRoot, VisualStudioProjectTracker projectTracker, Func <ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectSystemName, IVsHierarchy hierarchy, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt) : base( projectRoot, projectTracker, reportExternalErrorCreatorOpt, projectSystemName, hierarchy, serviceProvider, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt) { }
public CPSProject( CommandLineArguments commandLineArguments, VisualStudioProjectTracker projectTracker, Func<ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectDisplayName, string projectFilePath, Guid projectGuid, string projectTypeGuid, IVsHierarchy hierarchy, string language, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectDisplayName, projectFilePath, projectGuid, projectTypeGuid, hierarchy, language, serviceProvider, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt) { // Set the initial options from the command line before we add the project to the project tracker. SetCommandLineArguments(commandLineArguments); projectTracker.AddProject(this); }
public CPSProject( VisualStudioProjectTracker projectTracker, Func<ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectDisplayName, string projectFilePath, IVsHierarchy hierarchy, string language, Guid projectGuid, string binOutputPath, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt, ICommandLineParserService commandLineParserServiceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectDisplayName, projectFilePath, hierarchy, language, projectGuid, serviceProvider, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt, commandLineParserServiceOpt) { // We need to ensure that the bin output path for the project has been initialized before we hookup the project with the project tracker. NormalizeAndSetBinOutputPathAndRelatedData(binOutputPath); // Now hook up the project to the project tracker. projectTracker.AddProject(this); }
public CPSProject( VisualStudioProjectTracker projectTracker, Func <ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectDisplayName, string projectFilePath, IVsHierarchy hierarchy, string language, Guid projectGuid, string binOutputPath, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt, ICommandLineParserService commandLineParserServiceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectDisplayName, projectFilePath, hierarchy, language, projectGuid, serviceProvider, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt, commandLineParserServiceOpt) { // We need to ensure that the bin output path for the project has been initialized before we hookup the project with the project tracker. SetBinOutputPathAndRelatedData(binOutputPath); // Now hook up the project to the project tracker. projectTracker.AddProject(this); }
public CPSProject( VisualStudioProjectTracker projectTracker, Func<ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectDisplayName, string projectFilePath, IVsHierarchy hierarchy, string language, Guid projectGuid, string binOutputPath, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt, ICommandLineParserService commandLineParserServiceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectDisplayName, projectFilePath, hierarchy, language, projectGuid, serviceProvider, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt, commandLineParserServiceOpt) { if (binOutputPath != null) { // Ensure that binOutputPath is either null or a rooted path. // CPS might provide such invalid paths during initialization or when project is in unrestored state. if (binOutputPath == String.Empty) { binOutputPath = null; } else if (!PathUtilities.IsAbsolute(binOutputPath)) { // Make it a rooted path. var basePath = PathUtilities.IsAbsolute(projectFilePath) ? PathUtilities.GetDirectoryName(projectFilePath) : Path.GetTempPath(); binOutputPath = PathUtilities.CombineAbsoluteAndRelativePaths(basePath, binOutputPath); } } // We need to ensure that the bin output path for the project has been initialized before we hookup the project with the project tracker. SetBinOutputPathAndRelatedData(binOutputPath); // Now hook up the project to the project tracker. projectTracker.AddProject(this); }
public CPSProject( VisualStudioProjectTracker projectTracker, Func <ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectDisplayName, string projectFilePath, IVsHierarchy hierarchy, string language, Guid projectGuid, string binOutputPath, IServiceProvider serviceProvider, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt, ICommandLineParserService commandLineParserServiceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectDisplayName, projectFilePath, hierarchy, language, projectGuid, serviceProvider, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt, commandLineParserServiceOpt) { if (binOutputPath != null) { // Ensure that binOutputPath is either null or a rooted path. // CPS might provide such invalid paths during initialization or when project is in unrestored state. if (binOutputPath == String.Empty) { binOutputPath = null; } else if (!PathUtilities.IsAbsolute(binOutputPath)) { // Make it a rooted path. var basePath = PathUtilities.IsAbsolute(projectFilePath) ? PathUtilities.GetDirectoryName(projectFilePath) : Path.GetTempPath(); binOutputPath = PathUtilities.CombineAbsoluteAndRelativePaths(basePath, binOutputPath); } } // We need to ensure that the bin output path for the project has been initialized before we hookup the project with the project tracker. SetBinOutputPathAndRelatedData(binOutputPath); // Now hook up the project to the project tracker. projectTracker.AddProject(this); }
protected CSharpProject( VisualStudioProjectTracker projectTracker, Func <ProjectId, IVsReportExternalErrors> reportExternalErrorCreatorOpt, string projectSystemName, IVsHierarchy hierarchy, IServiceProvider serviceProvider, MiscellaneousFilesWorkspace miscellaneousFilesWorkspaceOpt, VisualStudioWorkspaceImpl visualStudioWorkspaceOpt, HostDiagnosticUpdateSource hostDiagnosticUpdateSourceOpt) : base(projectTracker, reportExternalErrorCreatorOpt, projectSystemName, hierarchy, LanguageNames.CSharp, serviceProvider, miscellaneousFilesWorkspaceOpt, visualStudioWorkspaceOpt, hostDiagnosticUpdateSourceOpt) { InitializeOptions(); projectTracker.AddProject(this); }
// internal for testing purposes only. internal static CPSProject CreateCPSProject(VisualStudioProjectTracker projectTracker, IServiceProvider serviceProvider, IVsHierarchy hierarchy, string projectDisplayName, string projectFilePath, string language, Guid projectGuid, string projectTypeGuid, CommandLineArguments commandLineArguments) { return new CPSProject(commandLineArguments, projectTracker, reportExternalErrorCreatorOpt: null, hierarchy: hierarchy, language: language, serviceProvider: serviceProvider, visualStudioWorkspaceOpt: null, hostDiagnosticUpdateSourceOpt: null, projectDisplayName: projectDisplayName, projectFilePath: projectFilePath, projectGuid: projectGuid, projectTypeGuid: projectTypeGuid); }
internal ContainedLanguage( IVsTextBufferCoordinator bufferCoordinator, IComponentModel componentModel, VisualStudioProject project, IVsHierarchy hierarchy, uint itemid, VisualStudioProjectTracker projectTrackerOpt, ProjectId projectId, TLanguageService languageService, IFormattingRule vbHelperFormattingRule = null) { this.BufferCoordinator = bufferCoordinator; this.ComponentModel = componentModel; this.Project = project; _languageService = languageService; this.Workspace = projectTrackerOpt?.Workspace ?? componentModel.GetService <VisualStudioWorkspace>(); _editorAdaptersFactoryService = componentModel.GetService <IVsEditorAdaptersFactoryService>(); _diagnosticAnalyzerService = componentModel.GetService <IDiagnosticAnalyzerService>(); // Get the ITextBuffer for the secondary buffer Marshal.ThrowExceptionForHR(bufferCoordinator.GetSecondaryBuffer(out var secondaryTextLines)); var secondaryVsTextBuffer = (IVsTextBuffer)secondaryTextLines; SubjectBuffer = _editorAdaptersFactoryService.GetDocumentBuffer(secondaryVsTextBuffer); // Get the ITextBuffer for the primary buffer Marshal.ThrowExceptionForHR(bufferCoordinator.GetPrimaryBuffer(out var primaryTextLines)); DataBuffer = _editorAdaptersFactoryService.GetDataBuffer((IVsTextBuffer)primaryTextLines); // Create our tagger var bufferTagAggregatorFactory = ComponentModel.GetService <IBufferTagAggregatorFactoryService>(); _bufferTagAggregator = bufferTagAggregatorFactory.CreateTagAggregator <ITag>(SubjectBuffer); if (!ErrorHandler.Succeeded(((IVsProject)hierarchy).GetMkDocument(itemid, out var filePath))) { // we couldn't look up the document moniker from an hierarchy for an itemid. // Since we only use this moniker as a key, we could fall back to something else, like the document name. Debug.Assert(false, "Could not get the document moniker for an item from its hierarchy."); if (!hierarchy.TryGetItemName(itemid, out filePath)) { FatalError.Report(new System.Exception("Failed to get document moniker for a contained document")); } } DocumentId documentId; if (this.Project != null) { documentId = this.Project.AddSourceTextContainer(SubjectBuffer.AsTextContainer(), filePath); } else { documentId = DocumentId.CreateNewId(projectId, $"{nameof(ContainedDocument)}: {filePath}"); // We must jam a document into an existing workspace, which we'll assume is safe to do with OnDocumentAdded Workspace.OnDocumentAdded(DocumentInfo.Create(documentId, filePath, filePath: filePath)); Workspace.OnDocumentOpened(documentId, SubjectBuffer.AsTextContainer()); } this.ContainedDocument = new ContainedDocument( componentModel.GetService <IThreadingContext>(), documentId, subjectBuffer: SubjectBuffer, dataBuffer: DataBuffer, bufferCoordinator, this.Workspace, project, hierarchy, itemid, componentModel, vbHelperFormattingRule); // TODO: Can contained documents be linked or shared? this.DataBuffer.Changed += OnDataBufferChanged; }