提交 5a3e685b 编写于 作者: J Jason Malinowski 提交者: GitHub

Merge pull request #22848 from jasonmalinowski/fix-multi-project-call-hierarchy

When creating child items in Call Hierarchy, use the correct project
......@@ -163,7 +163,8 @@ protected virtual async Task SearchWorkerAsync(ISymbol symbol, Project project,
}
else
{
var item = await Provider.CreateItem(caller.CallingSymbol, project, caller.Locations, cancellationToken).ConfigureAwait(false);
var callingProject = project.Solution.GetProject(caller.CallingSymbol.ContainingAssembly);
var item = await Provider.CreateItem(caller.CallingSymbol, callingProject, caller.Locations, cancellationToken).ConfigureAwait(false);
callback.AddResult(item);
cancellationToken.ThrowIfCancellationRequested();
}
......
......@@ -176,7 +176,7 @@ public class D : I
<WorkItem(981869, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/981869")>
<WpfFact, Trait(Traits.Feature, Traits.Features.CallHierarchy)>
Public Sub TestCallHierarchyCrossProjectNavigation()
Public Sub TestCallHierarchyCrossProjectForImplements()
Dim input =
<Workspace>
<Project Language="C#" AssemblyName="Assembly1" CommonReferences="true">
......@@ -213,6 +213,44 @@ class CSharpIt : IChangeSignatureOptionsService
CallHierarchySearchScope.EntireSolution)
End Sub
<WorkItem(981869, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/981869")>
<WpfFact, Trait(Traits.Feature, Traits.Features.CallHierarchy)>
Public Sub TestCallHierarchyCrossProjectForCallsTo()
Dim input =
<Workspace>
<Project Language="C#" AssemblyName="Assembly1" CommonReferences="true">
<Document>
public class C
{
public static void $$M() { }
}
</Document>
</Project>
<Project Language="C#" AssemblyName="Assembly2" CommonReferences="true">
<ProjectReference>Assembly1</ProjectReference>
<Document>
using System;
class D
{
public void M2() { C.M(); }
}
</Document>
</Project>
</Workspace>
Dim testState = CallHierarchyTestState.Create(input)
Dim root = testState.GetRoot()
testState.SearchRoot(root,
String.Format(EditorFeaturesResources.Calls_To_0, "M"),
Sub(c)
' The child items should be in the second project
Assert.Equal("Assembly2", c.Project.Name)
End Sub,
CallHierarchySearchScope.EntireSolution)
End Sub
<WorkItem(844613, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/844613")>
<WpfFact, Trait(Traits.Feature, Traits.Features.CallHierarchy)>
Public Sub TestMustInheritMethodInclusionToOverrides()
......
......@@ -91,6 +91,13 @@ internal void WaitForCompletion()
}
}
public static CallHierarchyTestState Create(string markup, params Type[] additionalTypes)
{
var exportProvider = CreateExportProvider(additionalTypes);
var workspace = TestWorkspace.CreateCSharp(markup, exportProvider: exportProvider);
return new CallHierarchyTestState(workspace);
}
public static CallHierarchyTestState Create(XElement markup, params Type[] additionalTypes)
{
var exportProvider = CreateExportProvider(additionalTypes);
......@@ -128,31 +135,6 @@ private static VisualStudio.Composition.ExportProvider CreateExportProvider(Type
return MinimalTestExportProvider.CreateExportProvider(catalog);
}
public static CallHierarchyTestState Create(string markup, params Type[] additionalTypes)
{
var exportProvider = CreateExportProvider(additionalTypes);
var workspace = TestWorkspace.CreateCSharp(markup, exportProvider: exportProvider);
return new CallHierarchyTestState(markup, workspace);
}
private CallHierarchyTestState(string markup, TestWorkspace workspace)
{
this.Workspace = workspace;
var testDocument = Workspace.Documents.Single(d => d.CursorPosition.HasValue);
_textView = testDocument.GetTextView();
_subjectBuffer = testDocument.GetTextBuffer();
var provider = Workspace.GetService<CallHierarchyProvider>();
var notificationService = Workspace.Services.GetService<INotificationService>() as INotificationServiceCallback;
var callback = new Action<string, string, NotificationSeverity>((message, title, severity) => NotificationMessage = message);
notificationService.NotificationCallback = callback;
_presenter = new MockCallHierarchyPresenter();
_commandHandler = new CallHierarchyCommandHandler(new[] { _presenter }, provider, TestWaitIndicator.Default);
}
internal string NotificationMessage
{
get;
......@@ -176,6 +158,9 @@ internal IImmutableSet<Document> GetDocuments(string[] documentNames)
internal void SearchRoot(CallHierarchyItem root, string displayName, Action<CallHierarchyItem> verify, CallHierarchySearchScope scope, IImmutableSet<Document> documents = null)
{
var callback = new MockSearchCallback(verify);
// Assert we have the category before we try to find it to give better diagnosing
Assert.Contains(displayName, root.SupportedSearchCategories.Select(c => c.DisplayName));
var category = root.SupportedSearchCategories.First(c => c.DisplayName == displayName).Name;
if (documents != null)
{
......@@ -192,6 +177,9 @@ internal void SearchRoot(CallHierarchyItem root, string displayName, Action<Call
internal void SearchRoot(CallHierarchyItem root, string displayName, Action<ICallHierarchyNameItem> verify, CallHierarchySearchScope scope, IImmutableSet<Document> documents = null)
{
var callback = new MockSearchCallback(verify);
// Assert we have the category before we try to find it to give better diagnosing
Assert.Contains(displayName, root.SupportedSearchCategories.Select(c => c.DisplayName));
var category = root.SupportedSearchCategories.First(c => c.DisplayName == displayName).Name;
if (documents != null)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册