From 5fac1bc989e173eccb4505de76d3ad303b48c62e Mon Sep 17 00:00:00 2001 From: Paul Harrington Date: Thu, 12 Feb 2015 10:37:38 -0800 Subject: [PATCH 1/8] Cache XML Doc Comment Fragment Cache the result of the most recent call to DocumentationComment.FromXmlFragment. --- .../Shared/Utilities/DocumentationComment.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Workspaces/Core/Portable/Shared/Utilities/DocumentationComment.cs b/src/Workspaces/Core/Portable/Shared/Utilities/DocumentationComment.cs index 1258a506c4370..1c33bf3eb3c60 100644 --- a/src/Workspaces/Core/Portable/Shared/Utilities/DocumentationComment.cs +++ b/src/Workspaces/Core/Portable/Shared/Utilities/DocumentationComment.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; +using System.Threading; using System.Xml; using XmlNames = Roslyn.Utilities.DocumentationCommentXmlNames; @@ -71,6 +72,11 @@ private DocumentationComment() ExceptionTypes = ImmutableArray.Empty; } + /// + /// Cache of the most recently parsed fragment and the resulting DocumentationComment + /// + private static volatile DocumentationComment s_cacheLastXmlFragmentParse; + /// /// Parses and constructs a from the given fragment of XML. /// @@ -78,7 +84,15 @@ private DocumentationComment() /// A DocumentationComment instance. public static DocumentationComment FromXmlFragment(string xml) { - return CommentBuilder.Parse(xml); + var result = s_cacheLastXmlFragmentParse; + if (result == null || result.FullXmlFragment != xml) + { + // Cache miss + result = CommentBuilder.Parse(xml); + s_cacheLastXmlFragmentParse = result; + } + + return result; } /// From e670b54f897c216bc28b993913f5792da129c711 Mon Sep 17 00:00:00 2001 From: Paul Harrington Date: Thu, 12 Feb 2015 15:20:57 -0800 Subject: [PATCH 2/8] CompletionList short cut Avoid parsing XML to determine completion list type if the text doesn't contain the word "completionlist" --- .../EnumAndCompletionListTagCompletionProvider.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Features/CSharp/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProvider.cs b/src/Features/CSharp/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProvider.cs index 8dcef4a52702f..e178913746268 100644 --- a/src/Features/CSharp/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProvider.cs +++ b/src/Features/CSharp/Completion/CompletionProviders/EnumAndCompletionListTagCompletionProvider.cs @@ -121,7 +121,14 @@ protected override async Task> GetItemsWorkerAsync( private INamedTypeSymbol GetCompletionListType(ITypeSymbol type, INamedTypeSymbol within, Compilation compilation) { - var documentation = type.GetDocumentationComment(); + // PERF: Avoid parsing XML unless the text contains the word "completionlist". + string xmlText = type.GetDocumentationCommentXml(); + if (xmlText == null || !xmlText.Contains(DocumentationCommentXmlNames.CompletionListElementName)) + { + return null; + } + + var documentation = Shared.Utilities.DocumentationComment.FromXmlFragment(xmlText); var completionListType = documentation.CompletionListCref != null ? DocumentationCommentId.GetSymbolsForDeclarationId(documentation.CompletionListCref, compilation).OfType().FirstOrDefault() From 7ea0e248bd5a0d1321dd4094a7a4d878b6feb5b6 Mon Sep 17 00:00:00 2001 From: Paul Harrington Date: Thu, 12 Feb 2015 15:21:47 -0800 Subject: [PATCH 3/8] Lazy signature help Realize the Documentation for signature help items lazily. --- .../SignatureHelp/SignatureHelpItem.cs | 21 +-- .../SignatureHelp/SignatureHelpParameter.cs | 19 ++- .../AbstractSignatureHelpProvider.cs | 2 +- .../Controller.Session_UpdateModel.cs | 4 +- .../SignatureHelp/Presentation/Signature.cs | 155 +++++++++++------- ...Presenter.SignatureHelpPresenterSession.cs | 29 +--- .../AbstractSignatureHelpProviderTests.cs | 8 +- .../Shared/Extensions/ISymbolExtensions_2.cs | 13 +- 8 files changed, 143 insertions(+), 108 deletions(-) diff --git a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs index 1f2119ef19b7e..51ee2b3515313 100644 --- a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs +++ b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using Microsoft.CodeAnalysis; using Roslyn.Utilities; @@ -16,21 +17,21 @@ internal class SignatureHelpItem /// selected parameter index strictly goes past the number of defined parameters for this /// item. /// - public bool IsVariadic { get; private set; } + public bool IsVariadic { get; } - public IList PrefixDisplayParts { get; private set; } - public IList SuffixDisplayParts { get; private set; } + public ImmutableArray PrefixDisplayParts { get; } + public ImmutableArray SuffixDisplayParts { get; } - // TODO(cyrusn): This probably won't be sufficient for VB query signature help. It has + // TODO: This probably won't be sufficient for VB query signature help. It has // arbitrary separators between parameters. - public IList SeparatorDisplayParts { get; private set; } + public ImmutableArray SeparatorDisplayParts { get; } - public IList Parameters { get; private set; } + public ImmutableArray Parameters { get; } - public IList DescriptionParts { get; internal set; } + public ImmutableArray DescriptionParts { get; internal set; } - // TODO(cyrusn): This may be unnecessary. How would a user ever see this. - public IList Documentation { get; set; } + // Note: IEnumerable instead of ImmutableArray because we want lazy evaluation. + public IEnumerable Documentation { get; } public SignatureHelpItem( bool isVariadic, @@ -47,7 +48,7 @@ public SignatureHelpItem( } this.IsVariadic = isVariadic; - this.Documentation = documentation.ToImmutableArrayOrEmpty(); + this.Documentation = documentation ?? SpecializedCollections.EmptyEnumerable(); this.PrefixDisplayParts = prefixParts.ToImmutableArrayOrEmpty(); this.SeparatorDisplayParts = separatorParts.ToImmutableArrayOrEmpty(); this.SuffixDisplayParts = suffixParts.ToImmutableArrayOrEmpty(); diff --git a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs index 97f779f4f79ea..37734f7725889 100644 --- a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs +++ b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs @@ -13,41 +13,44 @@ internal class SignatureHelpParameter /// /// The name of this parameter. /// - public string Name { get; private set; } + public string Name { get; } /// /// Documentation for this parameter. This should normally be presented to the user when /// this parameter is selected. /// - public IList Documentation { get; private set; } + /// + /// Note that this is an IEnumerable, not an IList because we want lazy evaluation. + /// + public IEnumerable Documentation { get; } /// /// Display parts to show before the normal display parts for the parameter. /// - public IList PrefixDisplayParts { get; private set; } + public IList PrefixDisplayParts { get; } /// /// Display parts to show after the normal display parts for the parameter. /// - public IList SuffixDisplayParts { get; private set; } + public IList SuffixDisplayParts { get; } /// /// Display parts for this parameter. This should normally be presented to the user as part /// of the entire signature display. /// - public IList DisplayParts { get; private set; } + public IList DisplayParts { get; } /// /// True if this parameter is optional or not. Optional parameters may be presented in a /// different manner to users. /// - public bool IsOptional { get; private set; } + public bool IsOptional { get; } /// /// Display parts for this parameter that should be presented to the user when this /// parameter is selected. /// - public IList SelectedDisplayParts { get; private set; } + public IList SelectedDisplayParts { get; } public SignatureHelpParameter( string name, @@ -60,7 +63,7 @@ public SignatureHelpParameter( { this.Name = name ?? string.Empty; this.IsOptional = isOptional; - this.Documentation = documentation.ToImmutableArrayOrEmpty(); + this.Documentation = documentation; this.DisplayParts = displayParts.ToImmutableArrayOrEmpty(); this.PrefixDisplayParts = prefixDisplayParts.ToImmutableArrayOrEmpty(); this.SuffixDisplayParts = suffixDisplayParts.ToImmutableArrayOrEmpty(); diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs index 0c933caea15bd..c5900db8a5f9b 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs @@ -256,7 +256,7 @@ private SignatureHelpItem UpdateItem(SignatureHelpItem item, SupportedPlatformDa ? item.DescriptionParts.Concat(startingNewLine.Concat(platformParts)) : startingNewLine.Concat(platformParts); - item.DescriptionParts = updatedDescription.ToList(); + item.DescriptionParts = updatedDescription.ToImmutableArrayOrEmpty(); return item; } diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Controller.Session_UpdateModel.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Controller.Session_UpdateModel.cs index 094b7adc7b39d..796549ea67f82 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Controller.Session_UpdateModel.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Controller.Session_UpdateModel.cs @@ -95,7 +95,7 @@ private static SignatureHelpItem GetBestItem( // If we don't have an item that can take that number of parameters, then just pick // the last item. Or stick with the current item if the last item isn't any better. var lastItem = filteredItems.Last(); - if (currentItem.IsVariadic || currentItem.Parameters.Count == lastItem.Parameters.Count) + if (currentItem.IsVariadic || currentItem.Parameters.Length == lastItem.Parameters.Length) { return currentItem; } @@ -117,7 +117,7 @@ private static bool IsApplicable(SignatureHelpItem item, int argumentCount, stri // parameter index. i.e. if it has 2 parameters and we're at index 0 or 1 then it's // applicable. However, if it has 2 parameters and we're at index 2, then it's not // applicable. - if (item.Parameters.Count >= argumentCount) + if (item.Parameters.Length >= argumentCount) { return true; } diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs index 1b972480d6891..4e5b369dfaf3f 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs @@ -1,6 +1,7 @@ // 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.Linq; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; @@ -16,26 +17,99 @@ internal class Signature : ISignature private const int MaxParamColumnCount = 100; private readonly SignatureHelpItem _signatureHelpItem; - private IParameter _currentParameter; - internal IList DisplayParts { get; private set; } + + public Signature(ITrackingSpan applicableToSpan, SignatureHelpItem signatureHelpItem, int selectedParameterIndex) + { + this.ApplicableToSpan = applicableToSpan; + _signatureHelpItem = signatureHelpItem; + _parameterIndex = selectedParameterIndex; + } + + private bool _isInitialized; + private void EnsureInitialized() + { + if (!_isInitialized) + { + _isInitialized = true; + Initialize(); + } + } + + private IList _displayParts; + internal IList DisplayParts + { + get + { + EnsureInitialized(); + return _displayParts; + } + } + private IList _prettyPrintedDisplayParts; - public ITrackingSpan ApplicableToSpan { get; internal set; } - public string Content { get; private set; } - public string PrettyPrintedContent { get; private set; } - public ReadOnlyCollection Parameters { get; private set; } - public string Documentation { get; private set; } + public ITrackingSpan ApplicableToSpan { get; } - public event EventHandler CurrentParameterChanged; + private string _content; + public string Content + { + get + { + EnsureInitialized(); + return _content; + } + } - public Signature(ITrackingSpan applicableToSpan, SignatureHelpItem signatureHelpItem) + private int _parameterIndex = -1; + public IParameter CurrentParameter { - this.ApplicableToSpan = applicableToSpan; - _signatureHelpItem = signatureHelpItem; - this.Initialize(setParameters: true); + get + { + EnsureInitialized(); + return _parameterIndex >= 0 && _parameters != null ? _parameters[_parameterIndex] : null; + } + } + + public string Documentation + { + get + { + return null; + } + } + + private ReadOnlyCollection _parameters; + public ReadOnlyCollection Parameters + { + get + { + EnsureInitialized(); + return _parameters; + } + } + + private string _prettyPrintedContent; + public string PrettyPrintedContent + { + get + { + EnsureInitialized(); + return _prettyPrintedContent; + } } - private void Initialize(bool setParameters) + // This event is required by the ISignature interface but it's not actually used + // (once created the CurrentParameter property cannot change) + public event EventHandler CurrentParameterChanged + { + add + { + } + remove + { + } + } + + private void Initialize() { var content = new StringBuilder(); var prettyPrintedContent = new StringBuilder(); @@ -61,7 +135,7 @@ private void Initialize(bool setParameters) var paramColumnCount = 0; - for (int i = 0; i < _signatureHelpItem.Parameters.Count; i++) + for (int i = 0; i < _signatureHelpItem.Parameters.Length; i++) { var sigHelpParameter = _signatureHelpItem.Parameters[i]; @@ -107,9 +181,9 @@ private void Initialize(bool setParameters) AddRange(_signatureHelpItem.SuffixDisplayParts, parts, prettyPrintedParts); Append(_signatureHelpItem.SuffixDisplayParts.GetFullText(), content, prettyPrintedContent); - if (_currentParameter != null) + if (_parameterIndex >= 0) { - var sigHelpParameter = _signatureHelpItem.Parameters[this.Parameters.IndexOf(_currentParameter)]; + var sigHelpParameter = _signatureHelpItem.Parameters[_parameterIndex]; AddRange(sigHelpParameter.SelectedDisplayParts, parts, prettyPrintedParts); Append(sigHelpParameter.SelectedDisplayParts.GetFullText(), content, prettyPrintedContent); @@ -118,24 +192,22 @@ private void Initialize(bool setParameters) AddRange(_signatureHelpItem.DescriptionParts, parts, prettyPrintedParts); Append(_signatureHelpItem.DescriptionParts.GetFullText(), content, prettyPrintedContent); - if (_signatureHelpItem.Documentation.Count > 0) + // Note: This is where we realize the lazy Documentation. Be careful not to do so more than once. + var documentation = _signatureHelpItem.Documentation.ToArray(); + if (documentation.Length > 0) { AddRange(new[] { newLinePart }, parts, prettyPrintedParts); Append(newLineContent, content, prettyPrintedContent); - AddRange(_signatureHelpItem.Documentation, parts, prettyPrintedParts); - Append(_signatureHelpItem.Documentation.GetFullText(), content, prettyPrintedContent); + AddRange(documentation, parts, prettyPrintedParts); + Append(documentation.GetFullText(), content, prettyPrintedContent); } - this.Content = content.ToString(); - this.PrettyPrintedContent = prettyPrintedContent.ToString(); - this.DisplayParts = parts.ToImmutableArrayOrEmpty(); - this.PrettyPrintedDisplayParts = prettyPrintedParts.ToImmutableArrayOrEmpty(); - - if (setParameters) - { - this.Parameters = parameters.ToReadOnlyCollection(); - } + _content = content.ToString(); + _prettyPrintedContent = prettyPrintedContent.ToString(); + _displayParts = parts.ToImmutableArrayOrEmpty(); + _prettyPrintedDisplayParts = prettyPrintedParts.ToImmutableArrayOrEmpty(); + _parameters = parameters.ToReadOnlyCollection(); } private void AddRange(IList values, List parts, List prettyPrintedParts) @@ -164,33 +236,6 @@ private IList AddOptionalBrackets(bool isOptional, IList PrettyPrintedDisplayParts { get diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/SignatureHelpPresenter.SignatureHelpPresenterSession.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/SignatureHelpPresenter.SignatureHelpPresenterSession.cs index 61ae79f84b042..9075ebf25ad1f 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/SignatureHelpPresenter.SignatureHelpPresenterSession.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/SignatureHelpPresenter.SignatureHelpPresenterSession.cs @@ -116,45 +116,30 @@ private void CreateSignatures( foreach (var item in _signatureHelpItems) { - _signatureMap = _signatureMap.Add(item, new Signature(triggerSpan, item)); - } - - this.SetCurrentParameterForAllItems(selectedParameter); - } - - private void SetCurrentParameterForAllItems(int? selectedParameter) - { - foreach (var item in _signatureHelpItems) - { - this.SetCurrentParameter(item, selectedParameter); + _signatureMap = _signatureMap.Add(item, new Signature(triggerSpan, item, GetParameterIndexForItem(item, selectedParameter))); } } - private void SetCurrentParameter(SignatureHelpItem item, int? selectedParameter) + private static int GetParameterIndexForItem(SignatureHelpItem item, int? selectedParameter) { - Contract.ThrowIfFalse(_signatureMap.ContainsKey(item)); - var signature = _signatureMap.GetValueOrDefault(item); - if (selectedParameter.HasValue) { - if (selectedParameter.Value < item.Parameters.Count) + if (selectedParameter.Value < item.Parameters.Length) { // If the selected parameter is within the range of parameters of this item then set // that as the current parameter. - signature.CurrentParameter = signature.Parameters[selectedParameter.Value]; - return; + return selectedParameter.Value; } else if (item.IsVariadic) { - // It wasn't in range, but the item takes an unlmiited number of parameters. So + // It wasn't in range, but the item takes an unlimited number of parameters. So // just set current parameter to the last parameter (the variadic one). - signature.CurrentParameter = signature.Parameters.Last(); - return; + return item.Parameters.Length - 1; } } // It was out of bounds, there is no current parameter now. - signature.CurrentParameter = null; + return -1; } private void OnEditorSessionDismissed() diff --git a/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs b/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs index d9d45a4bbbaac..c16c42d4595d7 100644 --- a/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs +++ b/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs @@ -200,15 +200,17 @@ private void CompareSigHelpItemsAndCurrentPosition( int cursorPosition, TextSpan applicableSpan) { - var signature = new Signature(applicableToSpan: null, signatureHelpItem: actualSignatureHelpItem); + int currentParameterIndex = -1; if (expectedTestItem.CurrentParameterIndex != null) { - if (expectedTestItem.CurrentParameterIndex.Value >= 0 && expectedTestItem.CurrentParameterIndex.Value < signature.Parameters.Count) + if (expectedTestItem.CurrentParameterIndex.Value >= 0 && expectedTestItem.CurrentParameterIndex.Value < actualSignatureHelpItem.Parameters.Length) { - signature.CurrentParameter = signature.Parameters[expectedTestItem.CurrentParameterIndex.Value]; + currentParameterIndex = expectedTestItem.CurrentParameterIndex.Value; } } + var signature = new Signature(applicableToSpan: null, signatureHelpItem: actualSignatureHelpItem, selectedParameterIndex: currentParameterIndex); + // We're a match if the signature matches... // We're now combining the signature and documentation to make classification work. if (!string.IsNullOrEmpty(expectedTestItem.MethodDocumentation)) diff --git a/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs b/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs index d2cc1580d7714..b2caa6eef6ab4 100644 --- a/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs +++ b/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs @@ -4,8 +4,6 @@ using System.Collections.Generic; using System.Threading; using Microsoft.CodeAnalysis.DocumentationCommentFormatting; -using Microsoft.CodeAnalysis.Shared.Utilities; -using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.Shared.Extensions { @@ -170,8 +168,6 @@ public static Glyph GetGlyph(this ISymbol symbol) public static IEnumerable GetDocumentationParts(this ISymbol symbol, SemanticModel semanticModel, int position, IDocumentationCommentFormattingService formatter, CancellationToken cancellationToken) { - var globalNamespace = semanticModel.Compilation.GlobalNamespace; - var documentation = symbol.TypeSwitch( (IParameterSymbol parameter) => parameter.ContainingSymbol.OriginalDefinition.GetDocumentationComment(cancellationToken: cancellationToken).GetParameterText(symbol.Name), (ITypeParameterSymbol typeParam) => typeParam.ContainingSymbol.GetDocumentationComment(cancellationToken: cancellationToken).GetTypeParameterText(symbol.Name), @@ -181,10 +177,13 @@ public static IEnumerable GetDocumentationParts(this ISymbol if (documentation != null) { - return formatter.Format(documentation, semanticModel, position, CrefFormat); + // Note: We are using iterator syntax here instead of simply returning the result of formatter.Format + // because we want the enumeration to be evaluated lazily. + foreach (SymbolDisplayPart part in formatter.Format(documentation, semanticModel, position, CrefFormat)) + { + yield return part; + } } - - return SpecializedCollections.EmptyList(); } public static readonly SymbolDisplayFormat CrefFormat = From ebb71bf23f5e15a867aa28019f1ff972fde6664a Mon Sep 17 00:00:00 2001 From: Paul Harrington Date: Thu, 12 Feb 2015 22:21:02 -0800 Subject: [PATCH 4/8] Use a Func> to represent the 'getter' for Documentation in SignatureHelp and thread that through the entire sig-help implementation. --- .../AbstractCSharpSignatureHelpProvider.cs | 2 +- .../AttributeSignatureHelpProvider.cs | 6 +++-- ...tructorInitializerSignatureHelpProvider.cs | 2 +- ...ntAccessExpressionSignatureHelpProvider.cs | 2 +- .../GenericNameSignatureHelpProvider.cs | 6 ++--- ...ionSignatureHelpProvider_DelegateInvoke.cs | 5 ++-- ...essionSignatureHelpProvider_MethodGroup.cs | 2 +- ...ssionSignatureHelpProvider_DelegateType.cs | 4 +-- ...ressionSignatureHelpProvider_NormalType.cs | 2 +- .../SignatureHelp/SignatureHelpItem.cs | 10 ++++--- .../SignatureHelp/SignatureHelpParameter.cs | 14 +++++----- ...HelpProvider.SymbolKeySignatureHelpItem.cs | 8 +++--- .../AbstractSignatureHelpProvider.cs | 12 ++++----- .../SignatureHelp/Presentation/Parameter.cs | 26 ++++++++++++------- .../SignatureHelp/Presentation/Signature.cs | 6 ++--- .../AbstractSignatureHelpProviderTests.cs | 2 +- .../SignatureHelpControllerTests.vb | 2 +- .../Test2/IntelliSense/TestState.vb | 3 ++- ...tIntrinsicOperatorSignatureHelpProvider.vb | 5 ++-- .../AbstractSignatureHelpProvider.vb | 2 +- .../AttributeSignatureHelpProvider.vb | 4 +-- ...unctionAggregationSignatureHelpProvider.vb | 4 +-- .../GenericNameSignatureHelpProvider.vb | 6 ++--- ...ionSignatureHelpProvider.DelegateInvoke.vb | 5 ++-- ...sionSignatureHelpProvider.ElementAccess.vb | 2 +- ...essionSignatureHelpProvider.MemberGroup.vb | 2 +- ...ssionSignatureHelpProvider.DelegateType.vb | 4 +-- ...ressionSignatureHelpProvider.NormalType.vb | 2 +- ...aiseEventStatementSignatureHelpProvider.vb | 2 +- .../Shared/Extensions/ISymbolExtensions_2.cs | 18 ++++++------- .../Test/DebuggerIntelliSense/TestState.vb | 5 ++-- 31 files changed, 94 insertions(+), 81 deletions(-) diff --git a/src/EditorFeatures/CSharp/SignatureHelp/AbstractCSharpSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/AbstractCSharpSignatureHelpProvider.cs index e27c9658742c9..6235775a79204 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/AbstractCSharpSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/AbstractCSharpSignatureHelpProvider.cs @@ -61,7 +61,7 @@ protected static SignatureHelpParameter Convert( return new SignatureHelpParameter( parameter.Name, parameter.IsOptional, - parameter.GetDocumentationParts(semanticModel, position, formatter, cancellationToken), + parameter.GetDocumentationPartsGetter(semanticModel, position, formatter), parameter.ToMinimalDisplayParts(semanticModel, position)); } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs index 5a4d8e0412ec0..2a0f36291b2ad 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs @@ -135,7 +135,7 @@ private SignatureHelpItem Convert( constructor, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic, - constructor.GetDocumentationParts(semanticModel, position, documentationCommentFormatter, cancellationToken), + constructor.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormatter), GetPreambleParts(constructor, semanticModel, position), GetSeparatorParts(), GetPostambleParts(constructor), @@ -158,6 +158,8 @@ private IEnumerable GetParameters( for (int i = 0; i < namedParameters.Count; i++) { + cancellationToken.ThrowIfCancellationRequested(); + var namedParameter = namedParameters[i]; var type = namedParameter is IFieldSymbol ? ((IFieldSymbol)namedParameter).Type : ((IPropertySymbol)namedParameter).Type; @@ -175,7 +177,7 @@ private IEnumerable GetParameters( yield return new SignatureHelpParameter( namedParameter.Name, isOptional: true, - documentation: namedParameter.GetDocumentationParts(semanticModel, position, documentationCommentFormatter, cancellationToken), + documentationGetter: namedParameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormatter), displayParts: displayParts, prefixDisplayParts: GetParameterPrefixDisplayParts(i)); } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/ConstructorInitializerSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/ConstructorInitializerSignatureHelpProvider.cs index 8f3990bf56cb8..25c6c7ecffa96 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/ConstructorInitializerSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/ConstructorInitializerSignatureHelpProvider.cs @@ -135,7 +135,7 @@ private SignatureHelpItem Convert( constructor, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, constructor.IsParams(), - constructor.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + constructor.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(constructor, semanticModel, position), GetSeparatorParts(), GetPostambleParts(constructor), diff --git a/src/EditorFeatures/CSharp/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs index a9f21faee110a..a8c3b45efb2bd 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs @@ -200,7 +200,7 @@ private SignatureHelpItem Convert( var item = CreateItem(indexer, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, indexer.IsParams(), - indexer.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + indexer.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(indexer, position, semanticModel), GetSeparatorParts(), GetPostambleParts(indexer), diff --git a/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs index 73601f6177f7e..1c5ac6d245495 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs @@ -183,7 +183,7 @@ private SignatureHelpItem Convert( symbol, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, false, - symbol.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + symbol.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(namedType, semanticModel, position), GetSeparatorParts(), GetPostambleParts(namedType), @@ -196,7 +196,7 @@ private SignatureHelpItem Convert( symbol, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, false, - symbol.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken).Concat(GetAwaitableUsage(method, semanticModel, position)), + c => symbol.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, c).Concat(GetAwaitableUsage(method, semanticModel, position)), GetPreambleParts(method, semanticModel, position), GetSeparatorParts(), GetPostambleParts(method, semanticModel, position), @@ -220,7 +220,7 @@ private SignatureHelpParameter Convert( return new SignatureHelpParameter( parameter.Name, isOptional: false, - documentation: parameter.GetDocumentationParts(semanticModel, position, formatter, cancellationToken), + documentationGetter: parameter.GetDocumentationPartsGetter(semanticModel, position, formatter), displayParts: parameter.ToMinimalDisplayParts(semanticModel, position, s_minimallyQualifiedFormat), selectedDisplayParts: GetSelectedDisplayParts(parameter, semanticModel, position, cancellationToken)); } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs b/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs index d27292b911040..a802bd1c648a5 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs @@ -37,7 +37,7 @@ private IEnumerable GetDelegateInvokeItems( invokeMethod, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic: invokeMethod.IsParams(), - documentation: SpecializedCollections.EmptyEnumerable(), + documentationGetter: null, prefixParts: GetDelegateInvokePreambleParts(invokeMethod, semanticModel, position), separatorParts: GetSeparatorParts(), suffixParts: GetDelegateInvokePostambleParts(), @@ -62,10 +62,11 @@ private IEnumerable GetDelegateInvokeParameters( { foreach (var parameter in invokeMethod.Parameters) { + cancellationToken.ThrowIfCancellationRequested(); yield return new SignatureHelpParameter( parameter.Name, parameter.IsOptional, - parameter.GetDocumentationParts(semanticModel, position, formattingService, cancellationToken), + parameter.GetDocumentationPartsGetter(semanticModel, position, formattingService), parameter.ToMinimalDisplayParts(semanticModel, position)); } } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_MethodGroup.cs b/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_MethodGroup.cs index e279e20ee871d..ace33c3afa21e 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_MethodGroup.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_MethodGroup.cs @@ -108,7 +108,7 @@ private SignatureHelpItem ConvertMethodGroupMethod( method, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, method.IsParams(), - method.OriginalDefinition.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken).Concat(GetAwaitableUsage(method, semanticModel, position)), + c => method.OriginalDefinition.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, c).Concat(GetAwaitableUsage(method, semanticModel, position)), GetMethodGroupPreambleParts(method, semanticModel, position), GetSeparatorParts(), GetMethodGroupPostambleParts(method), diff --git a/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_DelegateType.cs b/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_DelegateType.cs index 86d624cba9c77..9373b45d95eab 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_DelegateType.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_DelegateType.cs @@ -32,7 +32,7 @@ private IEnumerable GetDelegateTypeConstructors( invokeMethod, semanticModel, position, symbolDisplayService, anonymousTypeDispalyService, isVariadic: false, - documentation: SpecializedCollections.EmptyEnumerable(), + documentationGetter: null, prefixParts: GetDelegateTypePreambleParts(invokeMethod, semanticModel, position), separatorParts: GetSeparatorParts(), suffixParts: GetDelegateTypePostambleParts(invokeMethod), @@ -80,7 +80,7 @@ private IEnumerable GetDelegateTypeParameters(IMethodSym yield return new SignatureHelpParameter( TargetName, isOptional: false, - documentation: SpecializedCollections.EmptyEnumerable(), + documentationGetter: null, displayParts: parts); } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_NormalType.cs b/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_NormalType.cs index c473c82cb2ae1..8ce8df93c06c4 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_NormalType.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_NormalType.cs @@ -56,7 +56,7 @@ private SignatureHelpItem ConvertNormalTypeConstructor( constructor, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, constructor.IsParams(), - constructor.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + constructor.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetNormalTypePreambleParts(constructor, semanticModel, position), GetSeparatorParts(), GetNormalTypePostambleParts(constructor), diff --git a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs index 51ee2b3515313..9c2673d09bd9d 100644 --- a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs +++ b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; +using System.Threading; using Microsoft.CodeAnalysis; using Roslyn.Utilities; @@ -30,12 +31,13 @@ internal class SignatureHelpItem public ImmutableArray DescriptionParts { get; internal set; } - // Note: IEnumerable instead of ImmutableArray because we want lazy evaluation. - public IEnumerable Documentation { get; } + public Func> DocumentationGetter { get; } + + private static readonly Func> s_emptyDocumentationGetter = _ => SpecializedCollections.EmptyEnumerable(); public SignatureHelpItem( bool isVariadic, - IEnumerable documentation, + Func> documentationGetter, IEnumerable prefixParts, IEnumerable separatorParts, IEnumerable suffixParts, @@ -48,7 +50,7 @@ public SignatureHelpItem( } this.IsVariadic = isVariadic; - this.Documentation = documentation ?? SpecializedCollections.EmptyEnumerable(); + this.DocumentationGetter = documentationGetter ?? s_emptyDocumentationGetter; this.PrefixDisplayParts = prefixParts.ToImmutableArrayOrEmpty(); this.SeparatorDisplayParts = separatorParts.ToImmutableArrayOrEmpty(); this.SuffixDisplayParts = suffixParts.ToImmutableArrayOrEmpty(); diff --git a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs index 37734f7725889..4705b51adc3a0 100644 --- a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs +++ b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs @@ -1,9 +1,10 @@ // 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.Linq; +using System.Threading; using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.Shared.Extensions; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.Editor @@ -19,10 +20,7 @@ internal class SignatureHelpParameter /// Documentation for this parameter. This should normally be presented to the user when /// this parameter is selected. /// - /// - /// Note that this is an IEnumerable, not an IList because we want lazy evaluation. - /// - public IEnumerable Documentation { get; } + public Func> DocumentationGetter { get; } /// /// Display parts to show before the normal display parts for the parameter. @@ -52,10 +50,12 @@ internal class SignatureHelpParameter /// public IList SelectedDisplayParts { get; } + private static readonly Func> s_emptyDocumentationGetter = _ => SpecializedCollections.EmptyEnumerable(); + public SignatureHelpParameter( string name, bool isOptional, - IEnumerable documentation, + Func> documentationGetter, IEnumerable displayParts, IEnumerable prefixDisplayParts = null, IEnumerable suffixDisplayParts = null, @@ -63,7 +63,7 @@ public SignatureHelpParameter( { this.Name = name ?? string.Empty; this.IsOptional = isOptional; - this.Documentation = documentation; + this.DocumentationGetter = documentationGetter ?? s_emptyDocumentationGetter; this.DisplayParts = displayParts.ToImmutableArrayOrEmpty(); this.PrefixDisplayParts = prefixDisplayParts.ToImmutableArrayOrEmpty(); this.SuffixDisplayParts = suffixDisplayParts.ToImmutableArrayOrEmpty(); diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs index 886a9360bd546..0111a9467c68e 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs @@ -2,9 +2,7 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Threading; namespace Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.SignatureHelp { @@ -17,12 +15,12 @@ internal class SymbolKeySignatureHelpItem : SignatureHelpItem, IEquatable documentation, + Func> documentationGetter, IEnumerable prefixParts, IEnumerable separatorParts, IEnumerable suffixParts, IEnumerable parameters, - IEnumerable descriptionParts) : base(isVariadic, documentation, prefixParts, separatorParts, suffixParts, parameters, descriptionParts) + IEnumerable descriptionParts) : base(isVariadic, documentationGetter, prefixParts, separatorParts, suffixParts, parameters, descriptionParts) { this.SymbolKey = symbol == null ? null : symbol.GetSymbolKey(); } diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs index c5900db8a5f9b..e309d787860a8 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs @@ -75,7 +75,7 @@ protected SignatureHelpItem CreateItem( ISymbolDisplayService symbolDisplayService, IAnonymousTypeDisplayService anonymousTypeDisplayService, bool isVariadic, - IEnumerable documentation, + Func> documentationGetter, IEnumerable prefixParts, IEnumerable separatorParts, IEnumerable suffixParts, @@ -83,7 +83,7 @@ protected SignatureHelpItem CreateItem( IEnumerable descriptionParts = null) { var item = new SymbolKeySignatureHelpItem( - orderSymbol, isVariadic, documentation, prefixParts, separatorParts, + orderSymbol, isVariadic, documentationGetter, prefixParts, separatorParts, suffixParts, parameters, descriptionParts); return FixAnonymousTypeParts(orderSymbol, item, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService); @@ -93,7 +93,7 @@ private SignatureHelpItem FixAnonymousTypeParts( ISymbol orderSymbol, SignatureHelpItem item, SemanticModel semanticModel, int position, ISymbolDisplayService symbolDisplayService, IAnonymousTypeDisplayService anonymousTypeDisplayService) { var currentItem = new SymbolKeySignatureHelpItem( - orderSymbol, item.IsVariadic, item.Documentation, + orderSymbol, item.IsVariadic, item.DocumentationGetter, anonymousTypeDisplayService.InlineDelegateAnonymousTypes(item.PrefixDisplayParts, semanticModel, position, symbolDisplayService), anonymousTypeDisplayService.InlineDelegateAnonymousTypes(item.SeparatorDisplayParts, semanticModel, position, symbolDisplayService), anonymousTypeDisplayService.InlineDelegateAnonymousTypes(item.SuffixDisplayParts, semanticModel, position, symbolDisplayService), @@ -120,7 +120,7 @@ where part.Symbol.IsNormalAnonymousType() currentItem = new SymbolKeySignatureHelpItem( orderSymbol, currentItem.IsVariadic, - currentItem.Documentation, + currentItem.DocumentationGetter, info.ReplaceAnonymousTypes(currentItem.PrefixDisplayParts), info.ReplaceAnonymousTypes(currentItem.SeparatorDisplayParts), info.ReplaceAnonymousTypes(currentItem.SuffixDisplayParts), @@ -138,7 +138,7 @@ private SignatureHelpParameter ReplaceAnonymousTypes( return new SignatureHelpParameter( parameter.Name, parameter.IsOptional, - parameter.Documentation, + parameter.DocumentationGetter, info.ReplaceAnonymousTypes(parameter.DisplayParts), info.ReplaceAnonymousTypes(parameter.SelectedDisplayParts)); } @@ -153,7 +153,7 @@ private SignatureHelpParameter InlineDelegateAnonymousTypes( return new SignatureHelpParameter( parameter.Name, parameter.IsOptional, - parameter.Documentation, + parameter.DocumentationGetter, anonymousTypeDisplayService.InlineDelegateAnonymousTypes(parameter.DisplayParts, semanticModel, position, symbolDisplayService), anonymousTypeDisplayService.InlineDelegateAnonymousTypes(parameter.PrefixDisplayParts, semanticModel, position, symbolDisplayService), anonymousTypeDisplayService.InlineDelegateAnonymousTypes(parameter.SuffixDisplayParts, semanticModel, position, symbolDisplayService), diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Parameter.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Parameter.cs index 9eff8b3c08a0f..7440a69388121 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Parameter.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Parameter.cs @@ -1,5 +1,6 @@ // 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.Threading; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.VisualStudio.Language.Intellisense; using Microsoft.VisualStudio.Text; @@ -8,11 +9,17 @@ namespace Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.SignatureHel { internal class Parameter : IParameter { - public string Documentation { get; internal set; } - public string Name { get; internal set; } - public Span Locus { get; internal set; } - public Span PrettyPrintedLocus { get; internal set; } - public ISignature Signature { get; internal set; } + private readonly SignatureHelpParameter _parameter; + private string _documentation; + private readonly int _contentLength; + private readonly int _index; + private readonly int _prettyPrintedIndex; + + public string Documentation => _documentation ?? (_documentation = _parameter.DocumentationGetter(CancellationToken.None).GetFullText()); + public string Name => _parameter.Name; + public Span Locus => new Span(_index, _contentLength); + public Span PrettyPrintedLocus => new Span(_prettyPrintedIndex, _contentLength); + public ISignature Signature { get; } public Parameter( Signature signature, @@ -21,12 +28,11 @@ public Parameter( int index, int prettyPrintedIndex) { + _parameter = parameter; this.Signature = signature; - this.Name = parameter.Name; - this.Documentation = parameter.Documentation.GetFullText(); - - this.Locus = new Span(index, content.Length); - this.PrettyPrintedLocus = new Span(prettyPrintedIndex, content.Length); + _contentLength = content.Length; + _index = index; + _prettyPrintedIndex = prettyPrintedIndex; } } } diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs index 4e5b369dfaf3f..64b557dd4cd04 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs @@ -9,6 +9,7 @@ using Microsoft.VisualStudio.Language.Intellisense; using Microsoft.VisualStudio.Text; using Roslyn.Utilities; +using System.Threading; namespace Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.SignatureHelp.Presentation { @@ -192,9 +193,8 @@ private void Initialize() AddRange(_signatureHelpItem.DescriptionParts, parts, prettyPrintedParts); Append(_signatureHelpItem.DescriptionParts.GetFullText(), content, prettyPrintedContent); - // Note: This is where we realize the lazy Documentation. Be careful not to do so more than once. - var documentation = _signatureHelpItem.Documentation.ToArray(); - if (documentation.Length > 0) + var documentation = _signatureHelpItem.DocumentationGetter(CancellationToken.None).ToList(); + if (documentation.Count > 0) { AddRange(new[] { newLinePart }, parts, prettyPrintedParts); Append(newLineContent, content, prettyPrintedContent); diff --git a/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs b/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs index c16c42d4595d7..a19e4f94df6af 100644 --- a/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs +++ b/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs @@ -229,7 +229,7 @@ private void CompareSigHelpItemsAndCurrentPosition( if (expectedTestItem.MethodDocumentation != null) { - Assert.Equal(expectedTestItem.MethodDocumentation, actualSignatureHelpItem.Documentation.GetFullText()); + Assert.Equal(expectedTestItem.MethodDocumentation, actualSignatureHelpItem.DocumentationGetter(CancellationToken.None).GetFullText()); } if (expectedTestItem.ParameterDocumentation != null) diff --git a/src/EditorFeatures/Test2/IntelliSense/SignatureHelpControllerTests.vb b/src/EditorFeatures/Test2/IntelliSense/SignatureHelpControllerTests.vb index 280092bea9d0f..0321d29eaacbe 100644 --- a/src/EditorFeatures/Test2/IntelliSense/SignatureHelpControllerTests.vb +++ b/src/EditorFeatures/Test2/IntelliSense/SignatureHelpControllerTests.vb @@ -205,7 +205,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense End Function Private Shared Function CreateItems(count As Integer) As IList(Of SignatureHelpItem) - Return Enumerable.Range(0, count).Select(Function(i) New SignatureHelpItem(isVariadic:=False, documentation:={}, prefixParts:={}, separatorParts:={}, suffixParts:={}, parameters:={}, descriptionParts:={})).ToList() + Return Enumerable.Range(0, count).Select(Function(i) New SignatureHelpItem(isVariadic:=False, documentationGetter:=Nothing, prefixParts:={}, separatorParts:={}, suffixParts:={}, parameters:={}, descriptionParts:={})).ToList() End Function Friend Class MockSignatureHelpProvider diff --git a/src/EditorFeatures/Test2/IntelliSense/TestState.vb b/src/EditorFeatures/Test2/IntelliSense/TestState.vb index ae8e432aed388..32a97b6dca621 100644 --- a/src/EditorFeatures/Test2/IntelliSense/TestState.vb +++ b/src/EditorFeatures/Test2/IntelliSense/TestState.vb @@ -2,6 +2,7 @@ Imports System.ComponentModel.Composition.Hosting Imports System.ComponentModel.Composition.Primitives +Imports System.Threading Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.Completion Imports Microsoft.CodeAnalysis.Completion.Providers @@ -388,7 +389,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense End If If documentation IsNot Nothing Then - Assert.Equal(documentation, Me.CurrentSignatureHelpPresenterSession.SelectedItem.Documentation.GetFullText()) + Assert.Equal(documentation, Me.CurrentSignatureHelpPresenterSession.SelectedItem.DocumentationGetter(CancellationToken.None).GetFullText()) End If If selectedParameter IsNot Nothing Then diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractIntrinsicOperatorSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractIntrinsicOperatorSignatureHelpProvider.vb index ebdb39e8bbebf..b0d0f2d124a18 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractIntrinsicOperatorSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractIntrinsicOperatorSignatureHelpProvider.vb @@ -55,11 +55,12 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Dim parameters As New List(Of SignatureHelpParameter) For i = 0 To documentation.ParameterCount - 1 + Dim capturedIndex = i parameters.Add( New SignatureHelpParameter( name:=documentation.GetParameterName(i), isOptional:=False, - documentation:=documentation.GetParameterDocumentation(i).ToSymbolDisplayParts(), + documentationGetter:=Function(c As CancellationToken) documentation.GetParameterDocumentation(capturedIndex).ToSymbolDisplayParts(), displayParts:=documentation.GetParameterDisplayParts(i))) Next @@ -72,7 +73,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Nothing, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic:=False, - documentation:=SpecializedCollections.SingletonEnumerable(New SymbolDisplayPart(SymbolDisplayPartKind.Text, Nothing, documentation.DocumentationText)), + documentationGetter:=Function(c As CancellationToken) SpecializedCollections.SingletonEnumerable(New SymbolDisplayPart(SymbolDisplayPartKind.Text, Nothing, documentation.DocumentationText)), prefixParts:=documentation.PrefixParts, separatorParts:=GetSeparatorParts(), suffixParts:=suffixParts, diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractSignatureHelpProvider.vb index 77f827b568c05..2416a25fb7bbb 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractSignatureHelpProvider.vb @@ -44,7 +44,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Return New SignatureHelpParameter( parameter.Name, parameter.IsOptional, - parameter.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), parameter.ToMinimalDisplayParts(semanticModel, position)) End Function diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb index 5507b8e536da6..87faefb7eb33d 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb @@ -113,7 +113,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp constructor, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic, - constructor.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + constructor.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(constructor, semanticModel, position), GetSeparatorParts(), GetPostambleParts(constructor), @@ -151,7 +151,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp result.Add(New SignatureHelpParameter( namedParameter.Name, isOptional:=True, - documentation:=namedParameter.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + documentationGetter:=namedParameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), displayParts:=displayParts, prefixDisplayParts:=GetParameterPrefixDisplayParts(i))) Next diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/FunctionAggregationSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/FunctionAggregationSignatureHelpProvider.vb index 88b0bf548d565..3ba561b834775 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/FunctionAggregationSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/FunctionAggregationSignatureHelpProvider.vb @@ -96,7 +96,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp method, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, False, - method.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + method.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(method, semanticModel, position), GetSeparatorParts(), GetPostambleParts(method, semanticModel, position), @@ -154,7 +154,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Dim sigHelpParameter = New SignatureHelpParameter( "", parameter.IsOptional, - parameter.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), parts) Return SpecializedCollections.SingletonEnumerable(sigHelpParameter) diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb index 226d5bb7c9900..72a4905d3dc18 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb @@ -117,7 +117,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp symbol, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, False, - symbol.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + symbol.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(namedType, semanticModel, position), GetSeparatorParts(), GetPostambleParts(namedType), namedType.TypeParameters.[Select](Function(p) Convert(p, semanticModel, position, documentationCommentFormattingService, cancellationToken))) Else Dim method = DirectCast(symbol, IMethodSymbol) @@ -125,7 +125,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp symbol, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, False, - symbol.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + symbol.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(method, semanticModel, position), GetSeparatorParts(), GetPostambleParts(method, semanticModel, position), method.TypeParameters.[Select](Function(p) Convert(p, semanticModel, position, documentationCommentFormattingService, cancellationToken))) End If @@ -142,7 +142,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Return New SignatureHelpParameter( parameter.Name, isOptional:=False, - documentation:=parameter.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + documentationGetter:=parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), displayParts:=parts) End Function diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb index 3ec7e17b0b4f2..d9f257861e018 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb @@ -28,7 +28,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp invokeMethod, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic:=invokeMethod.IsParams(), - documentation:=SpecializedCollections.EmptyEnumerable(Of SymbolDisplayPart)(), + documentationGetter:=Nothing, prefixParts:=GetDelegateInvokePreambleParts(invokeMethod, semanticModel, position), separatorParts:=GetSeparatorParts(), suffixParts:=GetDelegateInvokePostambleParts(invokeMethod, semanticModel, position), @@ -52,10 +52,11 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Private Function GetDelegateInvokeParameters(invokeMethod As IMethodSymbol, semanticModel As SemanticModel, position As Integer, documentationCommentoFormattingService As IDocumentationCommentFormattingService, cancellationToken As CancellationToken) As IEnumerable(Of SignatureHelpParameter) Dim parameters = New List(Of SignatureHelpParameter) For Each parameter In invokeMethod.Parameters + cancellationToken.ThrowIfCancellationRequested() parameters.Add(New SignatureHelpParameter( parameter.Name, isOptional:=False, - documentation:=parameter.GetDocumentationParts(semanticModel, position, documentationCommentoFormattingService, cancellationToken), + documentationGetter:=parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentoFormattingService), displayParts:=parameter.ToMinimalDisplayParts(semanticModel, position))) Next diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.ElementAccess.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.ElementAccess.vb index 27e7c09ed1c0d..bb409a29b6a6f 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.ElementAccess.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.ElementAccess.vb @@ -44,7 +44,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp indexer, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, indexer.IsParams(), - indexer.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + indexer.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetIndexerPreambleParts(indexer, semanticModel, position), GetSeparatorParts(), GetIndexerPostambleParts(indexer, semanticModel, position), diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.MemberGroup.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.MemberGroup.vb index e060f045e599f..c944a98d8fd81 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.MemberGroup.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.MemberGroup.vb @@ -55,7 +55,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp member, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, member.IsParams(), - member.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken).Concat(GetAwaitableDescription(member, semanticModel, position)), + Function(c) member.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, c).Concat(GetAwaitableDescription(member, semanticModel, position)), GetMemberGroupPreambleParts(member, semanticModel, position), GetSeparatorParts(), GetMemberGroupPostambleParts(member, semanticModel, position), diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb index 062fc1a5e1605..864ac25777abb 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb @@ -28,7 +28,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp invokeMethod, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic:=False, - documentation:=invokeMethod.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + documentationGetter:=invokeMethod.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), prefixParts:=GetDelegateTypePreambleParts(invokeMethod, semanticModel, position), separatorParts:=GetSeparatorParts(), suffixParts:=GetDelegateTypePostambleParts(invokeMethod), parameters:=GetDelegateTypeParameters(invokeMethod, semanticModel, position, cancellationToken)) Return SpecializedCollections.SingletonEnumerable(item) End Function @@ -77,7 +77,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Return {New SignatureHelpParameter( TargetName, isOptional:=False, - documentation:=String.Empty.ToSymbolDisplayParts(), + documentationGetter:=Nothing, displayParts:=parts)} End Function diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.NormalType.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.NormalType.vb index 9888ac3950a63..a8673911f9ed0 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.NormalType.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.NormalType.vb @@ -40,7 +40,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp constructor, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, constructor.IsParams(), - constructor.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + constructor.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetNormalTypePreambleParts(constructor, semanticModel, position), GetSeparatorParts(), GetNormalTypePostambleParts(constructor), constructor.Parameters.[Select](Function(p) Convert(p, semanticModel, position, documentationCommentFormattingService, cancellationToken))) Return item End Function diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/RaiseEventStatementSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/RaiseEventStatementSignatureHelpProvider.vb index 9b570a6cc52ee..adbbcc0871105 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/RaiseEventStatementSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/RaiseEventStatementSignatureHelpProvider.vb @@ -109,7 +109,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp eventSymbol, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, False, - eventSymbol.GetDocumentationParts(semanticModel, position, documentationCommentFormattingService, cancellationToken), + eventSymbol.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(eventSymbol, semanticModel, position), GetSeparatorParts(), GetPostambleParts(eventSymbol, semanticModel, position), diff --git a/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs b/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs index b2caa6eef6ab4..04150da00e618 100644 --- a/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs +++ b/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Threading; using Microsoft.CodeAnalysis.DocumentationCommentFormatting; +using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.Shared.Extensions { @@ -175,15 +176,14 @@ public static IEnumerable GetDocumentationParts(this ISymbol (IAliasSymbol alias) => alias.Target.GetDocumentationComment(cancellationToken: cancellationToken).SummaryText, _ => symbol.GetDocumentationComment(cancellationToken: cancellationToken).SummaryText); - if (documentation != null) - { - // Note: We are using iterator syntax here instead of simply returning the result of formatter.Format - // because we want the enumeration to be evaluated lazily. - foreach (SymbolDisplayPart part in formatter.Format(documentation, semanticModel, position, CrefFormat)) - { - yield return part; - } - } + return documentation != null + ? formatter.Format(documentation, semanticModel, position, CrefFormat) + : SpecializedCollections.EmptyEnumerable(); + } + + public static Func> GetDocumentationPartsGetter(this ISymbol symbol, SemanticModel semanticModel, int position, IDocumentationCommentFormattingService formatter) + { + return c => symbol.GetDocumentationParts(semanticModel, position, formatter, cancellationToken: c); } public static readonly SymbolDisplayFormat CrefFormat = diff --git a/src/VisualStudio/Core/Test/DebuggerIntelliSense/TestState.vb b/src/VisualStudio/Core/Test/DebuggerIntelliSense/TestState.vb index 68fb4fe68dbec..00c3f03a4667f 100644 --- a/src/VisualStudio/Core/Test/DebuggerIntelliSense/TestState.vb +++ b/src/VisualStudio/Core/Test/DebuggerIntelliSense/TestState.vb @@ -1,6 +1,7 @@ ' 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.ComponentModel.Composition.Hosting +Imports System.Threading Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.Completion Imports Microsoft.CodeAnalysis.Completion.Providers @@ -8,7 +9,7 @@ Imports Microsoft.CodeAnalysis.Completion.Rules Imports Microsoft.CodeAnalysis.Editor Imports Microsoft.CodeAnalysis.Editor.CommandHandlers Imports Microsoft.CodeAnalysis.Editor.Commands -Imports Microsoft.CodeAnalysis.Editor.Implementation.Intellisense.Completion +Imports Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.Completion Imports Microsoft.CodeAnalysis.Editor.UnitTests Imports Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense Imports Microsoft.CodeAnalysis.Host.Mef @@ -365,7 +366,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.DebuggerIntelliSense End If If documentation IsNot Nothing Then - Assert.Equal(documentation, Me.CurrentSignatureHelpPresenterSession.SelectedItem.Documentation.GetFullText()) + Assert.Equal(documentation, Me.CurrentSignatureHelpPresenterSession.SelectedItem.DocumentationGetter(CancellationToken.None).GetFullText()) End If If selectedParameter IsNot Nothing Then From e1c4de8c300cbf4196c6e3b7ca7133cadd70df46 Mon Sep 17 00:00:00 2001 From: Paul Harrington Date: Fri, 13 Feb 2015 13:01:13 -0800 Subject: [PATCH 5/8] Renamed documentationGetter to documentationFactory --- .../SignatureHelp/AttributeSignatureHelpProvider.cs | 2 +- .../GenericNameSignatureHelpProvider.cs | 2 +- ...ExpressionSignatureHelpProvider_DelegateInvoke.cs | 2 +- ...onExpressionSignatureHelpProvider_DelegateType.cs | 4 ++-- .../Extensibility/SignatureHelp/SignatureHelpItem.cs | 8 ++++---- .../SignatureHelp/SignatureHelpParameter.cs | 8 ++++---- ...gnatureHelpProvider.SymbolKeySignatureHelpItem.cs | 4 ++-- .../SignatureHelp/AbstractSignatureHelpProvider.cs | 12 ++++++------ .../SignatureHelp/Presentation/Parameter.cs | 2 +- .../SignatureHelp/Presentation/Signature.cs | 2 +- .../AbstractSignatureHelpProviderTests.cs | 2 +- .../IntelliSense/SignatureHelpControllerTests.vb | 2 +- src/EditorFeatures/Test2/IntelliSense/TestState.vb | 2 +- ...AbstractIntrinsicOperatorSignatureHelpProvider.vb | 4 ++-- .../SignatureHelp/AttributeSignatureHelpProvider.vb | 2 +- .../GenericNameSignatureHelpProvider.vb | 2 +- ...ExpressionSignatureHelpProvider.DelegateInvoke.vb | 4 ++-- ...onExpressionSignatureHelpProvider.DelegateType.vb | 4 ++-- .../Core/Test/DebuggerIntelliSense/TestState.vb | 2 +- 19 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs index 2a0f36291b2ad..75752786e9571 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs @@ -177,7 +177,7 @@ private IEnumerable GetParameters( yield return new SignatureHelpParameter( namedParameter.Name, isOptional: true, - documentationGetter: namedParameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormatter), + documentationFactory: namedParameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormatter), displayParts: displayParts, prefixDisplayParts: GetParameterPrefixDisplayParts(i)); } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs index 1c5ac6d245495..910700ab355a9 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs @@ -220,7 +220,7 @@ private SignatureHelpParameter Convert( return new SignatureHelpParameter( parameter.Name, isOptional: false, - documentationGetter: parameter.GetDocumentationPartsGetter(semanticModel, position, formatter), + documentationFactory: parameter.GetDocumentationPartsGetter(semanticModel, position, formatter), displayParts: parameter.ToMinimalDisplayParts(semanticModel, position, s_minimallyQualifiedFormat), selectedDisplayParts: GetSelectedDisplayParts(parameter, semanticModel, position, cancellationToken)); } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs b/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs index a802bd1c648a5..ed5919e0b9a56 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs @@ -37,7 +37,7 @@ private IEnumerable GetDelegateInvokeItems( invokeMethod, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic: invokeMethod.IsParams(), - documentationGetter: null, + documentationFactory: null, prefixParts: GetDelegateInvokePreambleParts(invokeMethod, semanticModel, position), separatorParts: GetSeparatorParts(), suffixParts: GetDelegateInvokePostambleParts(), diff --git a/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_DelegateType.cs b/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_DelegateType.cs index 9373b45d95eab..acbb99aade86d 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_DelegateType.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_DelegateType.cs @@ -32,7 +32,7 @@ private IEnumerable GetDelegateTypeConstructors( invokeMethod, semanticModel, position, symbolDisplayService, anonymousTypeDispalyService, isVariadic: false, - documentationGetter: null, + documentationFactory: null, prefixParts: GetDelegateTypePreambleParts(invokeMethod, semanticModel, position), separatorParts: GetSeparatorParts(), suffixParts: GetDelegateTypePostambleParts(invokeMethod), @@ -80,7 +80,7 @@ private IEnumerable GetDelegateTypeParameters(IMethodSym yield return new SignatureHelpParameter( TargetName, isOptional: false, - documentationGetter: null, + documentationFactory: null, displayParts: parts); } diff --git a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs index 9c2673d09bd9d..4fb7ae6b67cea 100644 --- a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs +++ b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs @@ -31,13 +31,13 @@ internal class SignatureHelpItem public ImmutableArray DescriptionParts { get; internal set; } - public Func> DocumentationGetter { get; } + public Func> DocumenationFactory { get; } - private static readonly Func> s_emptyDocumentationGetter = _ => SpecializedCollections.EmptyEnumerable(); + private static readonly Func> s_emptyDocumentationFactory = _ => SpecializedCollections.EmptyEnumerable(); public SignatureHelpItem( bool isVariadic, - Func> documentationGetter, + Func> documentationFactory, IEnumerable prefixParts, IEnumerable separatorParts, IEnumerable suffixParts, @@ -50,7 +50,7 @@ public SignatureHelpItem( } this.IsVariadic = isVariadic; - this.DocumentationGetter = documentationGetter ?? s_emptyDocumentationGetter; + this.DocumenationFactory = documentationFactory ?? s_emptyDocumentationFactory; this.PrefixDisplayParts = prefixParts.ToImmutableArrayOrEmpty(); this.SeparatorDisplayParts = separatorParts.ToImmutableArrayOrEmpty(); this.SuffixDisplayParts = suffixParts.ToImmutableArrayOrEmpty(); diff --git a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs index 4705b51adc3a0..248adc6963aa7 100644 --- a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs +++ b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs @@ -20,7 +20,7 @@ internal class SignatureHelpParameter /// Documentation for this parameter. This should normally be presented to the user when /// this parameter is selected. /// - public Func> DocumentationGetter { get; } + public Func> DocumentationFactory { get; } /// /// Display parts to show before the normal display parts for the parameter. @@ -50,12 +50,12 @@ internal class SignatureHelpParameter /// public IList SelectedDisplayParts { get; } - private static readonly Func> s_emptyDocumentationGetter = _ => SpecializedCollections.EmptyEnumerable(); + private static readonly Func> s_emptyDocumentationFactory = _ => SpecializedCollections.EmptyEnumerable(); public SignatureHelpParameter( string name, bool isOptional, - Func> documentationGetter, + Func> documentationFactory, IEnumerable displayParts, IEnumerable prefixDisplayParts = null, IEnumerable suffixDisplayParts = null, @@ -63,7 +63,7 @@ public SignatureHelpParameter( { this.Name = name ?? string.Empty; this.IsOptional = isOptional; - this.DocumentationGetter = documentationGetter ?? s_emptyDocumentationGetter; + this.DocumentationFactory = documentationFactory ?? s_emptyDocumentationFactory; this.DisplayParts = displayParts.ToImmutableArrayOrEmpty(); this.PrefixDisplayParts = prefixDisplayParts.ToImmutableArrayOrEmpty(); this.SuffixDisplayParts = suffixDisplayParts.ToImmutableArrayOrEmpty(); diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs index 0111a9467c68e..6a3f3a34627b2 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs @@ -15,12 +15,12 @@ internal class SymbolKeySignatureHelpItem : SignatureHelpItem, IEquatable> documentationGetter, + Func> documentationFactory, IEnumerable prefixParts, IEnumerable separatorParts, IEnumerable suffixParts, IEnumerable parameters, - IEnumerable descriptionParts) : base(isVariadic, documentationGetter, prefixParts, separatorParts, suffixParts, parameters, descriptionParts) + IEnumerable descriptionParts) : base(isVariadic, documentationFactory, prefixParts, separatorParts, suffixParts, parameters, descriptionParts) { this.SymbolKey = symbol == null ? null : symbol.GetSymbolKey(); } diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs index e309d787860a8..835eac1ba0655 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.cs @@ -75,7 +75,7 @@ protected SignatureHelpItem CreateItem( ISymbolDisplayService symbolDisplayService, IAnonymousTypeDisplayService anonymousTypeDisplayService, bool isVariadic, - Func> documentationGetter, + Func> documentationFactory, IEnumerable prefixParts, IEnumerable separatorParts, IEnumerable suffixParts, @@ -83,7 +83,7 @@ protected SignatureHelpItem CreateItem( IEnumerable descriptionParts = null) { var item = new SymbolKeySignatureHelpItem( - orderSymbol, isVariadic, documentationGetter, prefixParts, separatorParts, + orderSymbol, isVariadic, documentationFactory, prefixParts, separatorParts, suffixParts, parameters, descriptionParts); return FixAnonymousTypeParts(orderSymbol, item, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService); @@ -93,7 +93,7 @@ private SignatureHelpItem FixAnonymousTypeParts( ISymbol orderSymbol, SignatureHelpItem item, SemanticModel semanticModel, int position, ISymbolDisplayService symbolDisplayService, IAnonymousTypeDisplayService anonymousTypeDisplayService) { var currentItem = new SymbolKeySignatureHelpItem( - orderSymbol, item.IsVariadic, item.DocumentationGetter, + orderSymbol, item.IsVariadic, item.DocumenationFactory, anonymousTypeDisplayService.InlineDelegateAnonymousTypes(item.PrefixDisplayParts, semanticModel, position, symbolDisplayService), anonymousTypeDisplayService.InlineDelegateAnonymousTypes(item.SeparatorDisplayParts, semanticModel, position, symbolDisplayService), anonymousTypeDisplayService.InlineDelegateAnonymousTypes(item.SuffixDisplayParts, semanticModel, position, symbolDisplayService), @@ -120,7 +120,7 @@ where part.Symbol.IsNormalAnonymousType() currentItem = new SymbolKeySignatureHelpItem( orderSymbol, currentItem.IsVariadic, - currentItem.DocumentationGetter, + currentItem.DocumenationFactory, info.ReplaceAnonymousTypes(currentItem.PrefixDisplayParts), info.ReplaceAnonymousTypes(currentItem.SeparatorDisplayParts), info.ReplaceAnonymousTypes(currentItem.SuffixDisplayParts), @@ -138,7 +138,7 @@ private SignatureHelpParameter ReplaceAnonymousTypes( return new SignatureHelpParameter( parameter.Name, parameter.IsOptional, - parameter.DocumentationGetter, + parameter.DocumentationFactory, info.ReplaceAnonymousTypes(parameter.DisplayParts), info.ReplaceAnonymousTypes(parameter.SelectedDisplayParts)); } @@ -153,7 +153,7 @@ private SignatureHelpParameter InlineDelegateAnonymousTypes( return new SignatureHelpParameter( parameter.Name, parameter.IsOptional, - parameter.DocumentationGetter, + parameter.DocumentationFactory, anonymousTypeDisplayService.InlineDelegateAnonymousTypes(parameter.DisplayParts, semanticModel, position, symbolDisplayService), anonymousTypeDisplayService.InlineDelegateAnonymousTypes(parameter.PrefixDisplayParts, semanticModel, position, symbolDisplayService), anonymousTypeDisplayService.InlineDelegateAnonymousTypes(parameter.SuffixDisplayParts, semanticModel, position, symbolDisplayService), diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Parameter.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Parameter.cs index 7440a69388121..cfea61d116876 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Parameter.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Parameter.cs @@ -15,7 +15,7 @@ internal class Parameter : IParameter private readonly int _index; private readonly int _prettyPrintedIndex; - public string Documentation => _documentation ?? (_documentation = _parameter.DocumentationGetter(CancellationToken.None).GetFullText()); + public string Documentation => _documentation ?? (_documentation = _parameter.DocumentationFactory(CancellationToken.None).GetFullText()); public string Name => _parameter.Name; public Span Locus => new Span(_index, _contentLength); public Span PrettyPrintedLocus => new Span(_prettyPrintedIndex, _contentLength); diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs index 64b557dd4cd04..864b6aec2b860 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs @@ -193,7 +193,7 @@ private void Initialize() AddRange(_signatureHelpItem.DescriptionParts, parts, prettyPrintedParts); Append(_signatureHelpItem.DescriptionParts.GetFullText(), content, prettyPrintedContent); - var documentation = _signatureHelpItem.DocumentationGetter(CancellationToken.None).ToList(); + var documentation = _signatureHelpItem.DocumenationFactory(CancellationToken.None).ToList(); if (documentation.Count > 0) { AddRange(new[] { newLinePart }, parts, prettyPrintedParts); diff --git a/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs b/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs index a19e4f94df6af..3a12a1e16edbd 100644 --- a/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs +++ b/src/EditorFeatures/Test/SignatureHelp/AbstractSignatureHelpProviderTests.cs @@ -229,7 +229,7 @@ private void CompareSigHelpItemsAndCurrentPosition( if (expectedTestItem.MethodDocumentation != null) { - Assert.Equal(expectedTestItem.MethodDocumentation, actualSignatureHelpItem.DocumentationGetter(CancellationToken.None).GetFullText()); + Assert.Equal(expectedTestItem.MethodDocumentation, actualSignatureHelpItem.DocumenationFactory(CancellationToken.None).GetFullText()); } if (expectedTestItem.ParameterDocumentation != null) diff --git a/src/EditorFeatures/Test2/IntelliSense/SignatureHelpControllerTests.vb b/src/EditorFeatures/Test2/IntelliSense/SignatureHelpControllerTests.vb index 0321d29eaacbe..ce11b37867062 100644 --- a/src/EditorFeatures/Test2/IntelliSense/SignatureHelpControllerTests.vb +++ b/src/EditorFeatures/Test2/IntelliSense/SignatureHelpControllerTests.vb @@ -205,7 +205,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense End Function Private Shared Function CreateItems(count As Integer) As IList(Of SignatureHelpItem) - Return Enumerable.Range(0, count).Select(Function(i) New SignatureHelpItem(isVariadic:=False, documentationGetter:=Nothing, prefixParts:={}, separatorParts:={}, suffixParts:={}, parameters:={}, descriptionParts:={})).ToList() + Return Enumerable.Range(0, count).Select(Function(i) New SignatureHelpItem(isVariadic:=False, documentationFactory:=Nothing, prefixParts:={}, separatorParts:={}, suffixParts:={}, parameters:={}, descriptionParts:={})).ToList() End Function Friend Class MockSignatureHelpProvider diff --git a/src/EditorFeatures/Test2/IntelliSense/TestState.vb b/src/EditorFeatures/Test2/IntelliSense/TestState.vb index 32a97b6dca621..d01e740ad65e2 100644 --- a/src/EditorFeatures/Test2/IntelliSense/TestState.vb +++ b/src/EditorFeatures/Test2/IntelliSense/TestState.vb @@ -389,7 +389,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense End If If documentation IsNot Nothing Then - Assert.Equal(documentation, Me.CurrentSignatureHelpPresenterSession.SelectedItem.DocumentationGetter(CancellationToken.None).GetFullText()) + Assert.Equal(documentation, Me.CurrentSignatureHelpPresenterSession.SelectedItem.DocumenationFactory(CancellationToken.None).GetFullText()) End If If selectedParameter IsNot Nothing Then diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractIntrinsicOperatorSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractIntrinsicOperatorSignatureHelpProvider.vb index b0d0f2d124a18..2bdb51c2400aa 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractIntrinsicOperatorSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractIntrinsicOperatorSignatureHelpProvider.vb @@ -60,7 +60,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp New SignatureHelpParameter( name:=documentation.GetParameterName(i), isOptional:=False, - documentationGetter:=Function(c As CancellationToken) documentation.GetParameterDocumentation(capturedIndex).ToSymbolDisplayParts(), + documentationFactory:=Function(c As CancellationToken) documentation.GetParameterDocumentation(capturedIndex).ToSymbolDisplayParts(), displayParts:=documentation.GetParameterDisplayParts(i))) Next @@ -73,7 +73,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Nothing, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic:=False, - documentationGetter:=Function(c As CancellationToken) SpecializedCollections.SingletonEnumerable(New SymbolDisplayPart(SymbolDisplayPartKind.Text, Nothing, documentation.DocumentationText)), + documentationFactory:=Function(c As CancellationToken) SpecializedCollections.SingletonEnumerable(New SymbolDisplayPart(SymbolDisplayPartKind.Text, Nothing, documentation.DocumentationText)), prefixParts:=documentation.PrefixParts, separatorParts:=GetSeparatorParts(), suffixParts:=suffixParts, diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb index 87faefb7eb33d..01460f3b3acfd 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb @@ -151,7 +151,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp result.Add(New SignatureHelpParameter( namedParameter.Name, isOptional:=True, - documentationGetter:=namedParameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + documentationFactory:=namedParameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), displayParts:=displayParts, prefixDisplayParts:=GetParameterPrefixDisplayParts(i))) Next diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb index 72a4905d3dc18..f4a7db0b55996 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb @@ -142,7 +142,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Return New SignatureHelpParameter( parameter.Name, isOptional:=False, - documentationGetter:=parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + documentationFactory:=parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), displayParts:=parts) End Function diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb index d9f257861e018..d72d782ec228c 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb @@ -28,7 +28,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp invokeMethod, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic:=invokeMethod.IsParams(), - documentationGetter:=Nothing, + documentationFactory:=Nothing, prefixParts:=GetDelegateInvokePreambleParts(invokeMethod, semanticModel, position), separatorParts:=GetSeparatorParts(), suffixParts:=GetDelegateInvokePostambleParts(invokeMethod, semanticModel, position), @@ -56,7 +56,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp parameters.Add(New SignatureHelpParameter( parameter.Name, isOptional:=False, - documentationGetter:=parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentoFormattingService), + documentationFactory:=parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentoFormattingService), displayParts:=parameter.ToMinimalDisplayParts(semanticModel, position))) Next diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb index 864ac25777abb..39e9c067172ba 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb @@ -28,7 +28,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp invokeMethod, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic:=False, - documentationGetter:=invokeMethod.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + documentationFactory:=invokeMethod.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), prefixParts:=GetDelegateTypePreambleParts(invokeMethod, semanticModel, position), separatorParts:=GetSeparatorParts(), suffixParts:=GetDelegateTypePostambleParts(invokeMethod), parameters:=GetDelegateTypeParameters(invokeMethod, semanticModel, position, cancellationToken)) Return SpecializedCollections.SingletonEnumerable(item) End Function @@ -77,7 +77,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Return {New SignatureHelpParameter( TargetName, isOptional:=False, - documentationGetter:=Nothing, + documentationFactory:=Nothing, displayParts:=parts)} End Function diff --git a/src/VisualStudio/Core/Test/DebuggerIntelliSense/TestState.vb b/src/VisualStudio/Core/Test/DebuggerIntelliSense/TestState.vb index 00c3f03a4667f..fe48db7183b50 100644 --- a/src/VisualStudio/Core/Test/DebuggerIntelliSense/TestState.vb +++ b/src/VisualStudio/Core/Test/DebuggerIntelliSense/TestState.vb @@ -366,7 +366,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.DebuggerIntelliSense End If If documentation IsNot Nothing Then - Assert.Equal(documentation, Me.CurrentSignatureHelpPresenterSession.SelectedItem.DocumentationGetter(CancellationToken.None).GetFullText()) + Assert.Equal(documentation, Me.CurrentSignatureHelpPresenterSession.SelectedItem.DocumenationFactory(CancellationToken.None).GetFullText()) End If If selectedParameter IsNot Nothing Then From 1dd71d4eb53857b9dc2bda1a0ddf9ca68f8d6300 Mon Sep 17 00:00:00 2001 From: Paul Harrington Date: Fri, 13 Feb 2015 13:03:25 -0800 Subject: [PATCH 6/8] Renamed GetDocumentationPartsGetter to GetDocumentationPartsFactory --- .../SignatureHelp/AbstractCSharpSignatureHelpProvider.cs | 2 +- .../CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs | 4 ++-- .../ConstructorInitializerSignatureHelpProvider.cs | 2 +- .../ElementAccessExpressionSignatureHelpProvider.cs | 2 +- .../SignatureHelp/GenericNameSignatureHelpProvider.cs | 4 ++-- ...ocationExpressionSignatureHelpProvider_DelegateInvoke.cs | 2 +- ...ectCreationExpressionSignatureHelpProvider_NormalType.cs | 2 +- .../SignatureHelp/AbstractSignatureHelpProvider.vb | 2 +- .../SignatureHelp/AttributeSignatureHelpProvider.vb | 4 ++-- .../FunctionAggregationSignatureHelpProvider.vb | 4 ++-- .../SignatureHelp/GenericNameSignatureHelpProvider.vb | 6 +++--- ...ocationExpressionSignatureHelpProvider.DelegateInvoke.vb | 2 +- ...vocationExpressionSignatureHelpProvider.ElementAccess.vb | 2 +- ...tCreationExpressionSignatureHelpProvider.DelegateType.vb | 2 +- ...ectCreationExpressionSignatureHelpProvider.NormalType.vb | 2 +- .../RaiseEventStatementSignatureHelpProvider.vb | 2 +- src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs | 2 +- 17 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/EditorFeatures/CSharp/SignatureHelp/AbstractCSharpSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/AbstractCSharpSignatureHelpProvider.cs index 6235775a79204..1fbf06fe7d0b6 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/AbstractCSharpSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/AbstractCSharpSignatureHelpProvider.cs @@ -61,7 +61,7 @@ protected static SignatureHelpParameter Convert( return new SignatureHelpParameter( parameter.Name, parameter.IsOptional, - parameter.GetDocumentationPartsGetter(semanticModel, position, formatter), + parameter.GetDocumentationPartsFactory(semanticModel, position, formatter), parameter.ToMinimalDisplayParts(semanticModel, position)); } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs index 75752786e9571..ce9a16e68c513 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/AttributeSignatureHelpProvider.cs @@ -135,7 +135,7 @@ private SignatureHelpItem Convert( constructor, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic, - constructor.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormatter), + constructor.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormatter), GetPreambleParts(constructor, semanticModel, position), GetSeparatorParts(), GetPostambleParts(constructor), @@ -177,7 +177,7 @@ private IEnumerable GetParameters( yield return new SignatureHelpParameter( namedParameter.Name, isOptional: true, - documentationFactory: namedParameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormatter), + documentationFactory: namedParameter.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormatter), displayParts: displayParts, prefixDisplayParts: GetParameterPrefixDisplayParts(i)); } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/ConstructorInitializerSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/ConstructorInitializerSignatureHelpProvider.cs index 25c6c7ecffa96..5ae886cee5e8d 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/ConstructorInitializerSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/ConstructorInitializerSignatureHelpProvider.cs @@ -135,7 +135,7 @@ private SignatureHelpItem Convert( constructor, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, constructor.IsParams(), - constructor.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + constructor.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(constructor, semanticModel, position), GetSeparatorParts(), GetPostambleParts(constructor), diff --git a/src/EditorFeatures/CSharp/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs index a8c3b45efb2bd..13051f4d885c7 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/ElementAccessExpressionSignatureHelpProvider.cs @@ -200,7 +200,7 @@ private SignatureHelpItem Convert( var item = CreateItem(indexer, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, indexer.IsParams(), - indexer.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + indexer.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(indexer, position, semanticModel), GetSeparatorParts(), GetPostambleParts(indexer), diff --git a/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs b/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs index 910700ab355a9..0bd3b17dc2877 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/GenericNameSignatureHelpProvider.cs @@ -183,7 +183,7 @@ private SignatureHelpItem Convert( symbol, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, false, - symbol.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + symbol.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(namedType, semanticModel, position), GetSeparatorParts(), GetPostambleParts(namedType), @@ -220,7 +220,7 @@ private SignatureHelpParameter Convert( return new SignatureHelpParameter( parameter.Name, isOptional: false, - documentationFactory: parameter.GetDocumentationPartsGetter(semanticModel, position, formatter), + documentationFactory: parameter.GetDocumentationPartsFactory(semanticModel, position, formatter), displayParts: parameter.ToMinimalDisplayParts(semanticModel, position, s_minimallyQualifiedFormat), selectedDisplayParts: GetSelectedDisplayParts(parameter, semanticModel, position, cancellationToken)); } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs b/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs index ed5919e0b9a56..055c6526b08fa 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/InvocationExpressionSignatureHelpProvider_DelegateInvoke.cs @@ -66,7 +66,7 @@ private IEnumerable GetDelegateInvokeParameters( yield return new SignatureHelpParameter( parameter.Name, parameter.IsOptional, - parameter.GetDocumentationPartsGetter(semanticModel, position, formattingService), + parameter.GetDocumentationPartsFactory(semanticModel, position, formattingService), parameter.ToMinimalDisplayParts(semanticModel, position)); } } diff --git a/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_NormalType.cs b/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_NormalType.cs index 8ce8df93c06c4..69d50ed346472 100644 --- a/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_NormalType.cs +++ b/src/EditorFeatures/CSharp/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider_NormalType.cs @@ -56,7 +56,7 @@ private SignatureHelpItem ConvertNormalTypeConstructor( constructor, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, constructor.IsParams(), - constructor.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + constructor.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetNormalTypePreambleParts(constructor, semanticModel, position), GetSeparatorParts(), GetNormalTypePostambleParts(constructor), diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractSignatureHelpProvider.vb index 2416a25fb7bbb..716f295389282 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/AbstractSignatureHelpProvider.vb @@ -44,7 +44,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Return New SignatureHelpParameter( parameter.Name, parameter.IsOptional, - parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + parameter.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), parameter.ToMinimalDisplayParts(semanticModel, position)) End Function diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb index 01460f3b3acfd..3527d1df27835 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/AttributeSignatureHelpProvider.vb @@ -113,7 +113,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp constructor, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic, - constructor.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + constructor.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(constructor, semanticModel, position), GetSeparatorParts(), GetPostambleParts(constructor), @@ -151,7 +151,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp result.Add(New SignatureHelpParameter( namedParameter.Name, isOptional:=True, - documentationFactory:=namedParameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + documentationFactory:=namedParameter.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), displayParts:=displayParts, prefixDisplayParts:=GetParameterPrefixDisplayParts(i))) Next diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/FunctionAggregationSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/FunctionAggregationSignatureHelpProvider.vb index 3ba561b834775..4c49db67d08c0 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/FunctionAggregationSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/FunctionAggregationSignatureHelpProvider.vb @@ -96,7 +96,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp method, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, False, - method.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + method.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(method, semanticModel, position), GetSeparatorParts(), GetPostambleParts(method, semanticModel, position), @@ -154,7 +154,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Dim sigHelpParameter = New SignatureHelpParameter( "", parameter.IsOptional, - parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + parameter.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), parts) Return SpecializedCollections.SingletonEnumerable(sigHelpParameter) diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb index f4a7db0b55996..3559e72ca345f 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/GenericNameSignatureHelpProvider.vb @@ -117,7 +117,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp symbol, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, False, - symbol.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + symbol.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(namedType, semanticModel, position), GetSeparatorParts(), GetPostambleParts(namedType), namedType.TypeParameters.[Select](Function(p) Convert(p, semanticModel, position, documentationCommentFormattingService, cancellationToken))) Else Dim method = DirectCast(symbol, IMethodSymbol) @@ -125,7 +125,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp symbol, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, False, - symbol.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + symbol.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(method, semanticModel, position), GetSeparatorParts(), GetPostambleParts(method, semanticModel, position), method.TypeParameters.[Select](Function(p) Convert(p, semanticModel, position, documentationCommentFormattingService, cancellationToken))) End If @@ -142,7 +142,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp Return New SignatureHelpParameter( parameter.Name, isOptional:=False, - documentationFactory:=parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + documentationFactory:=parameter.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), displayParts:=parts) End Function diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb index d72d782ec228c..1ee1b1c20891e 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.DelegateInvoke.vb @@ -56,7 +56,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp parameters.Add(New SignatureHelpParameter( parameter.Name, isOptional:=False, - documentationFactory:=parameter.GetDocumentationPartsGetter(semanticModel, position, documentationCommentoFormattingService), + documentationFactory:=parameter.GetDocumentationPartsFactory(semanticModel, position, documentationCommentoFormattingService), displayParts:=parameter.ToMinimalDisplayParts(semanticModel, position))) Next diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.ElementAccess.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.ElementAccess.vb index bb409a29b6a6f..f2faa828aab82 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.ElementAccess.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/InvocationExpressionSignatureHelpProvider.ElementAccess.vb @@ -44,7 +44,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp indexer, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, indexer.IsParams(), - indexer.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + indexer.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetIndexerPreambleParts(indexer, semanticModel, position), GetSeparatorParts(), GetIndexerPostambleParts(indexer, semanticModel, position), diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb index 39e9c067172ba..795cc9fe6f227 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.DelegateType.vb @@ -28,7 +28,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp invokeMethod, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, isVariadic:=False, - documentationFactory:=invokeMethod.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + documentationFactory:=invokeMethod.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), prefixParts:=GetDelegateTypePreambleParts(invokeMethod, semanticModel, position), separatorParts:=GetSeparatorParts(), suffixParts:=GetDelegateTypePostambleParts(invokeMethod), parameters:=GetDelegateTypeParameters(invokeMethod, semanticModel, position, cancellationToken)) Return SpecializedCollections.SingletonEnumerable(item) End Function diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.NormalType.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.NormalType.vb index a8673911f9ed0..181d5714fb061 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.NormalType.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/ObjectCreationExpressionSignatureHelpProvider.NormalType.vb @@ -40,7 +40,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp constructor, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, constructor.IsParams(), - constructor.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + constructor.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetNormalTypePreambleParts(constructor, semanticModel, position), GetSeparatorParts(), GetNormalTypePostambleParts(constructor), constructor.Parameters.[Select](Function(p) Convert(p, semanticModel, position, documentationCommentFormattingService, cancellationToken))) Return item End Function diff --git a/src/EditorFeatures/VisualBasic/SignatureHelp/RaiseEventStatementSignatureHelpProvider.vb b/src/EditorFeatures/VisualBasic/SignatureHelp/RaiseEventStatementSignatureHelpProvider.vb index adbbcc0871105..6b388c61ed86c 100644 --- a/src/EditorFeatures/VisualBasic/SignatureHelp/RaiseEventStatementSignatureHelpProvider.vb +++ b/src/EditorFeatures/VisualBasic/SignatureHelp/RaiseEventStatementSignatureHelpProvider.vb @@ -109,7 +109,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.SignatureHelp eventSymbol, semanticModel, position, symbolDisplayService, anonymousTypeDisplayService, False, - eventSymbol.GetDocumentationPartsGetter(semanticModel, position, documentationCommentFormattingService), + eventSymbol.GetDocumentationPartsFactory(semanticModel, position, documentationCommentFormattingService), GetPreambleParts(eventSymbol, semanticModel, position), GetSeparatorParts(), GetPostambleParts(eventSymbol, semanticModel, position), diff --git a/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs b/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs index 04150da00e618..678148acfdfc8 100644 --- a/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs +++ b/src/Features/Core/Shared/Extensions/ISymbolExtensions_2.cs @@ -181,7 +181,7 @@ public static IEnumerable GetDocumentationParts(this ISymbol : SpecializedCollections.EmptyEnumerable(); } - public static Func> GetDocumentationPartsGetter(this ISymbol symbol, SemanticModel semanticModel, int position, IDocumentationCommentFormattingService formatter) + public static Func> GetDocumentationPartsFactory(this ISymbol symbol, SemanticModel semanticModel, int position, IDocumentationCommentFormattingService formatter) { return c => symbol.GetDocumentationParts(semanticModel, position, formatter, cancellationToken: c); } From 5400afc18ce53042a688f00f7a058d81e37d52eb Mon Sep 17 00:00:00 2001 From: Paul Harrington Date: Fri, 13 Feb 2015 13:40:23 -0800 Subject: [PATCH 7/8] Use compact property getter syntax Use compact property getter syntax. Added range checking to Signature's constructor. --- .../SignatureHelp/Presentation/Signature.cs | 75 +++++++------------ 1 file changed, 27 insertions(+), 48 deletions(-) diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs index 864b6aec2b860..ca40922a0ec9a 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs @@ -21,6 +21,11 @@ internal class Signature : ISignature public Signature(ITrackingSpan applicableToSpan, SignatureHelpItem signatureHelpItem, int selectedParameterIndex) { + if (selectedParameterIndex < -1 || selectedParameterIndex >= _signatureHelpItem.Parameters.Length) + { + throw new ArgumentOutOfRangeException(nameof(selectedParameterIndex)); + } + this.ApplicableToSpan = applicableToSpan; _signatureHelpItem = signatureHelpItem; _parameterIndex = selectedParameterIndex; @@ -36,29 +41,22 @@ private void EnsureInitialized() } } - private IList _displayParts; - internal IList DisplayParts + private Signature InitializedThis { get { EnsureInitialized(); - return _displayParts; + return this; } } - private IList _prettyPrintedDisplayParts; + private IList _displayParts; + internal IList DisplayParts => InitializedThis._displayParts; public ITrackingSpan ApplicableToSpan { get; } private string _content; - public string Content - { - get - { - EnsureInitialized(); - return _content; - } - } + public string Content => InitializedThis._content; private int _parameterIndex = -1; public IParameter CurrentParameter @@ -70,33 +68,13 @@ public IParameter CurrentParameter } } - public string Documentation - { - get - { - return null; - } - } + public string Documentation => null; private ReadOnlyCollection _parameters; - public ReadOnlyCollection Parameters - { - get - { - EnsureInitialized(); - return _parameters; - } - } + public ReadOnlyCollection Parameters => InitializedThis._parameters; private string _prettyPrintedContent; - public string PrettyPrintedContent - { - get - { - EnsureInitialized(); - return _prettyPrintedContent; - } - } + public string PrettyPrintedContent => InitializedThis._prettyPrintedContent; // This event is required by the ISignature interface but it's not actually used // (once created the CurrentParameter property cannot change) @@ -110,6 +88,20 @@ public event EventHandler CurrentParameterChan } } + private IList _prettyPrintedDisplayParts; + internal IList PrettyPrintedDisplayParts + { + get + { + return InitializedThis._prettyPrintedDisplayParts; + } + + set + { + _prettyPrintedDisplayParts = value; + } + } + private void Initialize() { var content = new StringBuilder(); @@ -235,18 +227,5 @@ private IList AddOptionalBrackets(bool isOptional, IList PrettyPrintedDisplayParts - { - get - { - return _prettyPrintedDisplayParts; - } - - set - { - _prettyPrintedDisplayParts = value; - } - } } } From 1845561e927ce14ca0f6c128e1065b59632c5d53 Mon Sep 17 00:00:00 2001 From: Paul Harrington Date: Fri, 13 Feb 2015 14:08:21 -0800 Subject: [PATCH 8/8] Fix NRE Fixed a NullReferenceException introduced by the last commit (range validation) --- .../Core/Extensibility/SignatureHelp/SignatureHelpItem.cs | 2 +- .../Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs | 2 +- .../AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs | 2 +- .../IntelliSense/SignatureHelp/Presentation/Signature.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs index 4fb7ae6b67cea..965c8a5af5cba 100644 --- a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs +++ b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpItem.cs @@ -27,7 +27,7 @@ internal class SignatureHelpItem // arbitrary separators between parameters. public ImmutableArray SeparatorDisplayParts { get; } - public ImmutableArray Parameters { get; } + public ImmutableArray Parameters { get; } public ImmutableArray DescriptionParts { get; internal set; } diff --git a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs index 248adc6963aa7..8777dbfc0e4ab 100644 --- a/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs +++ b/src/EditorFeatures/Core/Extensibility/SignatureHelp/SignatureHelpParameter.cs @@ -55,7 +55,7 @@ internal class SignatureHelpParameter public SignatureHelpParameter( string name, bool isOptional, - Func> documentationFactory, + Func> documentationFactory, IEnumerable displayParts, IEnumerable prefixDisplayParts = null, IEnumerable suffixDisplayParts = null, diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs index 6a3f3a34627b2..db90b3cfe31df 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs @@ -10,7 +10,7 @@ internal abstract partial class AbstractSignatureHelpProvider { internal class SymbolKeySignatureHelpItem : SignatureHelpItem, IEquatable { - public SymbolKey SymbolKey { get; private set; } + public SymbolKey SymbolKey { get; } public SymbolKeySignatureHelpItem( ISymbol symbol, diff --git a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs index ca40922a0ec9a..cf9449dbd44ec 100644 --- a/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs +++ b/src/EditorFeatures/Core/Implementation/IntelliSense/SignatureHelp/Presentation/Signature.cs @@ -21,7 +21,7 @@ internal class Signature : ISignature public Signature(ITrackingSpan applicableToSpan, SignatureHelpItem signatureHelpItem, int selectedParameterIndex) { - if (selectedParameterIndex < -1 || selectedParameterIndex >= _signatureHelpItem.Parameters.Length) + if (selectedParameterIndex < -1 || selectedParameterIndex >= signatureHelpItem.Parameters.Length) { throw new ArgumentOutOfRangeException(nameof(selectedParameterIndex)); }