提交 fc856a08 编写于 作者: R Ravi Chande

fix merge issues

上级 8945c5a3
......@@ -106,6 +106,7 @@
<MicrosoftVisualStudioShellInterop121DesignTimeVersion>12.1.30328</MicrosoftVisualStudioShellInterop121DesignTimeVersion>
<MicrosoftVisualStudioShellInterop140DesignTimeVersion>14.3.25407</MicrosoftVisualStudioShellInterop140DesignTimeVersion>
<MicrosoftVisualStudioShellInterop150DesignTimeVersion>15.0.26606-alpha</MicrosoftVisualStudioShellInterop150DesignTimeVersion>
<MicrosoftVisualStudioShellInterop153DesignTimeVersion>15.0.26606</MicrosoftVisualStudioShellInterop153DesignTimeVersion>
<MicrosoftVisualStudioShellInterop80Version>8.0.50727</MicrosoftVisualStudioShellInterop80Version>
<MicrosoftVisualStudioShellInterop90Version>9.0.30729</MicrosoftVisualStudioShellInterop90Version>
<MicrosoftVisualStudioTelemetryVersion>15.0.26606-alpha</MicrosoftVisualStudioTelemetryVersion>
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using Microsoft.CodeAnalysis.Editor.GoToDefinition;
using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.FindUsages;
using Microsoft.VisualStudio.Language.Intellisense;
using Microsoft.VisualStudio.Text;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.Editor.NavigableSymbols
{
internal partial class NavigableSymbolService
{
private class NavigableSymbol : INavigableSymbol
{
private readonly ImmutableArray<DefinitionItem> _definitions;
private readonly SnapshotSpan _span;
private readonly Document _document;
private readonly IEnumerable<Lazy<IStreamingFindUsagesPresenter>> _presenters;
private readonly IWaitIndicator _waitIndicator;
public NavigableSymbol(
ImmutableArray<DefinitionItem> definitions,
SnapshotSpan span,
Document document,
IEnumerable<Lazy<IStreamingFindUsagesPresenter>> streamingPresenters,
IWaitIndicator waitIndicator)
{
Contract.ThrowIfFalse(definitions.Length > 0);
_definitions = definitions;
_span = span;
_document = document;
_presenters = streamingPresenters;
_waitIndicator = waitIndicator;
}
public SnapshotSpan SymbolSpan => _span;
public IEnumerable<INavigableRelationship> Relationships =>
SpecializedCollections.SingletonEnumerable(PredefinedNavigableRelationships.Definition);
public void Navigate(INavigableRelationship relationship) =>
_waitIndicator.Wait(
title: EditorFeaturesResources.Go_to_Definition,
message: EditorFeaturesResources.Navigating_to_definition,
allowCancel: true,
showProgress: false,
action: context => GoToDefinitionHelpers.TryGoToDefinition(
_definitions,
_document.Project,
_definitions[0].NameDisplayParts.GetFullText(),
_presenters,
context.CancellationToken)
);
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Editor.GoToDefinition;
using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.Language.Intellisense;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;
namespace Microsoft.CodeAnalysis.Editor.NavigableSymbols
{
internal partial class NavigableSymbolService
{
private partial class NavigableSymbolSource : INavigableSymbolSource
{
private readonly IEnumerable<Lazy<IStreamingFindUsagesPresenter>> _presenters;
private readonly IWaitIndicator _waitIndicator;
private bool _disposed;
public NavigableSymbolSource(
IEnumerable<Lazy<IStreamingFindUsagesPresenter>> streamingPresenters,
IWaitIndicator waitIndicator)
{
_presenters = streamingPresenters;
_waitIndicator = waitIndicator;
}
public void Dispose()
{
_disposed = true;
}
public async Task<INavigableSymbol> GetNavigableSymbolAsync(SnapshotSpan triggerSpan, CancellationToken cancellationToken)
{
if (_disposed)
{
return null;
}
var snapshot = triggerSpan.Snapshot;
var position = triggerSpan.Start;
var document = snapshot.GetOpenDocumentInCurrentContextWithChanges();
if (document == null)
{
return null;
}
var service = document.GetLanguageService<IGoToSymbolService>();
var context = new GoToDefinitionContext(
document,
position,
cancellationToken: cancellationToken);
await service.GetDefinitionsAsync(context).ConfigureAwait(false);
if (!context.Items.TryGetValue(WellKnownDefinitionTypes.Definition, out var definitions))
{
return null;
}
var span = context.Span;
var snapshotSpan = new SnapshotSpan(snapshot, span.Start, span.Length);
return new NavigableSymbol(definitions.ToImmutableArray(), snapshotSpan, document, _presenters, _waitIndicator);
}
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.Editor.Shared.Extensions;
using Microsoft.VisualStudio.Language.Intellisense;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.Utilities;
namespace Microsoft.CodeAnalysis.Editor.NavigableSymbols
{
[Export(typeof(INavigableSymbolSourceProvider))]
[Name(nameof(NavigableSymbolService))]
[ContentType(ContentTypeNames.RoslynContentType)]
internal partial class NavigableSymbolService : INavigableSymbolSourceProvider
{
private static readonly object s_key = new object();
private readonly IEnumerable<Lazy<IStreamingFindUsagesPresenter>> _streamingPresenters;
private readonly IWaitIndicator _waitIndicator;
[ImportingConstructor]
public NavigableSymbolService(
IWaitIndicator waitIndicator,
[ImportMany] IEnumerable<Lazy<IStreamingFindUsagesPresenter>> streamingPresenters)
{
_waitIndicator = waitIndicator;
_streamingPresenters = streamingPresenters;
}
public INavigableSymbolSource TryCreateNavigableSymbolSource(ITextView textView, ITextBuffer buffer)
{
return textView.GetOrCreatePerSubjectBufferProperty(buffer, s_key,
(v, b) => new NavigableSymbolSource(_streamingPresenters, _waitIndicator));
}
}
}
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports System
Imports System.Linq
Imports System.Threading
Imports System.Threading.Tasks
Imports Microsoft.CodeAnalysis.Editor.Host
Imports Microsoft.CodeAnalysis.Editor.NavigableSymbols
Imports Microsoft.CodeAnalysis.Editor.UnitTests.BraceMatching
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Utilities
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Utilities.GoToHelpers
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
Imports Microsoft.CodeAnalysis.Navigation
Imports Microsoft.VisualStudio.Composition
Imports Microsoft.VisualStudio.Text
Imports Roslyn.Test.Utilities
Imports Xunit
Namespace Microsoft.CodeAnalysis.Editor.UnitTests.NavigableSymbols
Public Class NavigableSymbolsTest
Private Shared ReadOnly s_exportProvider As ExportProvider = MinimalTestExportProvider.CreateExportProvider(
TestExportProvider.EntireAssemblyCatalogWithCSharpAndVisualBasic.WithParts(
GetType(MockDocumentNavigationServiceProvider),
GetType(MockSymbolNavigationServiceProvider)))
<WpfFact>
Public Async Function TestCharp() As Task
Using workspace = TestWorkspace.CreateCSharp("
class C
{
C$$ c
}", exportProvider:=s_exportProvider)
Await TestNavigated(workspace)
End Using
End Function
<WpfFact>
Public Async Function TestVB() As Task
Using workspace = TestWorkspace.CreateVisualBasic("
Class C
Dim c as C$$
End Class", exportProvider:=s_exportProvider)
Await TestNavigated(workspace)
End Using
End Function
Private Async Function TestNavigated(workspace As TestWorkspace) As Task
Dim presenter = {New Lazy(Of IStreamingFindUsagesPresenter)(Function() New MockStreamingFindUsagesPresenter(Sub() Return))}
Dim service = New NavigableSymbolService(TestWaitIndicator.Default, presenter)
Dim view = workspace.Documents.First().GetTextView()
Dim Buffer = workspace.Documents.First().GetTextBuffer()
Dim caretPosition = view.Caret.Position.BufferPosition.Position
Dim Span = New SnapshotSpan(Buffer.CurrentSnapshot, New Span(caretPosition, 0))
Dim source = service.TryCreateNavigableSymbolSource(view, Buffer)
Dim symbol = Await source.GetNavigableSymbolAsync(Span, CancellationToken.None)
Assert.NotNull(symbol)
symbol.Navigate(symbol.Relationships.First())
Dim navigationService = DirectCast(workspace.Services.GetService(Of IDocumentNavigationService)(), MockDocumentNavigationServiceProvider.MockDocumentNavigationService)
Assert.Equal(True, navigationService.TryNavigateToLineAndOffsetReturnValue)
Assert.Equal(True, navigationService.TryNavigateToPositionReturnValue)
Assert.Equal(True, navigationService.TryNavigateToSpanReturnValue)
End Function
End Class
End Namespace
......@@ -17,9 +17,8 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.Utilities.GoToHelpers
Public ReadOnly Catalog As ComposableCatalog = TestExportProvider.MinimumCatalogWithCSharpAndVisualBasic.WithParts(
GetType(MockDocumentNavigationServiceFactory),
GetType(DefaultSymbolNavigationServiceFactory),
GetType(GeneratedCodeRecognitionService),
GetType(CSharpGoToDefinitionSymbolService),
GetType(VisualBasicGoToDefinitionSymbolService))
GetType(VisualBasicGoToDefinitionSymbolService),
GetType(CSharpGeneratedCodeRecognitionService),
GetType(VisualBasicGeneratedCodeRecognitionService))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册