public DocumentId AddTextContainer(SourceTextContainer textContainer, string fullPath, SourceCodeKind sourceCodeKind, ImmutableArray <string> folders) { if (textContainer == null) { throw new ArgumentNullException(nameof(textContainer)); } var documentId = DocumentId.CreateNewId(_project.Id, fullPath); var textLoader = new SourceTextLoader(textContainer, fullPath); var documentInfo = DocumentInfo.Create( documentId, FileNameUtilities.GetFileName(fullPath), folders: folders.IsDefault ? null : (IEnumerable <string>)folders, sourceCodeKind: sourceCodeKind, loader: textLoader, filePath: fullPath); lock (_project._gate) { if (_sourceTextContainersToDocumentIds.ContainsKey(textContainer)) { throw new ArgumentException($"{nameof(textContainer)} is already added to this project.", nameof(textContainer)); } if (fullPath != null) { if (_documentPathsToDocumentIds.ContainsKey(fullPath)) { throw new ArgumentException($"'{fullPath}' has already been added to this project."); } _documentPathsToDocumentIds.Add(fullPath, documentId); } _sourceTextContainersToDocumentIds = _sourceTextContainersToDocumentIds.Add(textContainer, documentInfo.Id); if (_project._activeBatchScopes > 0) { _documentsAddedInBatch.Add(documentInfo); } else { _project._workspace.ApplyChangeToWorkspace(w => { _project._workspace.AddDocumentToDocumentsNotFromFiles(documentInfo.Id); _documentAddAction(w, documentInfo); w.OnDocumentOpened(documentInfo.Id, textContainer); }); } } return(documentId); }
private void InitializeDisplayAndId() { try { // AssemblyName.GetAssemblyName(path) is not available on CoreCLR. // Use our metadata reader to do the equivalent thing. using var reader = new PEReader(FileUtilities.OpenRead(FullPath)); var metadataReader = reader.GetMetadataReader(); var assemblyIdentity = metadataReader.ReadAssemblyIdentityOrThrow(); _lazyDisplay = assemblyIdentity.Name; _lazyIdentity = assemblyIdentity; } catch { _lazyDisplay = FileNameUtilities.GetFileName(FullPath, includeExtension: false); _lazyIdentity = _lazyDisplay; } }
public DocumentId AddFile(string fullPath, SourceCodeKind sourceCodeKind, ImmutableArray <string> folders) { if (string.IsNullOrEmpty(fullPath)) { throw new ArgumentException($"{nameof(fullPath)} isn't a valid path.", nameof(fullPath)); } var documentId = DocumentId.CreateNewId(_project.Id, fullPath); var textLoader = new FileTextLoader(fullPath, defaultEncoding: null); var documentInfo = DocumentInfo.Create( documentId, FileNameUtilities.GetFileName(fullPath), folders: folders.IsDefault ? null : (IEnumerable <string>)folders, sourceCodeKind: sourceCodeKind, loader: textLoader, filePath: fullPath); lock (_project._gate) { if (_documentPathsToDocumentIds.ContainsKey(fullPath)) { throw new ArgumentException($"'{fullPath}' has already been added to this project.", nameof(fullPath)); } _documentPathsToDocumentIds.Add(fullPath, documentId); _project._fileWatchingTokens.Add(documentId, _project._documentFileChangeContext.EnqueueWatchingFile(fullPath)); if (_project._activeBatchScopes > 0) { _documentsAddedInBatch.Add(documentInfo); } else { _project._workspace.ApplyChangeToWorkspace(w => _documentAddAction(w, documentInfo)); _project._workspace.CheckForOpenDocuments(ImmutableArray.Create(fullPath)); } } return(documentId); }
public static string GetFileName(string path, bool includeExtension = true) { return(FileNameUtilities.GetFileName(path, includeExtension)); }
private void ProgressUpdated(string filePathOpt) { var current = DateTimeOffset.UtcNow; if (current - _lastTimeReported < s_minimumInterval) { // make sure we are not flooding UI. // this is just presentation, fine to not updating UI especially since // at the end, this notification will go away automatically return; } _lastTimeReported = current; ChangeProgress(_taskHandler, filePathOpt != null ? string.Format(ServicesVSResources.Analyzing_0, FileNameUtilities.GetFileName(filePathOpt)) : null); }