diff --git a/src/Workspaces/Core/Portable/PublicAPI.Unshipped.txt b/src/Workspaces/Core/Portable/PublicAPI.Unshipped.txt index 6b111569a296cc6bc817cc192a7173e6a851f3ad..a711f7fb5643710b1bb10e7f89267288b95f1ef6 100644 --- a/src/Workspaces/Core/Portable/PublicAPI.Unshipped.txt +++ b/src/Workspaces/Core/Portable/PublicAPI.Unshipped.txt @@ -1,4 +1,5 @@ *REMOVED*Microsoft.CodeAnalysis.Workspace.ClearOpenDocument(Microsoft.CodeAnalysis.DocumentId documentId, bool isSolutionClosing = false) -> void +Microsoft.CodeAnalysis.Solution.AddAdditionalDocuments(System.Collections.Immutable.ImmutableArray documentInfos) -> Microsoft.CodeAnalysis.Solution Microsoft.CodeAnalysis.Solution.AddAnalyzerConfigDocuments(System.Collections.Immutable.ImmutableArray documentInfos) -> Microsoft.CodeAnalysis.Solution Microsoft.CodeAnalysis.Solution.ContainsAnalyzerConfigDocument(Microsoft.CodeAnalysis.DocumentId documentId) -> bool Microsoft.CodeAnalysis.Solution.RemoveAnalyzerConfigDocument(Microsoft.CodeAnalysis.DocumentId documentId) -> Microsoft.CodeAnalysis.Solution diff --git a/src/Workspaces/Core/Portable/Workspace/Solution/ProjectState.cs b/src/Workspaces/Core/Portable/Workspace/Solution/ProjectState.cs index 186f83ffabcaed89c42cc65430df2aebe1cdfdb0..0d862d93656eedc2adfade574d861c8c7e6d6bfd 100644 --- a/src/Workspaces/Core/Portable/Workspace/Solution/ProjectState.cs +++ b/src/Workspaces/Core/Portable/Workspace/Solution/ProjectState.cs @@ -675,14 +675,14 @@ public ProjectState AddDocuments(ImmutableArray documents) documentStates: _documentStates.AddRange(documents.Select(d => KeyValuePairUtil.Create(d.Id, d)))); } - public ProjectState AddAdditionalDocument(TextDocumentState document) + public ProjectState AddAdditionalDocuments(ImmutableArray documents) { - Debug.Assert(!this.AdditionalDocumentStates.ContainsKey(document.Id)); + Debug.Assert(!documents.Any(d => this.AdditionalDocumentStates.ContainsKey(d.Id))); return this.With( projectInfo: this.ProjectInfo.WithVersion(this.Version.GetNewerVersion()), - additionalDocumentIds: _additionalDocumentIds.Add(document.Id), - additionalDocumentStates: _additionalDocumentStates.Add(document.Id, document)); + additionalDocumentIds: _additionalDocumentIds.AddRange(documents.Select(d => d.Id)), + additionalDocumentStates: _additionalDocumentStates.AddRange(documents.Select(d => KeyValuePairUtil.Create(d.Id, d)))); } public ProjectState AddAnalyzerConfigDocuments(ImmutableArray documents) diff --git a/src/Workspaces/Core/Portable/Workspace/Solution/Solution.cs b/src/Workspaces/Core/Portable/Workspace/Solution/Solution.cs index 3aeaa7169ca93e562c75024e2d5de209f7a62c35..ff34c62f317ab065662336b6ec984c1652bceba7 100644 --- a/src/Workspaces/Core/Portable/Workspace/Solution/Solution.cs +++ b/src/Workspaces/Core/Portable/Workspace/Solution/Solution.cs @@ -776,7 +776,12 @@ public Solution AddAdditionalDocument(DocumentId documentId, string name, Source public Solution AddAdditionalDocument(DocumentInfo documentInfo) { - var newState = _state.AddAdditionalDocument(documentInfo); + return AddAdditionalDocuments(ImmutableArray.Create(documentInfo)); + } + + public Solution AddAdditionalDocuments(ImmutableArray documentInfos) + { + var newState = _state.AddAdditionalDocuments(documentInfos); if (newState == _state) { return this; diff --git a/src/Workspaces/Core/Portable/Workspace/Solution/SolutionState.cs b/src/Workspaces/Core/Portable/Workspace/Solution/SolutionState.cs index 8f7c8c4f3cb9007cadd5a760cf71c52bb125aeed..42d9fc293f133ae4b356a2b42773c7f4d220f929 100644 --- a/src/Workspaces/Core/Portable/Workspace/Solution/SolutionState.cs +++ b/src/Workspaces/Core/Portable/Workspace/Solution/SolutionState.cs @@ -1196,27 +1196,11 @@ public SolutionState AddDocuments(ImmutableArray documentInfos) return newSolutionState; } - public SolutionState AddAdditionalDocument(DocumentInfo documentInfo) + public SolutionState AddAdditionalDocuments(ImmutableArray documentInfos) { - if (documentInfo == null) - { - throw new ArgumentNullException(nameof(documentInfo)); - } - - CheckContainsProject(documentInfo.Id.ProjectId); - CheckNotContainsAdditionalDocument(documentInfo.Id); - - var oldProject = this.GetProjectState(documentInfo.Id.ProjectId); - - var state = new TextDocumentState( - documentInfo, - _solutionServices); - - var newProject = oldProject.AddAdditionalDocument(state); - var documentStates = SpecializedCollections.SingletonEnumerable(newProject.GetAdditionalDocumentState(documentInfo.Id)); - - return this.ForkProject(newProject, - newFilePathToDocumentIdsMap: CreateFilePathToDocumentIdsMapWithAddedDocuments(documentStates)); + return AddDocumentsToMultipleProjects(documentInfos, + (documentInfo, project) => new TextDocumentState(documentInfo, _solutionServices), + (projectState, documents) => (projectState.AddAdditionalDocuments(documents), translationAction: null)); } public SolutionState AddAnalyzerConfigDocuments(ImmutableArray documentInfos)