Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <llsan@microsoft.com>2018-02-19 11:22:57 +0300
committerGitHub <noreply@github.com>2018-02-19 11:22:57 +0300
commit4b8cf8c8e191ca65142d0b2afbc7131116818f65 (patch)
tree5ad45ae3bae678fd25bbc38ae066d502766b9bf8 /main/src/core
parente1de20f0eec6d66e78cf0640f00b03c1afcf7f23 (diff)
parent1581352a7cc3b8a65c84223d3897d9d5777b5cc0 (diff)
Merge pull request #3795 from mono/master-fix552019
Fixed 'VSTS 552019: Fix AddMissingReferenceCodeAction'
Diffstat (limited to 'main/src/core')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs64
1 files changed, 64 insertions, 0 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs
index 4880de88fc..7dacb46048 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs
@@ -1177,6 +1177,8 @@ namespace MonoDevelop.Ide.TypeSystem
//however, our MetadataReferenceCache currently depends on (incorrectly) using TryApplyChanges
case ApplyChangesKind.AddMetadataReference:
case ApplyChangesKind.RemoveMetadataReference:
+ case ApplyChangesKind.AddProjectReference:
+ case ApplyChangesKind.RemoveProjectReference:
return true;
default:
return false;
@@ -1287,7 +1289,69 @@ namespace MonoDevelop.Ide.TypeSystem
}
}
return path;
+ }
+
+ protected override void ApplyMetadataReferenceAdded (ProjectId projectId, MetadataReference metadataReference)
+ {
+ var mdProject = GetMonoProject (projectId) as MonoDevelop.Projects.DotNetProject;
+ var path = GetMetadataPath (metadataReference);
+ if (mdProject == null || path == null)
+ return;
+ mdProject.AddReference (path);
+ tryApplyState_changedProjects.Add (mdProject);
+ this.OnMetadataReferenceAdded (projectId, metadataReference);
+ }
+
+ protected override void ApplyMetadataReferenceRemoved (ProjectId projectId, MetadataReference metadataReference)
+ {
+ var mdProject = GetMonoProject (projectId) as MonoDevelop.Projects.DotNetProject;
+ var path = GetMetadataPath (metadataReference);
+ if (mdProject == null || path == null)
+ return;
+ var item = mdProject.References.FirstOrDefault (r => r.ReferenceType == MonoDevelop.Projects.ReferenceType.Assembly && r.Reference == path);
+ if (item == null)
+ return;
+ mdProject.References.Remove (item);
+ tryApplyState_changedProjects.Add (mdProject);
+ this.OnMetadataReferenceRemoved (projectId, metadataReference);
+ }
+
+ string GetMetadataPath (MetadataReference metadataReference)
+ {
+ if (metadataReference is PortableExecutableReference fileMetadata) {
+ return fileMetadata.FilePath;
+ }
+ return null;
+ }
+
+ protected override void ApplyProjectReferenceAdded (ProjectId projectId, ProjectReference projectReference)
+ {
+ var mdProject = GetMonoProject (projectId) as MonoDevelop.Projects.DotNetProject;
+ var projectToReference = GetMonoProject (projectReference.ProjectId);
+ if (mdProject == null || projectToReference == null)
+ return;
+ var mdRef = MonoDevelop.Projects.ProjectReference.CreateProjectReference (projectToReference);
+ mdProject.References.Add (mdRef);
+ tryApplyState_changedProjects.Add (mdProject);
+ this.OnProjectReferenceAdded (projectId, projectReference);
}
+
+ protected override void ApplyProjectReferenceRemoved (ProjectId projectId, ProjectReference projectReference)
+ {
+ var mdProject = GetMonoProject (projectId) as MonoDevelop.Projects.DotNetProject;
+ var projectToReference = GetMonoProject (projectReference.ProjectId);
+ if (mdProject == null || projectToReference == null)
+ return;
+ foreach (var pr in mdProject.References.OfType<MonoDevelop.Projects.ProjectReference>()) {
+ if (pr.ProjectGuid == projectToReference.ItemId) {
+ mdProject.References.Remove (pr);
+ tryApplyState_changedProjects.Add (mdProject);
+ this.OnProjectReferenceRemoved (projectId, projectReference);
+ break;
+ }
+ }
+ }
+
#endregion
internal Document GetDocument (DocumentId documentId, CancellationToken cancellationToken = default (CancellationToken))