From da04905459c14d4d73cff0a40360e6b4ef06ebbe Mon Sep 17 00:00:00 2001 From: Jason Malinowski Date: Mon, 5 Oct 2020 17:17:32 -0700 Subject: [PATCH 01/68] Fix Go to Definition to a source-generated file https://github.com/dotnet/roslyn/pull/47047 changed the logic for the file name and path we generate, but we were no longer ensuring the temporary directory existed prior to trying to create the file within it. --- .../Workspace/SourceGeneratedFileManager.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/VisualStudio/Core/Def/Implementation/Workspace/SourceGeneratedFileManager.cs b/src/VisualStudio/Core/Def/Implementation/Workspace/SourceGeneratedFileManager.cs index 98115b9c2df83..f032bb71b8b46 100644 --- a/src/VisualStudio/Core/Def/Implementation/Workspace/SourceGeneratedFileManager.cs +++ b/src/VisualStudio/Core/Def/Implementation/Workspace/SourceGeneratedFileManager.cs @@ -95,14 +95,18 @@ public void NavigateToSourceGeneratedFile(Project project, ISourceGenerator gene // but most URIs are blocked other than file:// and http://; they also get extra handling to attempt to download the file so // those aren't really usable anyways. - // We put all the files related to the same project in a single directory var generatorType = generator.GetType(); - var projectDirectory = Path.Combine(_temporaryDirectory, project.Id.Id.ToString()); - Directory.CreateDirectory(projectDirectory); // The file name we generate here is chosen to match the compiler's choice, so the debugger can recognize the files should match. // This can only be changed if the compiler changes the algorithm as well. - var temporaryFilePath = Path.Combine(projectDirectory, generatorType.Assembly.GetName().Name ?? string.Empty, generatorType.FullName, generatedSourceHintName); + var temporaryFilePath = Path.Combine( + _temporaryDirectory, + project.Id.Id.ToString(), + generatorType.Assembly.GetName().Name ?? string.Empty, + generatorType.FullName, + generatedSourceHintName); + + Directory.CreateDirectory(Path.GetDirectoryName(temporaryFilePath)); // Don't write to the file if it's already there, as that potentially triggers a file reload if (!File.Exists(temporaryFilePath)) From ae53ca54c1d74b5f25edeb0cf3e08708fab19eac Mon Sep 17 00:00:00 2001 From: Sam Harwell Date: Wed, 7 Oct 2020 11:31:42 -0700 Subject: [PATCH 02/68] Avoid binding the world looking for target-typed new --- .../FindReferences/Finders/AbstractReferenceFinder.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Workspaces/Core/Portable/FindSymbols/FindReferences/Finders/AbstractReferenceFinder.cs b/src/Workspaces/Core/Portable/FindSymbols/FindReferences/Finders/AbstractReferenceFinder.cs index d3d45f1901940..19ea338fb40fa 100644 --- a/src/Workspaces/Core/Portable/FindSymbols/FindReferences/Finders/AbstractReferenceFinder.cs +++ b/src/Workspaces/Core/Portable/FindSymbols/FindReferences/Finders/AbstractReferenceFinder.cs @@ -638,6 +638,12 @@ static bool IsRelevantDocument(SyntaxTreeIndex syntaxTreeInfo) void CollectMatchingReferences(ISymbol originalUnreducedSymbolDefinition, SyntaxNode node, ISyntaxFactsService syntaxFacts, ISemanticFactsService semanticFacts, ArrayBuilder locations) { + if (!syntaxFacts.IsImplicitObjectCreation(node)) + { + // Avoid binding unrelated nodes + return; + } + var constructor = semanticModel.GetSymbolInfo(node, cancellationToken).Symbol; if (Matches(constructor, originalUnreducedSymbolDefinition)) From 8f220bd41df8813dbd77be6462fe33883f86148c Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 7 Oct 2020 14:46:36 -0700 Subject: [PATCH 03/68] Renames --- ...tion.cs => InlineHintsFormatDefinition.cs} | 12 +-- ...meterNameHintsTag.cs => InlineHintsTag.cs} | 90 ++++++++++--------- ...ameHintsTagger.cs => InlineHintsTagger.cs} | 26 +++--- ...ovider.cs => InlineHintsTaggerProvider.cs} | 10 +-- .../Core/EditorFeaturesResources.resx | 4 +- ...ameHintDataTag.cs => InlineHintDataTag.cs} | 18 ++-- ...er.cs => InlineHintsDataTaggerProvider.cs} | 18 ++-- .../Core/xlf/EditorFeaturesResources.cs.xlf | 6 +- .../Core/xlf/EditorFeaturesResources.de.xlf | 6 +- .../Core/xlf/EditorFeaturesResources.es.xlf | 6 +- .../Core/xlf/EditorFeaturesResources.fr.xlf | 6 +- .../Core/xlf/EditorFeaturesResources.it.xlf | 6 +- .../Core/xlf/EditorFeaturesResources.ja.xlf | 6 +- .../Core/xlf/EditorFeaturesResources.ko.xlf | 6 +- .../Core/xlf/EditorFeaturesResources.pl.xlf | 6 +- .../xlf/EditorFeaturesResources.pt-BR.xlf | 6 +- .../Core/xlf/EditorFeaturesResources.ru.xlf | 6 +- .../Core/xlf/EditorFeaturesResources.tr.xlf | 6 +- .../xlf/EditorFeaturesResources.zh-Hans.xlf | 6 +- .../xlf/EditorFeaturesResources.zh-Hant.xlf | 6 +- .../InlineHints/InlineHintsOptions.cs | 18 ++++ 21 files changed, 151 insertions(+), 123 deletions(-) rename src/EditorFeatures/Core.Wpf/InlineHints/{InlineParameterNameHintsFormatDefinition.cs => InlineHintsFormatDefinition.cs} (77%) rename src/EditorFeatures/Core.Wpf/InlineHints/{InlineParameterNameHintsTag.cs => InlineHintsTag.cs} (70%) rename src/EditorFeatures/Core.Wpf/InlineHints/{InlineParameterNameHintsTagger.cs => InlineHintsTagger.cs} (83%) rename src/EditorFeatures/Core.Wpf/InlineHints/{InlineParameterNameHintsTaggerProvider.cs => InlineHintsTaggerProvider.cs} (88%) rename src/EditorFeatures/Core/InlineHints/{InlineParameterNameHintDataTag.cs => InlineHintDataTag.cs} (55%) rename src/EditorFeatures/Core/InlineHints/{InlineParameterNameHintsDataTaggerProvider.cs => InlineHintsDataTaggerProvider.cs} (88%) diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsFormatDefinition.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsFormatDefinition.cs similarity index 77% rename from src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsFormatDefinition.cs rename to src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsFormatDefinition.cs index 19c70996bb9fd..de151b1710d38 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsFormatDefinition.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsFormatDefinition.cs @@ -17,21 +17,21 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints internal sealed class ClassificationTypeDefinitions { [Export] - [Name(InlineParameterNameHintsTag.TagId)] + [Name(InlineHintsTag.TagId)] [BaseDefinition(PredefinedClassificationTypeNames.FormalLanguage)] - internal ClassificationTypeDefinition InlineParameterNameHints; + internal ClassificationTypeDefinition InlineHints; [Export(typeof(EditorFormatDefinition))] - [Name(InlineParameterNameHintsTag.TagId)] + [Name(InlineHintsTag.TagId)] [Order(After = LanguagePriority.NaturalLanguage, Before = LanguagePriority.FormalLanguage)] [UserVisible(true)] - internal sealed class InlineParameterNameHintsFormatDefinition : EditorFormatDefinition + internal sealed class InlineHintsFormatDefinition : EditorFormatDefinition { [ImportingConstructor] [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] - public InlineParameterNameHintsFormatDefinition() + public InlineHintsFormatDefinition() { - this.DisplayName = EditorFeaturesResources.Inline_Parameter_Name_Hints; + this.DisplayName = EditorFeaturesResources.Inline_Hints; this.ForegroundBrush = Brushes.Black; this.BackgroundBrush = Brushes.LightGray; } diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsTag.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs similarity index 70% rename from src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsTag.cs rename to src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs index b2ae66d9e45f7..8ad76c2ffe69b 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsTag.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs @@ -29,22 +29,23 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints /// This is the tag which implements the IntraTextAdornmentTag and is meant to create the UIElements that get shown /// in the editor /// - internal class InlineParameterNameHintsTag : IntraTextAdornmentTag + internal class InlineHintsTag : IntraTextAdornmentTag { - public const string TagId = "inline parameter name hints"; + public const string TagId = "inline hints"; + private readonly IToolTipService _toolTipService; private readonly ITextView _textView; private readonly SnapshotSpan _span; - private readonly SymbolKey _key; + private readonly SymbolKey? _key; private readonly IThreadingContext _threadingContext; private readonly Lazy _streamingPresenter; - private InlineParameterNameHintsTag( + private InlineHintsTag( FrameworkElement adornment, ITextView textView, SnapshotSpan span, - SymbolKey key, - InlineParameterNameHintsTaggerProvider taggerProvider) + SymbolKey? key, + InlineHintsTaggerProvider taggerProvider) : base(adornment, removalCallback: null, PositionAffinity.Predecessor) { _textView = textView; @@ -68,57 +69,64 @@ private InlineParameterNameHintsTag( /// The view of the editor /// The span that has the location of the hint /// The symbolkey associated with each parameter - public static InlineParameterNameHintsTag Create(string text, TextFormattingRunProperties format, - IWpfTextView textView, SnapshotSpan span, SymbolKey key, - InlineParameterNameHintsTaggerProvider taggerProvider) + public static InlineHintsTag Create( + string text, + TextFormattingRunProperties format, + IWpfTextView textView, + SnapshotSpan span, + SymbolKey? key, + InlineHintsTaggerProvider taggerProvider) { - return new InlineParameterNameHintsTag(CreateElement(text, textView, format), textView, - span, key, taggerProvider); + return new InlineHintsTag(CreateElement(text, textView, format), textView, span, key, taggerProvider); } public async Task> CreateDescriptionAsync(CancellationToken cancellationToken) { - var document = _textView.TextBuffer.CurrentSnapshot.GetOpenDocumentInCurrentContextWithChanges(); - var textContentBuilder = new List(); - - if (document != null) + if (_key != null) { - var compilation = await document.Project.GetRequiredCompilationAsync(cancellationToken).ConfigureAwait(false); - var symbol = _key.Resolve(compilation, cancellationToken: cancellationToken).Symbol; + var document = _span.Snapshot.TextBuffer.CurrentSnapshot.GetOpenDocumentInCurrentContextWithChanges(); - if (symbol != null) + if (document != null) { - var workspace = document.Project.Solution.Workspace; - var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); - var symbolDisplayService = document.Project.LanguageServices.GetRequiredService(); - var formatter = document.Project.LanguageServices.GetService(); - var sections = await symbolDisplayService.ToDescriptionGroupsAsync(workspace, semanticModel, _span.Start, ImmutableArray.Create(symbol), cancellationToken).ConfigureAwait(false); - textContentBuilder.AddRange(sections[SymbolDescriptionGroups.MainDescription]); - if (formatter != null) - { - var documentation = symbol.GetDocumentationParts(semanticModel, _span.Start, formatter, cancellationToken); + var compilation = await document.Project.GetRequiredCompilationAsync(cancellationToken).ConfigureAwait(false); + var symbol = _key.Value.Resolve(compilation, cancellationToken: cancellationToken).Symbol; - if (documentation.Any()) + if (symbol != null) + { + var textContentBuilder = new List(); + + var workspace = document.Project.Solution.Workspace; + var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); + var symbolDisplayService = document.GetRequiredLanguageService(); + var formatter = document.GetRequiredLanguageService(); + var sections = await symbolDisplayService.ToDescriptionGroupsAsync(workspace, semanticModel, _span.Start, ImmutableArray.Create(symbol), cancellationToken).ConfigureAwait(false); + textContentBuilder.AddRange(sections[SymbolDescriptionGroups.MainDescription]); + if (formatter != null) { - textContentBuilder.AddLineBreak(); - textContentBuilder.AddRange(documentation); + var documentation = symbol.GetDocumentationParts(semanticModel, _span.Start, formatter, cancellationToken); + + if (documentation.Any()) + { + textContentBuilder.AddLineBreak(); + textContentBuilder.AddRange(documentation); + } } - } - if (sections.TryGetValue(SymbolDescriptionGroups.AnonymousTypes, out var parts)) - { - if (!parts.IsDefaultOrEmpty) + if (sections.TryGetValue(SymbolDescriptionGroups.AnonymousTypes, out var parts)) { - textContentBuilder.AddLineBreak(); - textContentBuilder.AddLineBreak(); - textContentBuilder.AddRange(parts); + if (!parts.IsDefaultOrEmpty) + { + textContentBuilder.AddLineBreak(); + textContentBuilder.AddLineBreak(); + textContentBuilder.AddRange(parts); + } } + + var uiCollection = Implementation.IntelliSense.Helpers.BuildInteractiveTextElements(textContentBuilder.ToImmutableArray(), + document, _threadingContext, _streamingPresenter); + return uiCollection; } } - - var uiCollection = Implementation.IntelliSense.Helpers.BuildInteractiveTextElements(textContentBuilder.ToImmutableArray(), - document, _threadingContext, _streamingPresenter); - return uiCollection; } return Array.Empty(); diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsTagger.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs similarity index 83% rename from src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsTagger.cs rename to src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs index 5f81e0453b812..6d21bc756a864 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsTagger.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs @@ -15,13 +15,13 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints { /// - /// The purpose of this tagger is to convert the to - /// the , which actually creates the UIElement. It reacts to - /// tags changing and updates the adornments accordingly. + /// The purpose of this tagger is to convert the to the , which actually creates the UIElement. It reacts to tags changing and updates the + /// adornments accordingly. /// - internal sealed class InlineParameterNameHintsTagger : ITagger, IDisposable + internal sealed class InlineHintsTagger : ITagger, IDisposable { - private readonly ITagAggregator _tagAggregator; + private readonly ITagAggregator _tagAggregator; /// /// stores the parameter hint tags in a global location @@ -42,26 +42,30 @@ internal sealed class InlineParameterNameHintsTagger : ITagger? TagsChanged; - public InlineParameterNameHintsTagger(InlineParameterNameHintsTaggerProvider taggerProvider, IWpfTextView textView, ITextBuffer buffer, ITagAggregator tagAggregator) + public InlineHintsTagger( + InlineHintsTaggerProvider taggerProvider, + IWpfTextView textView, + ITextBuffer buffer, + ITagAggregator tagAggregator) { _cache = new List>(); _threadAffinitizedObject = new ForegroundThreadAffinitizedObject(taggerProvider.ThreadingContext); - _inlineParameterNameHintsTaggerProvider = taggerProvider; + _taggerProvider = taggerProvider; _textView = textView; _buffer = buffer; _tagAggregator = tagAggregator; _formatMap = taggerProvider.ClassificationFormatMapService.GetClassificationFormatMap(textView); - _hintClassification = taggerProvider.ClassificationTypeRegistryService.GetClassificationType(InlineParameterNameHintsTag.TagId); + _hintClassification = taggerProvider.ClassificationTypeRegistryService.GetClassificationType(InlineHintsTag.TagId); _formatMap.ClassificationFormatMappingChanged += this.OnClassificationFormatMappingChanged; _tagAggregator.TagsChanged += OnTagAggregatorTagsChanged; } @@ -125,8 +129,8 @@ public IEnumerable> GetTags(NormalizedSnapshotSp { var dataTagSpan = dataTagSpans[0]; var parameterHintSnapshotSpan = new SnapshotSpan(dataTagSpan.Start, 0); - var parameterHintUITag = InlineParameterNameHintsTag.Create(textTag.ParameterName, - Format, _textView, dataTagSpan, textTag.ParameterSymbolKey, _inlineParameterNameHintsTaggerProvider); + var parameterHintUITag = InlineHintsTag.Create( + textTag.Text, Format, _textView, dataTagSpan, textTag.SymbolKey, _taggerProvider); _cache.Add(new TagSpan(parameterHintSnapshotSpan, parameterHintUITag)); } diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsTaggerProvider.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTaggerProvider.cs similarity index 88% rename from src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsTaggerProvider.cs rename to src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTaggerProvider.cs index daefcb67ffbc5..ece2016751fa0 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineParameterNameHintsTaggerProvider.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTaggerProvider.cs @@ -24,8 +24,8 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints [Export(typeof(IViewTaggerProvider))] [ContentType(ContentTypeNames.RoslynContentType)] [TagType(typeof(IntraTextAdornmentTag))] - [Name(nameof(InlineParameterNameHintsTaggerProvider))] - internal class InlineParameterNameHintsTaggerProvider : IViewTaggerProvider + [Name(nameof(InlineHintsTaggerProvider))] + internal class InlineHintsTaggerProvider : IViewTaggerProvider { private readonly IViewTagAggregatorFactoryService _viewTagAggregatorFactoryService; public readonly IClassificationFormatMapService ClassificationFormatMapService; @@ -36,7 +36,7 @@ internal class InlineParameterNameHintsTaggerProvider : IViewTaggerProvider [ImportingConstructor] [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] - public InlineParameterNameHintsTaggerProvider( + public InlineHintsTaggerProvider( IViewTagAggregatorFactoryService viewTagAggregatorFactoryService, IClassificationFormatMapService classificationFormatMapService, IClassificationTypeRegistryService classificationTypeRegistryService, @@ -61,8 +61,8 @@ public InlineParameterNameHintsTaggerProvider( return null; } - var tagAggregator = _viewTagAggregatorFactoryService.CreateTagAggregator(textView); - return new InlineParameterNameHintsTagger(this, (IWpfTextView)textView, buffer, tagAggregator) as ITagger; + var tagAggregator = _viewTagAggregatorFactoryService.CreateTagAggregator(textView); + return new InlineHintsTagger(this, (IWpfTextView)textView, buffer, tagAggregator) as ITagger; } } } diff --git a/src/EditorFeatures/Core/EditorFeaturesResources.resx b/src/EditorFeatures/Core/EditorFeaturesResources.resx index e12d425a5a077..b3acd7a18475e 100644 --- a/src/EditorFeatures/Core/EditorFeaturesResources.resx +++ b/src/EditorFeatures/Core/EditorFeaturesResources.resx @@ -936,8 +936,8 @@ Do you want to proceed? (external) - - Inline Parameter Name Hints + + Inline Hints Error creating instance of CodeFixProvider '{0}' diff --git a/src/EditorFeatures/Core/InlineHints/InlineParameterNameHintDataTag.cs b/src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs similarity index 55% rename from src/EditorFeatures/Core/InlineHints/InlineParameterNameHintDataTag.cs rename to src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs index 226b065bc3ec1..a87110780723c 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineParameterNameHintDataTag.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs @@ -11,20 +11,18 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints /// The simple tag that only holds information regarding the associated parameter name /// for the argument /// - internal class InlineParameterNameHintDataTag : ITag + internal class InlineHintDataTag : ITag { - public readonly SymbolKey ParameterSymbolKey; - public readonly string ParameterName; + public readonly string Text; + public readonly SymbolKey? SymbolKey; - public InlineParameterNameHintDataTag(SymbolKey parameterSymbolKey, string parameterName) + public InlineHintDataTag(string text, SymbolKey? symbolKey) { - if (parameterName.Length == 0) - { - throw new ArgumentException("Must have a length greater than 0", nameof(parameterName)); - } + if (text.Length == 0) + throw new ArgumentException("Must have a length greater than 0", nameof(text)); - ParameterSymbolKey = parameterSymbolKey; - ParameterName = parameterName; + Text = text; + SymbolKey = symbolKey; } } } diff --git a/src/EditorFeatures/Core/InlineHints/InlineParameterNameHintsDataTaggerProvider.cs b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs similarity index 88% rename from src/EditorFeatures/Core/InlineHints/InlineParameterNameHintsDataTaggerProvider.cs rename to src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs index 89ae80bb39706..13939b143738b 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineParameterNameHintsDataTaggerProvider.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs @@ -27,9 +27,9 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints /// [Export(typeof(IViewTaggerProvider))] [ContentType(ContentTypeNames.RoslynContentType)] - [TagType(typeof(InlineParameterNameHintDataTag))] - [Name(nameof(InlineParameterNameHintsDataTaggerProvider))] - internal class InlineParameterNameHintsDataTaggerProvider : AsynchronousViewTaggerProvider + [TagType(typeof(InlineHintDataTag))] + [Name(nameof(InlineHintsDataTaggerProvider))] + internal class InlineHintsDataTaggerProvider : AsynchronousViewTaggerProvider { private readonly IAsynchronousOperationListener _listener; @@ -37,7 +37,7 @@ internal class InlineParameterNameHintsDataTaggerProvider : AsynchronousViewTagg [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] [ImportingConstructor] - public InlineParameterNameHintsDataTaggerProvider( + public InlineHintsDataTaggerProvider( IThreadingContext threadingContext, IAsynchronousOperationListenerProvider listenerProvider, IForegroundNotificationService notificationService) @@ -76,7 +76,7 @@ protected override IEnumerable GetSpansToTag(ITextView textView, I return SpecializedCollections.SingletonEnumerable(visibleSpanOpt.Value); } - protected override async Task ProduceTagsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, int? caretPosition) + protected override async Task ProduceTagsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, int? caretPosition) { var cancellationToken = context.CancellationToken; var document = documentSnapshotSpan.Document; @@ -91,11 +91,11 @@ protected override async Task ProduceTagsAsync(TaggerContext( + context.AddTag(new TagSpan( new SnapshotSpan(snapshotSpan.Snapshot, parameterHint.Position, 0), - new InlineParameterNameHintDataTag( - parameterHint.Parameter.GetSymbolKey(cancellationToken), - parameterHint.Parameter.Name))); + new InlineHintDataTag( + parameterHint.Parameter.Name, + parameterHint.Parameter.GetSymbolKey(cancellationToken)))); } } } diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.cs.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.cs.xlf index eb3bdc9abc207..612c4de0091b1 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.cs.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.cs.xlf @@ -77,9 +77,9 @@ Přejít na základní typ - - Inline Parameter Name Hints - Nápovědy k názvům vložených parametrů + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.de.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.de.xlf index 39fbb426d8974..8996d95829ab2 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.de.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.de.xlf @@ -77,9 +77,9 @@ Zu Basis wechseln - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.es.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.es.xlf index 072ed41b36a20..7a7eb082c9983 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.es.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.es.xlf @@ -77,9 +77,9 @@ Ir a base - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.fr.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.fr.xlf index b147a5775ea10..40946fff72a4c 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.fr.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.fr.xlf @@ -77,9 +77,9 @@ Accéder à la base - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.it.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.it.xlf index 2e1a7d77a8627..31703fea76a2e 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.it.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.it.xlf @@ -77,9 +77,9 @@ Vai a base - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ja.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ja.xlf index 83e3bb54f5c4f..f3accbbda67bf 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ja.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ja.xlf @@ -77,9 +77,9 @@ 基本へ移動 - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ko.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ko.xlf index f78de6ca7e666..31c59ead8db6d 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ko.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ko.xlf @@ -77,9 +77,9 @@ 기본으로 이동 - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.pl.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.pl.xlf index 47295051a5027..ee5d157df8658 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.pl.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.pl.xlf @@ -77,9 +77,9 @@ Przejdź do podstawy - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.pt-BR.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.pt-BR.xlf index cd4558d54ece8..0cae43970e1be 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.pt-BR.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.pt-BR.xlf @@ -77,9 +77,9 @@ Ir Para a Base - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ru.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ru.xlf index 682b877a4ea2d..d0b0819d0a7d4 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ru.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.ru.xlf @@ -77,9 +77,9 @@ Перейти к базовому - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.tr.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.tr.xlf index 7be0cb4db4642..102ec5ee07d7b 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.tr.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.tr.xlf @@ -77,9 +77,9 @@ Tabana Git - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.zh-Hans.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.zh-Hans.xlf index a5037ff8d868f..cc9df3e209b03 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.zh-Hans.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.zh-Hans.xlf @@ -77,9 +77,9 @@ 转到基础映像 - - Inline Parameter Name Hints - 内联参数名提示 + + Inline Hints + Inline Hints diff --git a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.zh-Hant.xlf b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.zh-Hant.xlf index c377644d5a8fb..533e0d1b4f736 100644 --- a/src/EditorFeatures/Core/xlf/EditorFeaturesResources.zh-Hant.xlf +++ b/src/EditorFeatures/Core/xlf/EditorFeaturesResources.zh-Hant.xlf @@ -77,9 +77,9 @@ 移至基底 - - Inline Parameter Name Hints - Inline Parameter Name Hints + + Inline Hints + Inline Hints diff --git a/src/Features/Core/Portable/InlineHints/InlineHintsOptions.cs b/src/Features/Core/Portable/InlineHints/InlineHintsOptions.cs index f5c50545b75ca..73e405ba19315 100644 --- a/src/Features/Core/Portable/InlineHints/InlineHintsOptions.cs +++ b/src/Features/Core/Portable/InlineHints/InlineHintsOptions.cs @@ -56,6 +56,24 @@ internal static class InlineHintsOptions nameof(SuppressForParametersThatMatchMethodIntent), defaultValue: true, storageLocations: new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Specific.InlineParameterNameHints.SuppressForParametersThatMatchMethodIntent")); + + public static readonly PerLanguageOption2 EnabledForTypes = + new(nameof(InlineHintsOptions), + nameof(EnabledForTypes), + defaultValue: false, + storageLocations: new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Specific.InlineTypeHints")); + + public static readonly PerLanguageOption2 ForImplicitVariableTypes = + new(nameof(InlineHintsOptions), + nameof(ForImplicitVariableTypes), + defaultValue: true, + storageLocations: new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Specific.InlineTypeHints.ForImplicitVariableTypes")); + + public static readonly PerLanguageOption2 ForLambdaParameterTypes = + new(nameof(InlineHintsOptions), + nameof(ForLambdaParameterTypes), + defaultValue: true, + storageLocations: new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Specific.InlineTypeHints.ForLambdaParameterTypes")); } [ExportOptionProvider, Shared] From 14bb7beecc383609b98d673fe6c5e353d5f7faf6 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 7 Oct 2020 16:28:26 -0700 Subject: [PATCH 04/68] Hints for types --- .../InlineHintsDataTaggerProvider.cs | 60 +++++++++++++---- .../CSharpInlineTypeHintsService.cs | 66 +++++++++++++++++++ ...AbstractInlineParameterNameHintsService.cs | 2 +- .../AbstractInlineTypeHintsService.cs | 35 ++++++++++ .../IInlineParameterNameHintsService.cs | 2 - .../InlineHints/IInlineTypeHintsService.cs | 17 +++++ .../Portable/InlineHints/InlineTypeHint.cs | 20 ++++++ 7 files changed, 185 insertions(+), 17 deletions(-) create mode 100644 src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs create mode 100644 src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs create mode 100644 src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs create mode 100644 src/Features/Core/Portable/InlineHints/InlineTypeHint.cs diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs index 13939b143738b..19ddbd216aaa3 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.Composition; +using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.Editor.Shared.Extensions; using Microsoft.CodeAnalysis.Editor.Shared.Tagging; @@ -31,6 +32,10 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints [Name(nameof(InlineHintsDataTaggerProvider))] internal class InlineHintsDataTaggerProvider : AsynchronousViewTaggerProvider { + private static SymbolDisplayFormat s_minimalTypeStyle = new SymbolDisplayFormat( + genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters, + miscellaneousOptions: SymbolDisplayMiscellaneousOptions.AllowDefaultLiteral | SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier | SymbolDisplayMiscellaneousOptions.UseSpecialTypes); + private readonly IAsynchronousOperationListener _listener; protected override SpanTrackingMode SpanTrackingMode => SpanTrackingMode.EdgeInclusive; @@ -79,24 +84,51 @@ protected override IEnumerable GetSpansToTag(ITextView textView, I protected override async Task ProduceTagsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, int? caretPosition) { var cancellationToken = context.CancellationToken; + await AddTypeHintsAsync(context, documentSnapshotSpan, cancellationToken).ConfigureAwait(false); + await AddParameterNameHintsAsync(context, documentSnapshotSpan, cancellationToken).ConfigureAwait(false); + } + + private async Task AddTypeHintsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, CancellationToken cancellationToken) + { + var document = documentSnapshotSpan.Document; + var service = document.GetLanguageService(); + if (service == null) + return; + + var snapshotSpan = documentSnapshotSpan.SnapshotSpan; + var hints = await service.GetInlineTypeHintsAsync(document, snapshotSpan.Span.ToTextSpan(), cancellationToken).ConfigureAwait(false); + foreach (var hint in hints) + { + Contract.ThrowIfNull(hint.Type); + + cancellationToken.ThrowIfCancellationRequested(); + context.AddTag(new TagSpan( + new SnapshotSpan(snapshotSpan.Snapshot, hint.Position, 0), + new InlineHintDataTag( + hint.Type.ToDisplayString(s_minimalTypeStyle), + hint.Type.GetSymbolKey(cancellationToken)))); + } + } + + private static async Task AddParameterNameHintsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, CancellationToken cancellationToken) + { var document = documentSnapshotSpan.Document; + var service = document.GetLanguageService(); + if (service == null) + return; var snapshotSpan = documentSnapshotSpan.SnapshotSpan; - var paramNameHintsService = document.GetLanguageService(); - if (paramNameHintsService != null) + var hints = await service.GetInlineParameterNameHintsAsync(document, snapshotSpan.Span.ToTextSpan(), cancellationToken).ConfigureAwait(false); + foreach (var hint in hints) { - var parameterHints = await paramNameHintsService.GetInlineParameterNameHintsAsync(document, snapshotSpan.Span.ToTextSpan(), cancellationToken).ConfigureAwait(false); - foreach (var parameterHint in parameterHints) - { - Contract.ThrowIfNull(parameterHint.Parameter); - - cancellationToken.ThrowIfCancellationRequested(); - context.AddTag(new TagSpan( - new SnapshotSpan(snapshotSpan.Snapshot, parameterHint.Position, 0), - new InlineHintDataTag( - parameterHint.Parameter.Name, - parameterHint.Parameter.GetSymbolKey(cancellationToken)))); - } + Contract.ThrowIfNull(hint.Parameter); + + cancellationToken.ThrowIfCancellationRequested(); + context.AddTag(new TagSpan( + new SnapshotSpan(snapshotSpan.Snapshot, hint.Position, 0), + new InlineHintDataTag( + hint.Parameter.Name, + hint.Parameter.GetSymbolKey(cancellationToken)))); } } } diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs new file mode 100644 index 0000000000000..d3bf1482f7c3d --- /dev/null +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs @@ -0,0 +1,66 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Composition; +using System.Diagnostics.CodeAnalysis; +using System.Threading; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Host.Mef; +using Microsoft.CodeAnalysis.InlineHints; + +namespace Microsoft.CodeAnalysis.CSharp.InlineHints +{ + [ExportLanguageService(typeof(IInlineTypeHintsService), LanguageNames.CSharp), Shared] + internal class CSharpInlineTypeHintsService : AbstractInlineTypeHintsService + { + [ImportingConstructor] + [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] + public CSharpInlineTypeHintsService() + { + } + + protected override InlineTypeHint? TryGetTypeHint( + SemanticModel semanticModel, + SyntaxNode node, + CancellationToken cancellationToken) + { + if (node is VariableDeclarationSyntax variableDeclaration && + variableDeclaration.Type.IsVar && + variableDeclaration.Variables.Count == 1 && + !variableDeclaration.Variables[0].Identifier.IsMissing) + { + var type = semanticModel.GetTypeInfo(variableDeclaration.Type, cancellationToken).Type; + if (IsValidType(type)) + return new InlineTypeHint(type, variableDeclaration.Variables[0].Identifier.SpanStart); + } + else if (node is SingleVariableDesignationSyntax variableDesignation) + { + var local = semanticModel.GetDeclaredSymbol(variableDesignation, cancellationToken) as ILocalSymbol; + var type = local?.Type; + if (IsValidType(type)) + return new InlineTypeHint(type, variableDesignation.Identifier.SpanStart); + } + else if (node is SimpleLambdaExpressionSyntax simpleLambda) + { + var parameter = semanticModel.GetDeclaredSymbol(simpleLambda.Parameter, cancellationToken); + if (IsValidType(parameter?.Type)) + return new InlineTypeHint(parameter.Type, simpleLambda.Parameter.Identifier.SpanStart); + } + else if (node is ParameterSyntax { Type: null } parameterNode) + { + var parameter = semanticModel.GetDeclaredSymbol(parameterNode, cancellationToken); + if (IsValidType(parameter?.Type)) + return new InlineTypeHint(parameter.Type, parameterNode.Identifier.SpanStart); + } + + return null; + } + + private static bool IsValidType([NotNullWhen(true)] ITypeSymbol? type) + { + return type is not null or IErrorTypeSymbol && type.Name != "var"; + } + } +} diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs index 8ef54685b4383..7537918a01607 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs @@ -46,7 +46,7 @@ public async Task> GetInlineParameterNameHin using var _1 = ArrayBuilder.GetInstance(out var result); using var _2 = ArrayBuilder.GetInstance(out var buffer); - foreach (var node in root.DescendantNodes(textSpan)) + foreach (var node in root.DescendantNodes(textSpan, n => n.Span.IntersectsWith(textSpan))) { cancellationToken.ThrowIfCancellationRequested(); AddAllParameterNameHintLocations(semanticModel, node, buffer, cancellationToken); diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs new file mode 100644 index 0000000000000..48aa2048c4996 --- /dev/null +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs @@ -0,0 +1,35 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Immutable; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.PooledObjects; +using Microsoft.CodeAnalysis.Shared.Extensions; +using Microsoft.CodeAnalysis.Text; + +namespace Microsoft.CodeAnalysis.InlineHints +{ + internal abstract class AbstractInlineTypeHintsService : IInlineTypeHintsService + { + protected abstract InlineTypeHint? TryGetTypeHint(SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken); + + public async Task> GetInlineTypeHintsAsync( + Document document, TextSpan textSpan, CancellationToken cancellationToken) + { + var root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); + + using var _ = ArrayBuilder.GetInstance(out var result); + + foreach (var node in root.DescendantNodes(n => n.Span.IntersectsWith(textSpan))) + { + result.AddIfNotNull(TryGetTypeHint(semanticModel, node, cancellationToken)); + } + + return result.ToImmutable(); + } + } +} diff --git a/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs b/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs index e149e2488e59e..58083b276ef4d 100644 --- a/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs @@ -2,12 +2,10 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System.Collections.Generic; using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.Host; -using Microsoft.CodeAnalysis.Options; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.InlineHints diff --git a/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs b/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs new file mode 100644 index 0000000000000..cf43cc1956d60 --- /dev/null +++ b/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Immutable; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.Host; +using Microsoft.CodeAnalysis.Text; + +namespace Microsoft.CodeAnalysis.InlineHints +{ + internal interface IInlineTypeHintsService : ILanguageService + { + Task> GetInlineTypeHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken); + } +} diff --git a/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs b/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs new file mode 100644 index 0000000000000..689b1aec40864 --- /dev/null +++ b/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace Microsoft.CodeAnalysis.InlineHints +{ + internal readonly struct InlineTypeHint + { + public readonly ITypeSymbol Type; + public readonly int Position; + + public InlineTypeHint( + ITypeSymbol type, + int position) + { + Type = type; + Position = position; + } + } +} From c4f17be79425baacadf503a309b90fe48896793b Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 7 Oct 2020 17:00:04 -0700 Subject: [PATCH 05/68] Support anonymous types --- .../Core.Wpf/InlineHints/InlineHintsTag.cs | 5 +- .../InlineHintsDataTaggerProvider.cs | 48 +++++++++++++++++-- .../CSharpAnonymousTypeDisplayService.cs | 8 ++-- .../AbstractAnonymousTypeDisplayService.cs | 3 +- .../IAnonymousTypeDisplayService.cs | 5 +- .../VisualBasicAnonymousTypeDisplayService.vb | 27 ++++++----- 6 files changed, 72 insertions(+), 24 deletions(-) diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs index 8ad76c2ffe69b..09047240b0c73 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs @@ -136,6 +136,7 @@ private static FrameworkElement CreateElement(string text, IWpfTextView textView { // Constructs the hint block which gets assigned parameter name and fontstyles according to the options // page. Calculates a font size 1/4 smaller than the font size of the rest of the editor + var right = text.EndsWith(":") ? 0 : 1; var block = new TextBlock { FontFamily = format.Typeface.FontFamily, @@ -145,8 +146,8 @@ private static FrameworkElement CreateElement(string text, IWpfTextView textView // Adds a little bit of padding to the left of the text relative to the border // to make the text seem more balanced in the border - Padding = new Thickness(left: 1, top: 0, right: 0, bottom: 0), - Text = text + ":", + Padding = new Thickness(left: 1, top: 0, right: right, bottom: 0), + Text = text, VerticalAlignment = VerticalAlignment.Center, }; diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs index 19ddbd216aaa3..1b8579eef6db4 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs @@ -13,6 +13,7 @@ using Microsoft.CodeAnalysis.Editor.Tagging; using Microsoft.CodeAnalysis.Host.Mef; using Microsoft.CodeAnalysis.InlineHints; +using Microsoft.CodeAnalysis.LanguageServices; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Shared.TestHooks; using Microsoft.VisualStudio.Text; @@ -32,7 +33,7 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints [Name(nameof(InlineHintsDataTaggerProvider))] internal class InlineHintsDataTaggerProvider : AsynchronousViewTaggerProvider { - private static SymbolDisplayFormat s_minimalTypeStyle = new SymbolDisplayFormat( + private static readonly SymbolDisplayFormat s_minimalTypeStyle = new SymbolDisplayFormat( genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters, miscellaneousOptions: SymbolDisplayMiscellaneousOptions.AllowDefaultLiteral | SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier | SymbolDisplayMiscellaneousOptions.UseSpecialTypes); @@ -95,21 +96,62 @@ private async Task AddTypeHintsAsync(TaggerContext context, D if (service == null) return; + var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); + var anonymousTypeService = document.GetRequiredLanguageService(); + var snapshotSpan = documentSnapshotSpan.SnapshotSpan; + var position = snapshotSpan.Span.Start; var hints = await service.GetInlineTypeHintsAsync(document, snapshotSpan.Span.ToTextSpan(), cancellationToken).ConfigureAwait(false); foreach (var hint in hints) { Contract.ThrowIfNull(hint.Type); + var sb = PooledStringBuilder.GetInstance(); + var parts = hint.Type.ToDisplayParts(s_minimalTypeStyle); + + AddParts(anonymousTypeService, sb, parts, semanticModel, position); + cancellationToken.ThrowIfCancellationRequested(); context.AddTag(new TagSpan( new SnapshotSpan(snapshotSpan.Snapshot, hint.Position, 0), new InlineHintDataTag( - hint.Type.ToDisplayString(s_minimalTypeStyle), + sb.ToStringAndFree(), hint.Type.GetSymbolKey(cancellationToken)))); } } + private void AddParts( + IAnonymousTypeDisplayService anonymousTypeService, + PooledStringBuilder sb, + System.Collections.Immutable.ImmutableArray parts, + SemanticModel semanticModel, + int position, + HashSet? seenSymbols = null) + { + seenSymbols ??= new(); + + foreach (var part in parts) + { + if (part.Symbol is INamedTypeSymbol { IsAnonymousType: true } anonymousType) + { + if (seenSymbols.Add(anonymousType)) + { + var anonymousParts = anonymousTypeService.GetAnonymousTypeParts(anonymousType, semanticModel, position); + AddParts(anonymousTypeService, sb, anonymousParts, semanticModel, position, seenSymbols); + seenSymbols.Remove(anonymousType); + } + else + { + sb.Builder.Append("..."); + } + } + else + { + sb.Builder.Append(part.ToString()); + } + } + } + private static async Task AddParameterNameHintsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, CancellationToken cancellationToken) { var document = documentSnapshotSpan.Document; @@ -127,7 +169,7 @@ private static async Task AddParameterNameHintsAsync(TaggerContext( new SnapshotSpan(snapshotSpan.Snapshot, hint.Position, 0), new InlineHintDataTag( - hint.Parameter.Name, + hint.Parameter.Name + ":", hint.Parameter.GetSymbolKey(cancellationToken)))); } } diff --git a/src/Features/CSharp/Portable/LanguageServices/CSharpAnonymousTypeDisplayService.cs b/src/Features/CSharp/Portable/LanguageServices/CSharpAnonymousTypeDisplayService.cs index 81441109e64a9..a67ec6bd8c17d 100644 --- a/src/Features/CSharp/Portable/LanguageServices/CSharpAnonymousTypeDisplayService.cs +++ b/src/Features/CSharp/Portable/LanguageServices/CSharpAnonymousTypeDisplayService.cs @@ -6,12 +6,14 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Composition; using System.Linq; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Extensions; using Microsoft.CodeAnalysis.Host.Mef; using Microsoft.CodeAnalysis.LanguageServices; +using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Shared.Extensions; namespace Microsoft.CodeAnalysis.Editor.CSharp.LanguageServices @@ -25,10 +27,10 @@ public CSharpAnonymousTypeDisplayService() { } - public override IEnumerable GetAnonymousTypeParts( + public override ImmutableArray GetAnonymousTypeParts( INamedTypeSymbol anonymousType, SemanticModel semanticModel, int position) { - var members = new List(); + using var _ = ArrayBuilder.GetInstance(out var members); members.Add(Keyword(SyntaxFacts.GetText(SyntaxKind.NewKeyword))); members.AddRange(Space()); @@ -53,7 +55,7 @@ public override IEnumerable GetAnonymousTypeParts( members.AddRange(Space()); members.Add(Punctuation(SyntaxFacts.GetText(SyntaxKind.CloseBraceToken))); - return members; + return members.ToImmutable(); } } } diff --git a/src/Features/Core/Portable/LanguageServices/AnonymousTypeDisplayService/AbstractAnonymousTypeDisplayService.cs b/src/Features/Core/Portable/LanguageServices/AnonymousTypeDisplayService/AbstractAnonymousTypeDisplayService.cs index a61cdb23ead1e..855260bce1d8d 100644 --- a/src/Features/Core/Portable/LanguageServices/AnonymousTypeDisplayService/AbstractAnonymousTypeDisplayService.cs +++ b/src/Features/Core/Portable/LanguageServices/AnonymousTypeDisplayService/AbstractAnonymousTypeDisplayService.cs @@ -5,6 +5,7 @@ #nullable disable using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; using Microsoft.CodeAnalysis; using Roslyn.Utilities; @@ -13,7 +14,7 @@ namespace Microsoft.CodeAnalysis.LanguageServices { internal abstract partial class AbstractAnonymousTypeDisplayService : IAnonymousTypeDisplayService { - public abstract IEnumerable GetAnonymousTypeParts( + public abstract ImmutableArray GetAnonymousTypeParts( INamedTypeSymbol anonymousType, SemanticModel semanticModel, int position); public AnonymousTypeDisplayInfo GetNormalAnonymousTypeDisplayInfo( diff --git a/src/Features/Core/Portable/LanguageServices/AnonymousTypeDisplayService/IAnonymousTypeDisplayService.cs b/src/Features/Core/Portable/LanguageServices/AnonymousTypeDisplayService/IAnonymousTypeDisplayService.cs index 61cf6e55722f4..2871ab58c2308 100644 --- a/src/Features/Core/Portable/LanguageServices/AnonymousTypeDisplayService/IAnonymousTypeDisplayService.cs +++ b/src/Features/Core/Portable/LanguageServices/AnonymousTypeDisplayService/IAnonymousTypeDisplayService.cs @@ -2,9 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System.Collections.Generic; +using System.Collections.Immutable; using Microsoft.CodeAnalysis.Host; namespace Microsoft.CodeAnalysis.LanguageServices @@ -17,7 +16,7 @@ AnonymousTypeDisplayInfo GetNormalAnonymousTypeDisplayInfo( SemanticModel semanticModel, int position); - IEnumerable GetAnonymousTypeParts( + ImmutableArray GetAnonymousTypeParts( INamedTypeSymbol anonymousType, SemanticModel semanticModel, int position); diff --git a/src/Features/VisualBasic/Portable/LanguageServices/VisualBasicAnonymousTypeDisplayService.vb b/src/Features/VisualBasic/Portable/LanguageServices/VisualBasicAnonymousTypeDisplayService.vb index d9fb3d3379124..6f8c8515459e5 100644 --- a/src/Features/VisualBasic/Portable/LanguageServices/VisualBasicAnonymousTypeDisplayService.vb +++ b/src/Features/VisualBasic/Portable/LanguageServices/VisualBasicAnonymousTypeDisplayService.vb @@ -2,9 +2,11 @@ ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. +Imports System.Collections.Immutable Imports System.Composition Imports Microsoft.CodeAnalysis.Host.Mef Imports Microsoft.CodeAnalysis.LanguageServices +Imports Microsoft.CodeAnalysis.PooledObjects Imports Microsoft.CodeAnalysis.VisualBasic Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.LanguageServices @@ -35,7 +37,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.LanguageServices Public Sub New() End Sub - Public Overrides Function GetAnonymousTypeParts(anonymousType As INamedTypeSymbol, semanticModel As SemanticModel, position As Integer) As IEnumerable(Of SymbolDisplayPart) + Public Overrides Function GetAnonymousTypeParts(anonymousType As INamedTypeSymbol, semanticModel As SemanticModel, position As Integer) As ImmutableArray(Of SymbolDisplayPart) If anonymousType.IsAnonymousDelegateType() Then Return GetDelegateAnonymousType(anonymousType, semanticModel, position) Else @@ -43,19 +45,20 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.LanguageServices End If End Function - Private Shared Function GetDelegateAnonymousType(anonymousType As INamedTypeSymbol, - semanticModel As SemanticModel, - position As Integer) As IList(Of SymbolDisplayPart) + Private Shared Function GetDelegateAnonymousType( + anonymousType As INamedTypeSymbol, + semanticModel As SemanticModel, + position As Integer) As ImmutableArray(Of SymbolDisplayPart) Dim method = anonymousType.DelegateInvokeMethod - Dim members = New List(Of SymbolDisplayPart)() + Dim members = ArrayBuilder(Of SymbolDisplayPart).GetInstance() members.Add(Punctuation("<")) members.AddRange(MassageDelegateParts( method, method.ToMinimalDisplayParts(semanticModel, position, s_anonymousDelegateFormat))) members.Add(Punctuation(">")) - Return members + Return members.ToImmutableAndFree() End Function Private Shared Function MassageDelegateParts(delegateInvoke As IMethodSymbol, @@ -77,10 +80,11 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.LanguageServices Return result End Function - Private Shared Function GetNormalAnonymousType(anonymousType As INamedTypeSymbol, - semanticModel As SemanticModel, - position As Integer) As IList(Of SymbolDisplayPart) - Dim members = New List(Of SymbolDisplayPart)() + Private Shared Function GetNormalAnonymousType( + anonymousType As INamedTypeSymbol, + semanticModel As SemanticModel, + position As Integer) As ImmutableArray(Of SymbolDisplayPart) + Dim members = ArrayBuilder(Of SymbolDisplayPart).GetInstance() members.Add(Keyword(SyntaxFacts.GetText(SyntaxKind.NewKeyword))) members.AddRange(Space()) @@ -112,8 +116,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.LanguageServices members.AddRange(Space()) members.Add(Punctuation(SyntaxFacts.GetText(SyntaxKind.CloseBraceToken))) - Return members + Return members.ToImmutableAndFree() End Function End Class - End Namespace From 8a3b5ae413590151c6d04eba8613517cc032589c Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 7 Oct 2020 17:07:45 -0700 Subject: [PATCH 06/68] Pass along options --- .../CSharpInlineTypeHintsService.cs | 57 +++++++++++-------- .../AbstractInlineTypeHintsService.cs | 23 +++++++- 2 files changed, 54 insertions(+), 26 deletions(-) diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs index d3bf1482f7c3d..4d9c9bbc86e97 100644 --- a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs @@ -24,35 +24,44 @@ public CSharpInlineTypeHintsService() protected override InlineTypeHint? TryGetTypeHint( SemanticModel semanticModel, SyntaxNode node, + bool forImplicitVariableTypes, + bool forLambdaParameterTypes, CancellationToken cancellationToken) { - if (node is VariableDeclarationSyntax variableDeclaration && - variableDeclaration.Type.IsVar && - variableDeclaration.Variables.Count == 1 && - !variableDeclaration.Variables[0].Identifier.IsMissing) + if (forImplicitVariableTypes) { - var type = semanticModel.GetTypeInfo(variableDeclaration.Type, cancellationToken).Type; - if (IsValidType(type)) - return new InlineTypeHint(type, variableDeclaration.Variables[0].Identifier.SpanStart); + if (node is VariableDeclarationSyntax variableDeclaration && + variableDeclaration.Type.IsVar && + variableDeclaration.Variables.Count == 1 && + !variableDeclaration.Variables[0].Identifier.IsMissing) + { + var type = semanticModel.GetTypeInfo(variableDeclaration.Type, cancellationToken).Type; + if (IsValidType(type)) + return new InlineTypeHint(type, variableDeclaration.Variables[0].Identifier.SpanStart); + } + else if (node is SingleVariableDesignationSyntax variableDesignation) + { + var local = semanticModel.GetDeclaredSymbol(variableDesignation, cancellationToken) as ILocalSymbol; + var type = local?.Type; + if (IsValidType(type)) + return new InlineTypeHint(type, variableDesignation.Identifier.SpanStart); + } } - else if (node is SingleVariableDesignationSyntax variableDesignation) - { - var local = semanticModel.GetDeclaredSymbol(variableDesignation, cancellationToken) as ILocalSymbol; - var type = local?.Type; - if (IsValidType(type)) - return new InlineTypeHint(type, variableDesignation.Identifier.SpanStart); - } - else if (node is SimpleLambdaExpressionSyntax simpleLambda) - { - var parameter = semanticModel.GetDeclaredSymbol(simpleLambda.Parameter, cancellationToken); - if (IsValidType(parameter?.Type)) - return new InlineTypeHint(parameter.Type, simpleLambda.Parameter.Identifier.SpanStart); - } - else if (node is ParameterSyntax { Type: null } parameterNode) + + if (forLambdaParameterTypes) { - var parameter = semanticModel.GetDeclaredSymbol(parameterNode, cancellationToken); - if (IsValidType(parameter?.Type)) - return new InlineTypeHint(parameter.Type, parameterNode.Identifier.SpanStart); + if (node is SimpleLambdaExpressionSyntax simpleLambda) + { + var parameter = semanticModel.GetDeclaredSymbol(simpleLambda.Parameter, cancellationToken); + if (IsValidType(parameter?.Type)) + return new InlineTypeHint(parameter.Type, simpleLambda.Parameter.Identifier.SpanStart); + } + else if (node is ParameterSyntax { Type: null } parameterNode) + { + var parameter = semanticModel.GetDeclaredSymbol(parameterNode, cancellationToken); + if (IsValidType(parameter?.Type)) + return new InlineTypeHint(parameter.Type, parameterNode.Identifier.SpanStart); + } } return null; diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs index 48aa2048c4996..ee8a4e750c5bf 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs @@ -14,11 +14,27 @@ namespace Microsoft.CodeAnalysis.InlineHints { internal abstract class AbstractInlineTypeHintsService : IInlineTypeHintsService { - protected abstract InlineTypeHint? TryGetTypeHint(SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken); + protected abstract InlineTypeHint? TryGetTypeHint( + SemanticModel semanticModel, SyntaxNode node, + bool forImplicitVariableTypes, + bool forLambdaParameterTypes, + CancellationToken cancellationToken); public async Task> GetInlineTypeHintsAsync( Document document, TextSpan textSpan, CancellationToken cancellationToken) { + var options = await document.GetOptionsAsync(cancellationToken).ConfigureAwait(false); + + var displayAllOverride = options.GetOption(InlineHintsOptions.DisplayAllOverride); + var enabledForTypes = displayAllOverride || options.GetOption(InlineHintsOptions.EnabledForTypes); + if (!enabledForTypes) + return ImmutableArray.Empty; + + var forImplicitVariableTypes = displayAllOverride || options.GetOption(InlineHintsOptions.ForImplicitVariableTypes); + var forLambdaParameterTypes = displayAllOverride || options.GetOption(InlineHintsOptions.ForLambdaParameterTypes); + if (!forImplicitVariableTypes && !forLambdaParameterTypes) + return ImmutableArray.Empty; + var root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); @@ -26,7 +42,10 @@ public async Task> GetInlineTypeHintsAsync( foreach (var node in root.DescendantNodes(n => n.Span.IntersectsWith(textSpan))) { - result.AddIfNotNull(TryGetTypeHint(semanticModel, node, cancellationToken)); + result.AddIfNotNull(TryGetTypeHint( + semanticModel, node, + forImplicitVariableTypes, + forLambdaParameterTypes, cancellationToken)); } return result.ToImmutable(); From 237721be7aa94e63e24db16071998cb2a8db3579 Mon Sep 17 00:00:00 2001 From: Jason Malinowski Date: Wed, 7 Oct 2020 17:17:50 -0700 Subject: [PATCH 07/68] Update documentation for new minimum dependencies --- .../Building, Debugging, and Testing on Windows.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/contributing/Building, Debugging, and Testing on Windows.md b/docs/contributing/Building, Debugging, and Testing on Windows.md index 5f3950f7c7117..3a8a644479159 100644 --- a/docs/contributing/Building, Debugging, and Testing on Windows.md +++ b/docs/contributing/Building, Debugging, and Testing on Windows.md @@ -17,10 +17,10 @@ The minimal required version of .NET Framework is 4.7.2. 1. [Visual Studio 2019 16.8p2](https://visualstudio.microsoft.com/downloads/) - Ensure C#, VB, MSBuild, .NET Core and Visual Studio Extensibility are included in the selected work loads - - Ensure Visual Studio is on Version "16.8 Preview 2" or greater + - Ensure Visual Studio is on Version "16.8 Preview 3" or greater - Ensure "Use previews of the .NET Core SDK" is checked in Tools -> Options -> Environment -> Preview Features - Restart Visual Studio -1. [.NET Core SDK 5.0 Preview 8](https://dotnet.microsoft.com/download/dotnet-core/5.0) [Windows x64 installer](https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.100-preview.8-windows-x64-installer) +1. [.NET Core SDK 5.0 Release Candidate 1](https://dotnet.microsoft.com/download/dotnet-core/5.0) [Windows x64 installer](https://dotnet.microsoft.com/download/dotnet-core/thank-you/sdk-5.0.100-rc.1-windows-x64-installer) 1. [PowerShell 5.0 or newer](https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-windows-powershell). If you are on Windows 10, you are fine; you'll only need to upgrade if you're on earlier versions of Windows. The download link is under the ["Upgrading existing Windows PowerShell"](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-windows-powershell?view=powershell-6#upgrading-existing-windows-powershell) heading. 1. Run Restore.cmd 1. Open Roslyn.sln From 2742d9ffe433795e1832302439119694adbfae86 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 7 Oct 2020 17:25:00 -0700 Subject: [PATCH 08/68] Add UI options --- ...AbstractInlineParameterNameHintsService.cs | 8 ++--- .../Options/AdvancedOptionPageControl.xaml | 12 +++++++ .../Options/AdvancedOptionPageControl.xaml.cs | 34 +++++++++++++++---- .../Impl/Options/AdvancedOptionPageStrings.cs | 17 ++++++---- .../Core/Def/ServicesVSResources.resx | 9 +++++ .../Core/Def/xlf/ServicesVSResources.cs.xlf | 15 ++++++++ .../Core/Def/xlf/ServicesVSResources.de.xlf | 15 ++++++++ .../Core/Def/xlf/ServicesVSResources.es.xlf | 15 ++++++++ .../Core/Def/xlf/ServicesVSResources.fr.xlf | 15 ++++++++ .../Core/Def/xlf/ServicesVSResources.it.xlf | 15 ++++++++ .../Core/Def/xlf/ServicesVSResources.ja.xlf | 15 ++++++++ .../Core/Def/xlf/ServicesVSResources.ko.xlf | 15 ++++++++ .../Core/Def/xlf/ServicesVSResources.pl.xlf | 15 ++++++++ .../Def/xlf/ServicesVSResources.pt-BR.xlf | 15 ++++++++ .../Core/Def/xlf/ServicesVSResources.ru.xlf | 15 ++++++++ .../Core/Def/xlf/ServicesVSResources.tr.xlf | 15 ++++++++ .../Def/xlf/ServicesVSResources.zh-Hans.xlf | 15 ++++++++ .../Def/xlf/ServicesVSResources.zh-Hant.xlf | 15 ++++++++ 18 files changed, 258 insertions(+), 17 deletions(-) diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs index 7537918a01607..4e76b6257480d 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs @@ -27,8 +27,8 @@ public async Task> GetInlineParameterNameHin var displayAllOverride = options.GetOption(InlineHintsOptions.DisplayAllOverride); - var forParameters = displayAllOverride || options.GetOption(InlineHintsOptions.EnabledForParameters); - if (!forParameters) + var enabledForParameters = displayAllOverride || options.GetOption(InlineHintsOptions.EnabledForParameters); + if (!enabledForParameters) return ImmutableArray.Empty; var literalParameters = displayAllOverride || options.GetOption(InlineHintsOptions.ForLiteralParameters); @@ -37,8 +37,8 @@ public async Task> GetInlineParameterNameHin if (!literalParameters && !objectCreationParameters && !otherParameters) return ImmutableArray.Empty; - var suppressForParametersThatDifferOnlyBySuffix = options.GetOption(InlineHintsOptions.SuppressForParametersThatDifferOnlyBySuffix); - var suppressForParametersThatMatchMethodIntent = options.GetOption(InlineHintsOptions.SuppressForParametersThatMatchMethodIntent); + var suppressForParametersThatDifferOnlyBySuffix = !displayAllOverride && options.GetOption(InlineHintsOptions.SuppressForParametersThatDifferOnlyBySuffix); + var suppressForParametersThatMatchMethodIntent = !displayAllOverride && options.GetOption(InlineHintsOptions.SuppressForParametersThatMatchMethodIntent); var root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); diff --git a/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml b/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml index b4086292a4d1c..3b355cc171f02 100644 --- a/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml +++ b/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml @@ -211,6 +211,18 @@ x:Name="SuppressHintsWhenParameterNamesDifferOnlyBySuffix" Content="{x:Static local:AdvancedOptionPageStrings.Option_Suppress_hints_when_parameter_names_differ_only_by_suffix}" /> + + + + + diff --git a/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml.cs b/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml.cs index f78aebcd20e3b..719a5ef1dfe35 100644 --- a/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml.cs +++ b/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml.cs @@ -65,13 +65,6 @@ public AdvancedOptionPageControl(OptionStore optionStore, IComponentModel compon BindToOption(InsertSlashSlashAtTheStartOfNewLinesWhenWritingSingleLineComments, SplitStringLiteralOptions.Enabled, LanguageNames.CSharp); BindToOption(InsertAsteriskAtTheStartOfNewLinesWhenWritingBlockComments, FeatureOnOffOptions.AutoInsertBlockCommentStartString, LanguageNames.CSharp); - BindToOption(DisplayInlineParameterNameHints, InlineHintsOptions.EnabledForParameters, LanguageNames.CSharp); - BindToOption(ShowHintsForLiterals, InlineHintsOptions.ForLiteralParameters, LanguageNames.CSharp); - BindToOption(ShowHintsForNewExpressions, InlineHintsOptions.ForObjectCreationParameters, LanguageNames.CSharp); - BindToOption(ShowHintsForEverythingElse, InlineHintsOptions.ForOtherParameters, LanguageNames.CSharp); - BindToOption(SuppressHintsWhenParameterNameMatchesTheMethodsIntent, InlineHintsOptions.SuppressForParametersThatMatchMethodIntent, LanguageNames.CSharp); - BindToOption(SuppressHintsWhenParameterNamesDifferOnlyBySuffix, InlineHintsOptions.SuppressForParametersThatDifferOnlyBySuffix, LanguageNames.CSharp); - BindToOption(ShowRemarksInQuickInfo, QuickInfoOptions.ShowRemarksInQuickInfo, LanguageNames.CSharp); BindToOption(DisplayLineSeparators, FeatureOnOffOptions.LineSeparator, LanguageNames.CSharp); BindToOption(EnableHighlightReferences, FeatureOnOffOptions.ReferenceHighlighting, LanguageNames.CSharp); @@ -94,6 +87,17 @@ public AdvancedOptionPageControl(OptionStore optionStore, IComponentModel compon BindToOption(Show_completion_list, RegularExpressionsOptions.ProvideRegexCompletions, LanguageNames.CSharp); BindToOption(Editor_color_scheme, ColorSchemeOptions.ColorScheme); + + BindToOption(DisplayInlineParameterNameHints, InlineHintsOptions.EnabledForParameters, LanguageNames.CSharp); + BindToOption(ShowHintsForLiterals, InlineHintsOptions.ForLiteralParameters, LanguageNames.CSharp); + BindToOption(ShowHintsForNewExpressions, InlineHintsOptions.ForObjectCreationParameters, LanguageNames.CSharp); + BindToOption(ShowHintsForEverythingElse, InlineHintsOptions.ForOtherParameters, LanguageNames.CSharp); + BindToOption(SuppressHintsWhenParameterNameMatchesTheMethodsIntent, InlineHintsOptions.SuppressForParametersThatMatchMethodIntent, LanguageNames.CSharp); + BindToOption(SuppressHintsWhenParameterNamesDifferOnlyBySuffix, InlineHintsOptions.SuppressForParametersThatDifferOnlyBySuffix, LanguageNames.CSharp); + + BindToOption(DisplayInlineTypeHints, InlineHintsOptions.EnabledForTypes, LanguageNames.CSharp); + BindToOption(ShowHintsForVariablesWithInferredTypes, InlineHintsOptions.ForImplicitVariableTypes, LanguageNames.CSharp); + BindToOption(ShowHintsForLambdaParameterTypes, InlineHintsOptions.ForLambdaParameterTypes, LanguageNames.CSharp); } // Since this dialog is constructed once for the lifetime of the application and VS Theme can be changed after the application has started, @@ -120,6 +124,10 @@ private void UpdateInlineHintsOptions() ShowHintsForEverythingElse.IsEnabled = enabledForParameters; SuppressHintsWhenParameterNameMatchesTheMethodsIntent.IsEnabled = enabledForParameters; SuppressHintsWhenParameterNamesDifferOnlyBySuffix.IsEnabled = enabledForParameters; + + var enabledForTypes = this.OptionStore.GetOption(InlineHintsOptions.EnabledForTypes, LanguageNames.CSharp); + ShowHintsForVariablesWithInferredTypes.IsEnabled = enabledForTypes; + ShowHintsForLambdaParameterTypes.IsEnabled = enabledForTypes; } private void DisplayInlineParameterNameHints_Checked(object sender, RoutedEventArgs e) @@ -133,5 +141,17 @@ private void DisplayInlineParameterNameHints_Unchecked(object sender, RoutedEven this.OptionStore.SetOption(InlineHintsOptions.EnabledForParameters, LanguageNames.CSharp, false); UpdateInlineHintsOptions(); } + + private void DisplayInlineTypeHints_Checked(object sender, RoutedEventArgs e) + { + this.OptionStore.SetOption(InlineHintsOptions.EnabledForTypes, LanguageNames.CSharp, true); + UpdateInlineHintsOptions(); + } + + private void DisplayInlineTypeHints_Unchecked(object sender, RoutedEventArgs e) + { + this.OptionStore.SetOption(InlineHintsOptions.EnabledForTypes, LanguageNames.CSharp, false); + UpdateInlineHintsOptions(); + } } } diff --git a/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageStrings.cs b/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageStrings.cs index 220204787d81e..abca35ce90281 100644 --- a/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageStrings.cs +++ b/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageStrings.cs @@ -52,13 +52,20 @@ public static string Option_Suppress_hints_when_parameter_name_matches_the_metho public static string Option_Suppress_hints_when_parameter_names_differ_only_by_suffix => ServicesVSResources.Suppress_hints_when_parameter_names_differ_only_by_suffix; + public static string Option_Display_inline_type_hints + => ServicesVSResources.Display_inline_type_hints; + + public static string Option_Show_hints_for_variables_with_inferred_types + => ServicesVSResources.Show_hints_for_variables_with_inferred_types; + + public static string Option_Show_hints_for_lambda_parameter_types + => ServicesVSResources.Show_hints_for_lambda_parameter_types; + public static string Option_RenameTrackingPreview => CSharpVSResources.Show_preview_for_rename_tracking; public static string Option_Split_string_literals_on_enter => CSharpVSResources.Split_string_literals_on_enter; public static string Option_DisplayLineSeparators - { - get { return CSharpVSResources.Show_procedure_line_separators; } - } + => CSharpVSResources.Show_procedure_line_separators; public static string Option_DontPutOutOrRefOnStruct { @@ -122,9 +129,7 @@ public static string Option_InsertAsteriskAtTheStartOfNewLinesWhenWritingBlockCo => CSharpVSResources.Insert_at_the_start_of_new_lines_when_writing_comments; public static string Option_ShowRemarksInQuickInfo - { - get { return CSharpVSResources.Show_remarks_in_Quick_Info; } - } + => CSharpVSResources.Show_remarks_in_Quick_Info; public static string Option_Highlighting { diff --git a/src/VisualStudio/Core/Def/ServicesVSResources.resx b/src/VisualStudio/Core/Def/ServicesVSResources.resx index df5db42c3c1f2..682e76994843b 100644 --- a/src/VisualStudio/Core/Def/ServicesVSResources.resx +++ b/src/VisualStudio/Core/Def/ServicesVSResources.resx @@ -1572,4 +1572,13 @@ I agree to all of the foregoing: Suppress hints when parameter names differ only by suffix + + Display inline type hints + + + Show hints for lambda parameter types + + + Show hints for variables with inferred types + \ No newline at end of file diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.cs.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.cs.xlf index 5233a5a0f46d6..e1831a9497013 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.cs.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.cs.xlf @@ -182,6 +182,11 @@ Zobrazovat nápovědy k názvům v_ložených parametrů (experimentální) + + Display inline type hints + Display inline type hints + + _Edit _Upravit @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. Některé barvy barevného schématu se přepsaly změnami na stránce možností Prostředí > Písma a barvy. Pokud chcete zrušit všechna přizpůsobení, vyberte na stránce Písma a barvy možnost Použít výchozí. diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.de.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.de.xlf index 02e55aa884793..b1100b3c81093 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.de.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.de.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit _Bearbeiten @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. Einige Farbschemafarben werden durch Änderungen überschrieben, die auf der Optionsseite "Umgebung" > "Schriftarten und Farben" vorgenommen wurden. Wählen Sie auf der Seite "Schriftarten und Farben" die Option "Standardwerte verwenden" aus, um alle Anpassungen rückgängig zu machen. diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.es.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.es.xlf index 3a6ef9cfba573..7ee835458614c 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.es.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.es.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit _Editar @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. Algunos de los colores de la combinación se reemplazan por los cambios realizados en la página de opciones de Entorno > Fuentes y colores. Elija "Usar valores predeterminados" en la página Fuentes y colores para revertir todas las personalizaciones. diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.fr.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.fr.xlf index fc136cdb9e01f..69898515c1118 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.fr.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.fr.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit _Modifier @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. Certaines couleurs du modèle de couleurs sont substituées à la suite des changements apportés dans la page d'options Environnement > Polices et couleurs. Choisissez Utiliser les valeurs par défaut dans la page Polices et couleurs pour restaurer toutes les personnalisations. diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.it.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.it.xlf index 7e662d6bc2dd0..57e7c47c5346d 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.it.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.it.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit _Modifica @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. Alcuni colori della combinazione colori sono sostituiti dalle modifiche apportate nella pagina di opzioni Ambiente > Tipi di carattere e colori. Scegliere `Usa impostazioni predefinite` nella pagina Tipi di carattere e colori per ripristinare tutte le personalizzazioni. diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ja.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ja.xlf index b3eb9352f4588..d5e4a9ee5687a 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ja.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ja.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit 編集(_E) @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. 一部の配色パターンの色は、[環境] > [フォントおよび色] オプション ページで行われた変更によって上書きされます。[フォントおよび色] オプション ページで [既定値を使用] を選択すると、すべてのカスタマイズが元に戻ります。 diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ko.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ko.xlf index ac9ebada5e8d6..a82298ed19ddb 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ko.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ko.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit 편집(_E) @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. 색 구성표의 일부 색이 [환경] > [글꼴 및 색] 옵션 페이지에서 변경한 내용에 따라 재정의됩니다. 모든 사용자 지정을 되돌리려면 [글꼴 및 색] 페이지에서 '기본값 사용'을 선택하세요. diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pl.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pl.xlf index 4c43507f25b85..9bf08a479a16a 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pl.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pl.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit _Edytuj @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. Niektóre kolory w schemacie kolorów są przesłaniane przez zmiany wprowadzone na stronie opcji Środowisko > Czcionki i kolory. Wybierz pozycję „Użyj ustawień domyślnych” na stronie Czcionki i kolory, aby wycofać wszystkie dostosowania. diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pt-BR.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pt-BR.xlf index c847ff53c3d9f..40e52c3ff6ca7 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pt-BR.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pt-BR.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit _Editar @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. Algumas cores do esquema de cores estão sendo substituídas pelas alterações feitas na página de Ambiente > Opções de Fontes e Cores. Escolha 'Usar Padrões' na página Fontes e Cores para reverter todas as personalizações. diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ru.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ru.xlf index b08c35026b105..c43c6e0d82f69 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ru.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ru.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit _Изменить @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. Некоторые цвета цветовой схемы переопределяются изменениями, сделанными на странице "Среда" > "Шрифты и цвета". Выберите "Использовать значения по умолчанию" на странице "Шрифты и цвета", чтобы отменить все настройки. diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.tr.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.tr.xlf index 20919710d992b..dd3cb15bd4ed3 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.tr.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.tr.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit _Düzenle @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. Bazı renk düzeni renkleri, Ortam > Yazı Tipleri ve Renkler seçenek sayfasında yapılan değişiklikler tarafından geçersiz kılınıyor. Tüm özelleştirmeleri geri döndürmek için Yazı Tipleri ve Renkler sayfasında `Varsayılanları Kullan` seçeneğini belirleyin. diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hans.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hans.xlf index aebf4c0a3e88d..ee5483430bda7 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hans.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hans.xlf @@ -182,6 +182,11 @@ 显示内联参数名称提示(实验)(_L) + + Display inline type hints + Display inline type hints + + _Edit 编辑(_E) @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. 在“环境”>“字体和颜色”选项页中所做的更改将替代某些配色方案颜色。在“字体和颜色”页中选择“使用默认值”,还原所有自定义项。 diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hant.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hant.xlf index 1a190de2af1fd..bfe09224de904 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hant.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hant.xlf @@ -182,6 +182,11 @@ Disp_lay inline parameter name hints + + Display inline type hints + Display inline type hints + + _Edit 編輯(_E) @@ -782,11 +787,21 @@ Show hints for everything else + + Show hints for lambda parameter types + Show hints for lambda parameter types + + Show hints for literals Show hints for literals + + Show hints for variables with inferred types + Show hints for variables with inferred types + + Some color scheme colors are being overridden by changes made in the Environment > Fonts and Colors options page. Choose `Use Defaults` in the Fonts and Colors page to revert all customizations. [環境] > [字型和色彩選項] 頁面中所做的變更覆寫了某些色彩配置的色彩。請選擇 [字型和色彩] 頁面中的 [使用預設] 來還原所有自訂。 From 47047cc194c18e721f3ca9246e7844f57e9ff2ec Mon Sep 17 00:00:00 2001 From: Sam Harwell Date: Wed, 7 Oct 2020 18:40:34 -0700 Subject: [PATCH 09/68] Add timeout to IApexAsynchronousOperationListenerProviderAccessor.WaitAllAsync Closes #48423 --- .../Apex/ApexAsynchronousOperationListenerProviderAccessor.cs | 4 ++-- .../IApexAsynchronousOperationListenerProviderAccessor.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Tools/ExternalAccess/Apex/ApexAsynchronousOperationListenerProviderAccessor.cs b/src/Tools/ExternalAccess/Apex/ApexAsynchronousOperationListenerProviderAccessor.cs index d6b320613d5c0..d6de1909b8716 100644 --- a/src/Tools/ExternalAccess/Apex/ApexAsynchronousOperationListenerProviderAccessor.cs +++ b/src/Tools/ExternalAccess/Apex/ApexAsynchronousOperationListenerProviderAccessor.cs @@ -28,7 +28,7 @@ public ApexAsynchronousOperationListenerProviderAccessor( _workspace = workspace; } - public Task WaitAllAsync(string[]? featureNames = null, Action? eventProcessingAction = null) - => _implementation.WaitAllAsync(_workspace, featureNames, eventProcessingAction); + public Task WaitAllAsync(string[]? featureNames = null, Action? eventProcessingAction = null, TimeSpan? timeout = null) + => _implementation.WaitAllAsync(_workspace, featureNames, eventProcessingAction, timeout); } } diff --git a/src/Tools/ExternalAccess/Apex/IApexAsynchronousOperationListenerProviderAccessor.cs b/src/Tools/ExternalAccess/Apex/IApexAsynchronousOperationListenerProviderAccessor.cs index b79123e17a867..df11ab995f128 100644 --- a/src/Tools/ExternalAccess/Apex/IApexAsynchronousOperationListenerProviderAccessor.cs +++ b/src/Tools/ExternalAccess/Apex/IApexAsynchronousOperationListenerProviderAccessor.cs @@ -11,6 +11,6 @@ namespace Microsoft.CodeAnalysis.ExternalAccess.Apex { internal interface IApexAsynchronousOperationListenerProviderAccessor { - Task WaitAllAsync(string[] featureNames = null, Action eventProcessingAction = null); + Task WaitAllAsync(string[] featureNames = null, Action eventProcessingAction = null, TimeSpan? timeout = null); } } From 60b0f4eaaf9280aceaa981b17cda5a6036682a09 Mon Sep 17 00:00:00 2001 From: Sam Harwell Date: Thu, 8 Oct 2020 07:57:34 -0700 Subject: [PATCH 10/68] Remove the X86 platform from Roslyn.sln This platform is not used by the build. --- Roslyn.sln | 660 ----------------------------------------------------- 1 file changed, 660 deletions(-) diff --git a/Roslyn.sln b/Roslyn.sln index 7150215f42caf..9fecacb0a11f4 100644 --- a/Roslyn.sln +++ b/Roslyn.sln @@ -549,1335 +549,675 @@ Global EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {600AF682-E097-407B-AD85-EE3CED37E680}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {600AF682-E097-407B-AD85-EE3CED37E680}.Debug|Any CPU.Build.0 = Debug|Any CPU - {600AF682-E097-407B-AD85-EE3CED37E680}.Debug|x86.ActiveCfg = Debug|Any CPU - {600AF682-E097-407B-AD85-EE3CED37E680}.Debug|x86.Build.0 = Debug|Any CPU {600AF682-E097-407B-AD85-EE3CED37E680}.Release|Any CPU.ActiveCfg = Release|Any CPU {600AF682-E097-407B-AD85-EE3CED37E680}.Release|Any CPU.Build.0 = Release|Any CPU - {600AF682-E097-407B-AD85-EE3CED37E680}.Release|x86.ActiveCfg = Release|Any CPU - {600AF682-E097-407B-AD85-EE3CED37E680}.Release|x86.Build.0 = Release|Any CPU {A4C99B85-765C-4C65-9C2A-BB609AAB09E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A4C99B85-765C-4C65-9C2A-BB609AAB09E6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A4C99B85-765C-4C65-9C2A-BB609AAB09E6}.Debug|x86.ActiveCfg = Debug|Any CPU - {A4C99B85-765C-4C65-9C2A-BB609AAB09E6}.Debug|x86.Build.0 = Debug|Any CPU {A4C99B85-765C-4C65-9C2A-BB609AAB09E6}.Release|Any CPU.ActiveCfg = Release|Any CPU {A4C99B85-765C-4C65-9C2A-BB609AAB09E6}.Release|Any CPU.Build.0 = Release|Any CPU - {A4C99B85-765C-4C65-9C2A-BB609AAB09E6}.Release|x86.ActiveCfg = Release|Any CPU - {A4C99B85-765C-4C65-9C2A-BB609AAB09E6}.Release|x86.Build.0 = Release|Any CPU {1EE8CAD3-55F9-4D91-96B2-084641DA9A6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1EE8CAD3-55F9-4D91-96B2-084641DA9A6C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1EE8CAD3-55F9-4D91-96B2-084641DA9A6C}.Debug|x86.ActiveCfg = Debug|Any CPU - {1EE8CAD3-55F9-4D91-96B2-084641DA9A6C}.Debug|x86.Build.0 = Debug|Any CPU {1EE8CAD3-55F9-4D91-96B2-084641DA9A6C}.Release|Any CPU.ActiveCfg = Release|Any CPU {1EE8CAD3-55F9-4D91-96B2-084641DA9A6C}.Release|Any CPU.Build.0 = Release|Any CPU - {1EE8CAD3-55F9-4D91-96B2-084641DA9A6C}.Release|x86.ActiveCfg = Release|Any CPU - {1EE8CAD3-55F9-4D91-96B2-084641DA9A6C}.Release|x86.Build.0 = Release|Any CPU {9508F118-F62E-4C16-A6F4-7C3B56E166AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9508F118-F62E-4C16-A6F4-7C3B56E166AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9508F118-F62E-4C16-A6F4-7C3B56E166AD}.Debug|x86.ActiveCfg = Debug|Any CPU - {9508F118-F62E-4C16-A6F4-7C3B56E166AD}.Debug|x86.Build.0 = Debug|Any CPU {9508F118-F62E-4C16-A6F4-7C3B56E166AD}.Release|Any CPU.ActiveCfg = Release|Any CPU {9508F118-F62E-4C16-A6F4-7C3B56E166AD}.Release|Any CPU.Build.0 = Release|Any CPU - {9508F118-F62E-4C16-A6F4-7C3B56E166AD}.Release|x86.ActiveCfg = Release|Any CPU - {9508F118-F62E-4C16-A6F4-7C3B56E166AD}.Release|x86.Build.0 = Release|Any CPU {F5CE416E-B906-41D2-80B9-0078E887A3F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F5CE416E-B906-41D2-80B9-0078E887A3F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F5CE416E-B906-41D2-80B9-0078E887A3F6}.Debug|x86.ActiveCfg = Debug|Any CPU - {F5CE416E-B906-41D2-80B9-0078E887A3F6}.Debug|x86.Build.0 = Debug|Any CPU {F5CE416E-B906-41D2-80B9-0078E887A3F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {F5CE416E-B906-41D2-80B9-0078E887A3F6}.Release|Any CPU.Build.0 = Release|Any CPU - {F5CE416E-B906-41D2-80B9-0078E887A3F6}.Release|x86.ActiveCfg = Release|Any CPU - {F5CE416E-B906-41D2-80B9-0078E887A3F6}.Release|x86.Build.0 = Release|Any CPU {4B45CA0C-03A0-400F-B454-3D4BCB16AF38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B45CA0C-03A0-400F-B454-3D4BCB16AF38}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4B45CA0C-03A0-400F-B454-3D4BCB16AF38}.Debug|x86.ActiveCfg = Debug|Any CPU - {4B45CA0C-03A0-400F-B454-3D4BCB16AF38}.Debug|x86.Build.0 = Debug|Any CPU {4B45CA0C-03A0-400F-B454-3D4BCB16AF38}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B45CA0C-03A0-400F-B454-3D4BCB16AF38}.Release|Any CPU.Build.0 = Release|Any CPU - {4B45CA0C-03A0-400F-B454-3D4BCB16AF38}.Release|x86.ActiveCfg = Release|Any CPU - {4B45CA0C-03A0-400F-B454-3D4BCB16AF38}.Release|x86.Build.0 = Release|Any CPU {B501A547-C911-4A05-AC6E-274A50DFF30E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B501A547-C911-4A05-AC6E-274A50DFF30E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B501A547-C911-4A05-AC6E-274A50DFF30E}.Debug|x86.ActiveCfg = Debug|Any CPU - {B501A547-C911-4A05-AC6E-274A50DFF30E}.Debug|x86.Build.0 = Debug|Any CPU {B501A547-C911-4A05-AC6E-274A50DFF30E}.Release|Any CPU.ActiveCfg = Release|Any CPU {B501A547-C911-4A05-AC6E-274A50DFF30E}.Release|Any CPU.Build.0 = Release|Any CPU - {B501A547-C911-4A05-AC6E-274A50DFF30E}.Release|x86.ActiveCfg = Release|Any CPU - {B501A547-C911-4A05-AC6E-274A50DFF30E}.Release|x86.Build.0 = Release|Any CPU {50D26304-0961-4A51-ABF6-6CAD1A56D203}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {50D26304-0961-4A51-ABF6-6CAD1A56D203}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50D26304-0961-4A51-ABF6-6CAD1A56D203}.Debug|x86.ActiveCfg = Debug|Any CPU - {50D26304-0961-4A51-ABF6-6CAD1A56D203}.Debug|x86.Build.0 = Debug|Any CPU {50D26304-0961-4A51-ABF6-6CAD1A56D203}.Release|Any CPU.ActiveCfg = Release|Any CPU {50D26304-0961-4A51-ABF6-6CAD1A56D203}.Release|Any CPU.Build.0 = Release|Any CPU - {50D26304-0961-4A51-ABF6-6CAD1A56D203}.Release|x86.ActiveCfg = Release|Any CPU - {50D26304-0961-4A51-ABF6-6CAD1A56D203}.Release|x86.Build.0 = Release|Any CPU {4462B57A-7245-4146-B504-D46FDE762948}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4462B57A-7245-4146-B504-D46FDE762948}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4462B57A-7245-4146-B504-D46FDE762948}.Debug|x86.ActiveCfg = Debug|Any CPU - {4462B57A-7245-4146-B504-D46FDE762948}.Debug|x86.Build.0 = Debug|Any CPU {4462B57A-7245-4146-B504-D46FDE762948}.Release|Any CPU.ActiveCfg = Release|Any CPU {4462B57A-7245-4146-B504-D46FDE762948}.Release|Any CPU.Build.0 = Release|Any CPU - {4462B57A-7245-4146-B504-D46FDE762948}.Release|x86.ActiveCfg = Release|Any CPU - {4462B57A-7245-4146-B504-D46FDE762948}.Release|x86.Build.0 = Release|Any CPU {1AF3672A-C5F1-4604-B6AB-D98C4DE9C3B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1AF3672A-C5F1-4604-B6AB-D98C4DE9C3B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1AF3672A-C5F1-4604-B6AB-D98C4DE9C3B1}.Debug|x86.ActiveCfg = Debug|Any CPU - {1AF3672A-C5F1-4604-B6AB-D98C4DE9C3B1}.Debug|x86.Build.0 = Debug|Any CPU {1AF3672A-C5F1-4604-B6AB-D98C4DE9C3B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {1AF3672A-C5F1-4604-B6AB-D98C4DE9C3B1}.Release|Any CPU.Build.0 = Release|Any CPU - {1AF3672A-C5F1-4604-B6AB-D98C4DE9C3B1}.Release|x86.ActiveCfg = Release|Any CPU - {1AF3672A-C5F1-4604-B6AB-D98C4DE9C3B1}.Release|x86.Build.0 = Release|Any CPU {B2C33A93-DB30-4099-903E-77D75C4C3F45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B2C33A93-DB30-4099-903E-77D75C4C3F45}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B2C33A93-DB30-4099-903E-77D75C4C3F45}.Debug|x86.ActiveCfg = Debug|Any CPU - {B2C33A93-DB30-4099-903E-77D75C4C3F45}.Debug|x86.Build.0 = Debug|Any CPU {B2C33A93-DB30-4099-903E-77D75C4C3F45}.Release|Any CPU.ActiveCfg = Release|Any CPU {B2C33A93-DB30-4099-903E-77D75C4C3F45}.Release|Any CPU.Build.0 = Release|Any CPU - {B2C33A93-DB30-4099-903E-77D75C4C3F45}.Release|x86.ActiveCfg = Release|Any CPU - {B2C33A93-DB30-4099-903E-77D75C4C3F45}.Release|x86.Build.0 = Release|Any CPU {28026D16-EB0C-40B0-BDA7-11CAA2B97CCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {28026D16-EB0C-40B0-BDA7-11CAA2B97CCC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28026D16-EB0C-40B0-BDA7-11CAA2B97CCC}.Debug|x86.ActiveCfg = Debug|Any CPU - {28026D16-EB0C-40B0-BDA7-11CAA2B97CCC}.Debug|x86.Build.0 = Debug|Any CPU {28026D16-EB0C-40B0-BDA7-11CAA2B97CCC}.Release|Any CPU.ActiveCfg = Release|Any CPU {28026D16-EB0C-40B0-BDA7-11CAA2B97CCC}.Release|Any CPU.Build.0 = Release|Any CPU - {28026D16-EB0C-40B0-BDA7-11CAA2B97CCC}.Release|x86.ActiveCfg = Release|Any CPU - {28026D16-EB0C-40B0-BDA7-11CAA2B97CCC}.Release|x86.Build.0 = Release|Any CPU {50D26304-0961-4A51-ABF6-6CAD1A56D202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {50D26304-0961-4A51-ABF6-6CAD1A56D202}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50D26304-0961-4A51-ABF6-6CAD1A56D202}.Debug|x86.ActiveCfg = Debug|Any CPU - {50D26304-0961-4A51-ABF6-6CAD1A56D202}.Debug|x86.Build.0 = Debug|Any CPU {50D26304-0961-4A51-ABF6-6CAD1A56D202}.Release|Any CPU.ActiveCfg = Release|Any CPU {50D26304-0961-4A51-ABF6-6CAD1A56D202}.Release|Any CPU.Build.0 = Release|Any CPU - {50D26304-0961-4A51-ABF6-6CAD1A56D202}.Release|x86.ActiveCfg = Release|Any CPU - {50D26304-0961-4A51-ABF6-6CAD1A56D202}.Release|x86.Build.0 = Release|Any CPU {7FE6B002-89D8-4298-9B1B-0B5C247DD1FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7FE6B002-89D8-4298-9B1B-0B5C247DD1FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7FE6B002-89D8-4298-9B1B-0B5C247DD1FD}.Debug|x86.ActiveCfg = Debug|Any CPU - {7FE6B002-89D8-4298-9B1B-0B5C247DD1FD}.Debug|x86.Build.0 = Debug|Any CPU {7FE6B002-89D8-4298-9B1B-0B5C247DD1FD}.Release|Any CPU.ActiveCfg = Release|Any CPU {7FE6B002-89D8-4298-9B1B-0B5C247DD1FD}.Release|Any CPU.Build.0 = Release|Any CPU - {7FE6B002-89D8-4298-9B1B-0B5C247DD1FD}.Release|x86.ActiveCfg = Release|Any CPU - {7FE6B002-89D8-4298-9B1B-0B5C247DD1FD}.Release|x86.Build.0 = Release|Any CPU {4371944A-D3BA-4B5B-8285-82E5FFC6D1F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4371944A-D3BA-4B5B-8285-82E5FFC6D1F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4371944A-D3BA-4B5B-8285-82E5FFC6D1F9}.Debug|x86.ActiveCfg = Debug|Any CPU - {4371944A-D3BA-4B5B-8285-82E5FFC6D1F9}.Debug|x86.Build.0 = Debug|Any CPU {4371944A-D3BA-4B5B-8285-82E5FFC6D1F9}.Release|Any CPU.ActiveCfg = Release|Any CPU {4371944A-D3BA-4B5B-8285-82E5FFC6D1F9}.Release|Any CPU.Build.0 = Release|Any CPU - {4371944A-D3BA-4B5B-8285-82E5FFC6D1F9}.Release|x86.ActiveCfg = Release|Any CPU - {4371944A-D3BA-4B5B-8285-82E5FFC6D1F9}.Release|x86.Build.0 = Release|Any CPU {4371944A-D3BA-4B5B-8285-82E5FFC6D1F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4371944A-D3BA-4B5B-8285-82E5FFC6D1F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4371944A-D3BA-4B5B-8285-82E5FFC6D1F8}.Debug|x86.ActiveCfg = Debug|Any CPU - {4371944A-D3BA-4B5B-8285-82E5FFC6D1F8}.Debug|x86.Build.0 = Debug|Any CPU {4371944A-D3BA-4B5B-8285-82E5FFC6D1F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {4371944A-D3BA-4B5B-8285-82E5FFC6D1F8}.Release|Any CPU.Build.0 = Release|Any CPU - {4371944A-D3BA-4B5B-8285-82E5FFC6D1F8}.Release|x86.ActiveCfg = Release|Any CPU - {4371944A-D3BA-4B5B-8285-82E5FFC6D1F8}.Release|x86.Build.0 = Release|Any CPU {2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}.Debug|x86.ActiveCfg = Debug|Any CPU - {2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}.Debug|x86.Build.0 = Debug|Any CPU {2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}.Release|Any CPU.ActiveCfg = Release|Any CPU {2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}.Release|Any CPU.Build.0 = Release|Any CPU - {2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}.Release|x86.ActiveCfg = Release|Any CPU - {2523D0E6-DF32-4A3E-8AE0-A19BFFAE2EF6}.Release|x86.Build.0 = Release|Any CPU {E3B32027-3362-41DF-9172-4D3B623F42A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E3B32027-3362-41DF-9172-4D3B623F42A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3B32027-3362-41DF-9172-4D3B623F42A5}.Debug|x86.ActiveCfg = Debug|Any CPU - {E3B32027-3362-41DF-9172-4D3B623F42A5}.Debug|x86.Build.0 = Debug|Any CPU {E3B32027-3362-41DF-9172-4D3B623F42A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {E3B32027-3362-41DF-9172-4D3B623F42A5}.Release|Any CPU.Build.0 = Release|Any CPU - {E3B32027-3362-41DF-9172-4D3B623F42A5}.Release|x86.ActiveCfg = Release|Any CPU - {E3B32027-3362-41DF-9172-4D3B623F42A5}.Release|x86.Build.0 = Release|Any CPU {190CE348-596E-435A-9E5B-12A689F9FC29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {190CE348-596E-435A-9E5B-12A689F9FC29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {190CE348-596E-435A-9E5B-12A689F9FC29}.Debug|x86.ActiveCfg = Debug|Any CPU - {190CE348-596E-435A-9E5B-12A689F9FC29}.Debug|x86.Build.0 = Debug|Any CPU {190CE348-596E-435A-9E5B-12A689F9FC29}.Release|Any CPU.ActiveCfg = Release|Any CPU {190CE348-596E-435A-9E5B-12A689F9FC29}.Release|Any CPU.Build.0 = Release|Any CPU - {190CE348-596E-435A-9E5B-12A689F9FC29}.Release|x86.ActiveCfg = Release|Any CPU - {190CE348-596E-435A-9E5B-12A689F9FC29}.Release|x86.Build.0 = Release|Any CPU {9C9DABA4-0E72-4469-ADF1-4991F3CA572A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C9DABA4-0E72-4469-ADF1-4991F3CA572A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9C9DABA4-0E72-4469-ADF1-4991F3CA572A}.Debug|x86.ActiveCfg = Debug|Any CPU - {9C9DABA4-0E72-4469-ADF1-4991F3CA572A}.Debug|x86.Build.0 = Debug|Any CPU {9C9DABA4-0E72-4469-ADF1-4991F3CA572A}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C9DABA4-0E72-4469-ADF1-4991F3CA572A}.Release|Any CPU.Build.0 = Release|Any CPU - {9C9DABA4-0E72-4469-ADF1-4991F3CA572A}.Release|x86.ActiveCfg = Release|Any CPU - {9C9DABA4-0E72-4469-ADF1-4991F3CA572A}.Release|x86.Build.0 = Release|Any CPU {BF180BD2-4FB7-4252-A7EC-A00E0C7A028A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF180BD2-4FB7-4252-A7EC-A00E0C7A028A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF180BD2-4FB7-4252-A7EC-A00E0C7A028A}.Debug|x86.ActiveCfg = Debug|Any CPU - {BF180BD2-4FB7-4252-A7EC-A00E0C7A028A}.Debug|x86.Build.0 = Debug|Any CPU {BF180BD2-4FB7-4252-A7EC-A00E0C7A028A}.Release|Any CPU.ActiveCfg = Release|Any CPU {BF180BD2-4FB7-4252-A7EC-A00E0C7A028A}.Release|Any CPU.Build.0 = Release|Any CPU - {BF180BD2-4FB7-4252-A7EC-A00E0C7A028A}.Release|x86.ActiveCfg = Release|Any CPU - {BF180BD2-4FB7-4252-A7EC-A00E0C7A028A}.Release|x86.Build.0 = Release|Any CPU {BDA5D613-596D-4B61-837C-63554151C8F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BDA5D613-596D-4B61-837C-63554151C8F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BDA5D613-596D-4B61-837C-63554151C8F5}.Debug|x86.ActiveCfg = Debug|Any CPU - {BDA5D613-596D-4B61-837C-63554151C8F5}.Debug|x86.Build.0 = Debug|Any CPU {BDA5D613-596D-4B61-837C-63554151C8F5}.Release|Any CPU.ActiveCfg = Release|Any CPU {BDA5D613-596D-4B61-837C-63554151C8F5}.Release|Any CPU.Build.0 = Release|Any CPU - {BDA5D613-596D-4B61-837C-63554151C8F5}.Release|x86.ActiveCfg = Release|Any CPU - {BDA5D613-596D-4B61-837C-63554151C8F5}.Release|x86.Build.0 = Release|Any CPU {91F6F646-4F6E-449A-9AB4-2986348F329D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {91F6F646-4F6E-449A-9AB4-2986348F329D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91F6F646-4F6E-449A-9AB4-2986348F329D}.Debug|x86.ActiveCfg = Debug|Any CPU - {91F6F646-4F6E-449A-9AB4-2986348F329D}.Debug|x86.Build.0 = Debug|Any CPU {91F6F646-4F6E-449A-9AB4-2986348F329D}.Release|Any CPU.ActiveCfg = Release|Any CPU {91F6F646-4F6E-449A-9AB4-2986348F329D}.Release|Any CPU.Build.0 = Release|Any CPU - {91F6F646-4F6E-449A-9AB4-2986348F329D}.Release|x86.ActiveCfg = Release|Any CPU - {91F6F646-4F6E-449A-9AB4-2986348F329D}.Release|x86.Build.0 = Release|Any CPU {AFDE6BEA-5038-4A4A-A88E-DBD2E4088EED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AFDE6BEA-5038-4A4A-A88E-DBD2E4088EED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AFDE6BEA-5038-4A4A-A88E-DBD2E4088EED}.Debug|x86.ActiveCfg = Debug|Any CPU - {AFDE6BEA-5038-4A4A-A88E-DBD2E4088EED}.Debug|x86.Build.0 = Debug|Any CPU {AFDE6BEA-5038-4A4A-A88E-DBD2E4088EED}.Release|Any CPU.ActiveCfg = Release|Any CPU {AFDE6BEA-5038-4A4A-A88E-DBD2E4088EED}.Release|Any CPU.Build.0 = Release|Any CPU - {AFDE6BEA-5038-4A4A-A88E-DBD2E4088EED}.Release|x86.ActiveCfg = Release|Any CPU - {AFDE6BEA-5038-4A4A-A88E-DBD2E4088EED}.Release|x86.Build.0 = Release|Any CPU {5F8D2414-064A-4B3A-9B42-8E2A04246BE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5F8D2414-064A-4B3A-9B42-8E2A04246BE5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5F8D2414-064A-4B3A-9B42-8E2A04246BE5}.Debug|x86.ActiveCfg = Debug|Any CPU - {5F8D2414-064A-4B3A-9B42-8E2A04246BE5}.Debug|x86.Build.0 = Debug|Any CPU {5F8D2414-064A-4B3A-9B42-8E2A04246BE5}.Release|Any CPU.ActiveCfg = Release|Any CPU {5F8D2414-064A-4B3A-9B42-8E2A04246BE5}.Release|Any CPU.Build.0 = Release|Any CPU - {5F8D2414-064A-4B3A-9B42-8E2A04246BE5}.Release|x86.ActiveCfg = Release|Any CPU - {5F8D2414-064A-4B3A-9B42-8E2A04246BE5}.Release|x86.Build.0 = Release|Any CPU {02459936-CD2C-4F61-B671-5C518F2A3DDC}.Debug|Any CPU.ActiveCfg = Debug|x64 {02459936-CD2C-4F61-B671-5C518F2A3DDC}.Debug|Any CPU.Build.0 = Debug|x64 - {02459936-CD2C-4F61-B671-5C518F2A3DDC}.Debug|x86.ActiveCfg = Debug|x64 {02459936-CD2C-4F61-B671-5C518F2A3DDC}.Release|Any CPU.ActiveCfg = Release|x64 {02459936-CD2C-4F61-B671-5C518F2A3DDC}.Release|Any CPU.Build.0 = Release|x64 - {02459936-CD2C-4F61-B671-5C518F2A3DDC}.Release|x86.ActiveCfg = Release|x64 {288089C5-8721-458E-BE3E-78990DAB5E2E}.Debug|Any CPU.ActiveCfg = Debug|x64 {288089C5-8721-458E-BE3E-78990DAB5E2E}.Debug|Any CPU.Build.0 = Debug|x64 - {288089C5-8721-458E-BE3E-78990DAB5E2E}.Debug|x86.ActiveCfg = Debug|x64 {288089C5-8721-458E-BE3E-78990DAB5E2E}.Release|Any CPU.ActiveCfg = Release|x64 {288089C5-8721-458E-BE3E-78990DAB5E2E}.Release|Any CPU.Build.0 = Release|x64 - {288089C5-8721-458E-BE3E-78990DAB5E2E}.Release|x86.ActiveCfg = Release|x64 {288089C5-8721-458E-BE3E-78990DAB5E2D}.Debug|Any CPU.ActiveCfg = Debug|x64 {288089C5-8721-458E-BE3E-78990DAB5E2D}.Debug|Any CPU.Build.0 = Debug|x64 - {288089C5-8721-458E-BE3E-78990DAB5E2D}.Debug|x86.ActiveCfg = Debug|x64 {288089C5-8721-458E-BE3E-78990DAB5E2D}.Release|Any CPU.ActiveCfg = Release|x64 {288089C5-8721-458E-BE3E-78990DAB5E2D}.Release|Any CPU.Build.0 = Release|x64 - {288089C5-8721-458E-BE3E-78990DAB5E2D}.Release|x86.ActiveCfg = Release|x64 {6AA96934-D6B7-4CC8-990D-DB6B9DD56E34}.Debug|Any CPU.ActiveCfg = Debug|x64 {6AA96934-D6B7-4CC8-990D-DB6B9DD56E34}.Debug|Any CPU.Build.0 = Debug|x64 - {6AA96934-D6B7-4CC8-990D-DB6B9DD56E34}.Debug|x86.ActiveCfg = Debug|x64 {6AA96934-D6B7-4CC8-990D-DB6B9DD56E34}.Release|Any CPU.ActiveCfg = Release|x64 {6AA96934-D6B7-4CC8-990D-DB6B9DD56E34}.Release|Any CPU.Build.0 = Release|x64 - {6AA96934-D6B7-4CC8-990D-DB6B9DD56E34}.Release|x86.ActiveCfg = Release|x64 {C50166F1-BABC-40A9-95EB-8200080CD701}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C50166F1-BABC-40A9-95EB-8200080CD701}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C50166F1-BABC-40A9-95EB-8200080CD701}.Debug|x86.ActiveCfg = Debug|Any CPU - {C50166F1-BABC-40A9-95EB-8200080CD701}.Debug|x86.Build.0 = Debug|Any CPU {C50166F1-BABC-40A9-95EB-8200080CD701}.Release|Any CPU.ActiveCfg = Release|Any CPU {C50166F1-BABC-40A9-95EB-8200080CD701}.Release|Any CPU.Build.0 = Release|Any CPU - {C50166F1-BABC-40A9-95EB-8200080CD701}.Release|x86.ActiveCfg = Release|Any CPU - {C50166F1-BABC-40A9-95EB-8200080CD701}.Release|x86.Build.0 = Release|Any CPU {E195A63F-B5A4-4C5A-96BD-8E7ED6A181B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E195A63F-B5A4-4C5A-96BD-8E7ED6A181B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E195A63F-B5A4-4C5A-96BD-8E7ED6A181B7}.Debug|x86.ActiveCfg = Debug|Any CPU - {E195A63F-B5A4-4C5A-96BD-8E7ED6A181B7}.Debug|x86.Build.0 = Debug|Any CPU {E195A63F-B5A4-4C5A-96BD-8E7ED6A181B7}.Release|Any CPU.ActiveCfg = Release|Any CPU {E195A63F-B5A4-4C5A-96BD-8E7ED6A181B7}.Release|Any CPU.Build.0 = Release|Any CPU - {E195A63F-B5A4-4C5A-96BD-8E7ED6A181B7}.Release|x86.ActiveCfg = Release|Any CPU - {E195A63F-B5A4-4C5A-96BD-8E7ED6A181B7}.Release|x86.Build.0 = Release|Any CPU {E3FDC65F-568D-4E2D-A093-5132FD3793B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E3FDC65F-568D-4E2D-A093-5132FD3793B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3FDC65F-568D-4E2D-A093-5132FD3793B7}.Debug|x86.ActiveCfg = Debug|Any CPU - {E3FDC65F-568D-4E2D-A093-5132FD3793B7}.Debug|x86.Build.0 = Debug|Any CPU {E3FDC65F-568D-4E2D-A093-5132FD3793B7}.Release|Any CPU.ActiveCfg = Release|Any CPU {E3FDC65F-568D-4E2D-A093-5132FD3793B7}.Release|Any CPU.Build.0 = Release|Any CPU - {E3FDC65F-568D-4E2D-A093-5132FD3793B7}.Release|x86.ActiveCfg = Release|Any CPU - {E3FDC65F-568D-4E2D-A093-5132FD3793B7}.Release|x86.Build.0 = Release|Any CPU {909B656F-6095-4AC2-A5AB-C3F032315C45}.Debug|Any CPU.ActiveCfg = Debug|x64 {909B656F-6095-4AC2-A5AB-C3F032315C45}.Debug|Any CPU.Build.0 = Debug|x64 - {909B656F-6095-4AC2-A5AB-C3F032315C45}.Debug|x86.ActiveCfg = Debug|x64 {909B656F-6095-4AC2-A5AB-C3F032315C45}.Release|Any CPU.ActiveCfg = Release|x64 {909B656F-6095-4AC2-A5AB-C3F032315C45}.Release|Any CPU.Build.0 = Release|x64 - {909B656F-6095-4AC2-A5AB-C3F032315C45}.Release|x86.ActiveCfg = Release|x64 {2E87FA96-50BB-4607-8676-46521599F998}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2E87FA96-50BB-4607-8676-46521599F998}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E87FA96-50BB-4607-8676-46521599F998}.Debug|x86.ActiveCfg = Debug|Any CPU - {2E87FA96-50BB-4607-8676-46521599F998}.Debug|x86.Build.0 = Debug|Any CPU {2E87FA96-50BB-4607-8676-46521599F998}.Release|Any CPU.ActiveCfg = Release|Any CPU {2E87FA96-50BB-4607-8676-46521599F998}.Release|Any CPU.Build.0 = Release|Any CPU - {2E87FA96-50BB-4607-8676-46521599F998}.Release|x86.ActiveCfg = Release|Any CPU - {2E87FA96-50BB-4607-8676-46521599F998}.Release|x86.Build.0 = Release|Any CPU {96EB2D3B-F694-48C6-A284-67382841E086}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {96EB2D3B-F694-48C6-A284-67382841E086}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96EB2D3B-F694-48C6-A284-67382841E086}.Debug|x86.ActiveCfg = Debug|Any CPU - {96EB2D3B-F694-48C6-A284-67382841E086}.Debug|x86.Build.0 = Debug|Any CPU {96EB2D3B-F694-48C6-A284-67382841E086}.Release|Any CPU.ActiveCfg = Release|Any CPU {96EB2D3B-F694-48C6-A284-67382841E086}.Release|Any CPU.Build.0 = Release|Any CPU - {96EB2D3B-F694-48C6-A284-67382841E086}.Release|x86.ActiveCfg = Release|Any CPU - {96EB2D3B-F694-48C6-A284-67382841E086}.Release|x86.Build.0 = Release|Any CPU {21B239D0-D144-430F-A394-C066D58EE267}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {21B239D0-D144-430F-A394-C066D58EE267}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21B239D0-D144-430F-A394-C066D58EE267}.Debug|x86.ActiveCfg = Debug|Any CPU - {21B239D0-D144-430F-A394-C066D58EE267}.Debug|x86.Build.0 = Debug|Any CPU {21B239D0-D144-430F-A394-C066D58EE267}.Release|Any CPU.ActiveCfg = Release|Any CPU {21B239D0-D144-430F-A394-C066D58EE267}.Release|Any CPU.Build.0 = Release|Any CPU - {21B239D0-D144-430F-A394-C066D58EE267}.Release|x86.ActiveCfg = Release|Any CPU - {21B239D0-D144-430F-A394-C066D58EE267}.Release|x86.Build.0 = Release|Any CPU {57CA988D-F010-4BF2-9A2E-07D6DCD2FF2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {57CA988D-F010-4BF2-9A2E-07D6DCD2FF2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {57CA988D-F010-4BF2-9A2E-07D6DCD2FF2C}.Debug|x86.ActiveCfg = Debug|Any CPU - {57CA988D-F010-4BF2-9A2E-07D6DCD2FF2C}.Debug|x86.Build.0 = Debug|Any CPU {57CA988D-F010-4BF2-9A2E-07D6DCD2FF2C}.Release|Any CPU.ActiveCfg = Release|Any CPU {57CA988D-F010-4BF2-9A2E-07D6DCD2FF2C}.Release|Any CPU.Build.0 = Release|Any CPU - {57CA988D-F010-4BF2-9A2E-07D6DCD2FF2C}.Release|x86.ActiveCfg = Release|Any CPU - {57CA988D-F010-4BF2-9A2E-07D6DCD2FF2C}.Release|x86.Build.0 = Release|Any CPU {1A3941F1-1E1F-4EF7-8064-7729C4C2E2AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1A3941F1-1E1F-4EF7-8064-7729C4C2E2AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1A3941F1-1E1F-4EF7-8064-7729C4C2E2AA}.Debug|x86.ActiveCfg = Debug|Any CPU - {1A3941F1-1E1F-4EF7-8064-7729C4C2E2AA}.Debug|x86.Build.0 = Debug|Any CPU {1A3941F1-1E1F-4EF7-8064-7729C4C2E2AA}.Release|Any CPU.ActiveCfg = Release|Any CPU {1A3941F1-1E1F-4EF7-8064-7729C4C2E2AA}.Release|Any CPU.Build.0 = Release|Any CPU - {1A3941F1-1E1F-4EF7-8064-7729C4C2E2AA}.Release|x86.ActiveCfg = Release|Any CPU - {1A3941F1-1E1F-4EF7-8064-7729C4C2E2AA}.Release|x86.Build.0 = Release|Any CPU {A1BCD0CE-6C2F-4F8C-9A48-D9D93928E26D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A1BCD0CE-6C2F-4F8C-9A48-D9D93928E26D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A1BCD0CE-6C2F-4F8C-9A48-D9D93928E26D}.Debug|x86.ActiveCfg = Debug|Any CPU - {A1BCD0CE-6C2F-4F8C-9A48-D9D93928E26D}.Debug|x86.Build.0 = Debug|Any CPU {A1BCD0CE-6C2F-4F8C-9A48-D9D93928E26D}.Release|Any CPU.ActiveCfg = Release|Any CPU {A1BCD0CE-6C2F-4F8C-9A48-D9D93928E26D}.Release|Any CPU.Build.0 = Release|Any CPU - {A1BCD0CE-6C2F-4F8C-9A48-D9D93928E26D}.Release|x86.ActiveCfg = Release|Any CPU - {A1BCD0CE-6C2F-4F8C-9A48-D9D93928E26D}.Release|x86.Build.0 = Release|Any CPU {3973B09A-4FBF-44A5-8359-3D22CEB71F71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3973B09A-4FBF-44A5-8359-3D22CEB71F71}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3973B09A-4FBF-44A5-8359-3D22CEB71F71}.Debug|x86.ActiveCfg = Debug|Any CPU - {3973B09A-4FBF-44A5-8359-3D22CEB71F71}.Debug|x86.Build.0 = Debug|Any CPU {3973B09A-4FBF-44A5-8359-3D22CEB71F71}.Release|Any CPU.ActiveCfg = Release|Any CPU {3973B09A-4FBF-44A5-8359-3D22CEB71F71}.Release|Any CPU.Build.0 = Release|Any CPU - {3973B09A-4FBF-44A5-8359-3D22CEB71F71}.Release|x86.ActiveCfg = Release|Any CPU - {3973B09A-4FBF-44A5-8359-3D22CEB71F71}.Release|x86.Build.0 = Release|Any CPU {EDC68A0E-C68D-4A74-91B7-BF38EC909888}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EDC68A0E-C68D-4A74-91B7-BF38EC909888}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EDC68A0E-C68D-4A74-91B7-BF38EC909888}.Debug|x86.ActiveCfg = Debug|Any CPU - {EDC68A0E-C68D-4A74-91B7-BF38EC909888}.Debug|x86.Build.0 = Debug|Any CPU {EDC68A0E-C68D-4A74-91B7-BF38EC909888}.Release|Any CPU.ActiveCfg = Release|Any CPU {EDC68A0E-C68D-4A74-91B7-BF38EC909888}.Release|Any CPU.Build.0 = Release|Any CPU - {EDC68A0E-C68D-4A74-91B7-BF38EC909888}.Release|x86.ActiveCfg = Release|Any CPU - {EDC68A0E-C68D-4A74-91B7-BF38EC909888}.Release|x86.Build.0 = Release|Any CPU {18F5FBB8-7570-4412-8CC7-0A86FF13B7BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {18F5FBB8-7570-4412-8CC7-0A86FF13B7BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18F5FBB8-7570-4412-8CC7-0A86FF13B7BA}.Debug|x86.ActiveCfg = Debug|Any CPU - {18F5FBB8-7570-4412-8CC7-0A86FF13B7BA}.Debug|x86.Build.0 = Debug|Any CPU {18F5FBB8-7570-4412-8CC7-0A86FF13B7BA}.Release|Any CPU.ActiveCfg = Release|Any CPU {18F5FBB8-7570-4412-8CC7-0A86FF13B7BA}.Release|Any CPU.Build.0 = Release|Any CPU - {18F5FBB8-7570-4412-8CC7-0A86FF13B7BA}.Release|x86.ActiveCfg = Release|Any CPU - {18F5FBB8-7570-4412-8CC7-0A86FF13B7BA}.Release|x86.Build.0 = Release|Any CPU {49BFAE50-1BCE-48AE-BC89-78B7D90A3ECD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {49BFAE50-1BCE-48AE-BC89-78B7D90A3ECD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {49BFAE50-1BCE-48AE-BC89-78B7D90A3ECD}.Debug|x86.ActiveCfg = Debug|Any CPU - {49BFAE50-1BCE-48AE-BC89-78B7D90A3ECD}.Debug|x86.Build.0 = Debug|Any CPU {49BFAE50-1BCE-48AE-BC89-78B7D90A3ECD}.Release|Any CPU.ActiveCfg = Release|Any CPU {49BFAE50-1BCE-48AE-BC89-78B7D90A3ECD}.Release|Any CPU.Build.0 = Release|Any CPU - {49BFAE50-1BCE-48AE-BC89-78B7D90A3ECD}.Release|x86.ActiveCfg = Release|Any CPU - {49BFAE50-1BCE-48AE-BC89-78B7D90A3ECD}.Release|x86.Build.0 = Release|Any CPU {B0CE9307-FFDB-4838-A5EC-CE1F7CDC4AC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B0CE9307-FFDB-4838-A5EC-CE1F7CDC4AC2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B0CE9307-FFDB-4838-A5EC-CE1F7CDC4AC2}.Debug|x86.ActiveCfg = Debug|Any CPU - {B0CE9307-FFDB-4838-A5EC-CE1F7CDC4AC2}.Debug|x86.Build.0 = Debug|Any CPU {B0CE9307-FFDB-4838-A5EC-CE1F7CDC4AC2}.Release|Any CPU.ActiveCfg = Release|Any CPU {B0CE9307-FFDB-4838-A5EC-CE1F7CDC4AC2}.Release|Any CPU.Build.0 = Release|Any CPU - {B0CE9307-FFDB-4838-A5EC-CE1F7CDC4AC2}.Release|x86.ActiveCfg = Release|Any CPU - {B0CE9307-FFDB-4838-A5EC-CE1F7CDC4AC2}.Release|x86.Build.0 = Release|Any CPU {3CDEEAB7-2256-418A-BEB2-620B5CB16302}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3CDEEAB7-2256-418A-BEB2-620B5CB16302}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CDEEAB7-2256-418A-BEB2-620B5CB16302}.Debug|x86.ActiveCfg = Debug|Any CPU - {3CDEEAB7-2256-418A-BEB2-620B5CB16302}.Debug|x86.Build.0 = Debug|Any CPU {3CDEEAB7-2256-418A-BEB2-620B5CB16302}.Release|Any CPU.ActiveCfg = Release|Any CPU {3CDEEAB7-2256-418A-BEB2-620B5CB16302}.Release|Any CPU.Build.0 = Release|Any CPU - {3CDEEAB7-2256-418A-BEB2-620B5CB16302}.Release|x86.ActiveCfg = Release|Any CPU - {3CDEEAB7-2256-418A-BEB2-620B5CB16302}.Release|x86.Build.0 = Release|Any CPU {0BE66736-CDAA-4989-88B1-B3F46EBDCA4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0BE66736-CDAA-4989-88B1-B3F46EBDCA4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BE66736-CDAA-4989-88B1-B3F46EBDCA4A}.Debug|x86.ActiveCfg = Debug|Any CPU - {0BE66736-CDAA-4989-88B1-B3F46EBDCA4A}.Debug|x86.Build.0 = Debug|Any CPU {0BE66736-CDAA-4989-88B1-B3F46EBDCA4A}.Release|Any CPU.ActiveCfg = Release|Any CPU {0BE66736-CDAA-4989-88B1-B3F46EBDCA4A}.Release|Any CPU.Build.0 = Release|Any CPU - {0BE66736-CDAA-4989-88B1-B3F46EBDCA4A}.Release|x86.ActiveCfg = Release|Any CPU - {0BE66736-CDAA-4989-88B1-B3F46EBDCA4A}.Release|x86.Build.0 = Release|Any CPU {3E7DEA65-317B-4F43-A25D-62F18D96CFD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3E7DEA65-317B-4F43-A25D-62F18D96CFD7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E7DEA65-317B-4F43-A25D-62F18D96CFD7}.Debug|x86.ActiveCfg = Debug|Any CPU - {3E7DEA65-317B-4F43-A25D-62F18D96CFD7}.Debug|x86.Build.0 = Debug|Any CPU {3E7DEA65-317B-4F43-A25D-62F18D96CFD7}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E7DEA65-317B-4F43-A25D-62F18D96CFD7}.Release|Any CPU.Build.0 = Release|Any CPU - {3E7DEA65-317B-4F43-A25D-62F18D96CFD7}.Release|x86.ActiveCfg = Release|Any CPU - {3E7DEA65-317B-4F43-A25D-62F18D96CFD7}.Release|x86.Build.0 = Release|Any CPU {12A68549-4E8C-42D6-8703-A09335F97997}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {12A68549-4E8C-42D6-8703-A09335F97997}.Debug|Any CPU.Build.0 = Debug|Any CPU - {12A68549-4E8C-42D6-8703-A09335F97997}.Debug|x86.ActiveCfg = Debug|Any CPU - {12A68549-4E8C-42D6-8703-A09335F97997}.Debug|x86.Build.0 = Debug|Any CPU {12A68549-4E8C-42D6-8703-A09335F97997}.Release|Any CPU.ActiveCfg = Release|Any CPU {12A68549-4E8C-42D6-8703-A09335F97997}.Release|Any CPU.Build.0 = Release|Any CPU - {12A68549-4E8C-42D6-8703-A09335F97997}.Release|x86.ActiveCfg = Release|Any CPU - {12A68549-4E8C-42D6-8703-A09335F97997}.Release|x86.Build.0 = Release|Any CPU {2DAE4406-7A89-4B5F-95C3-BC5472CE47CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DAE4406-7A89-4B5F-95C3-BC5472CE47CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DAE4406-7A89-4B5F-95C3-BC5472CE47CE}.Debug|x86.ActiveCfg = Debug|Any CPU - {2DAE4406-7A89-4B5F-95C3-BC5472CE47CE}.Debug|x86.Build.0 = Debug|Any CPU {2DAE4406-7A89-4B5F-95C3-BC5472CE47CE}.Release|Any CPU.ActiveCfg = Release|Any CPU {2DAE4406-7A89-4B5F-95C3-BC5472CE47CE}.Release|Any CPU.Build.0 = Release|Any CPU - {2DAE4406-7A89-4B5F-95C3-BC5472CE47CE}.Release|x86.ActiveCfg = Release|Any CPU - {2DAE4406-7A89-4B5F-95C3-BC5472CE47CE}.Release|x86.Build.0 = Release|Any CPU {066F0DBD-C46C-4C20-AFEC-99829A172625}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {066F0DBD-C46C-4C20-AFEC-99829A172625}.Debug|Any CPU.Build.0 = Debug|Any CPU - {066F0DBD-C46C-4C20-AFEC-99829A172625}.Debug|x86.ActiveCfg = Debug|Any CPU - {066F0DBD-C46C-4C20-AFEC-99829A172625}.Debug|x86.Build.0 = Debug|Any CPU {066F0DBD-C46C-4C20-AFEC-99829A172625}.Release|Any CPU.ActiveCfg = Release|Any CPU {066F0DBD-C46C-4C20-AFEC-99829A172625}.Release|Any CPU.Build.0 = Release|Any CPU - {066F0DBD-C46C-4C20-AFEC-99829A172625}.Release|x86.ActiveCfg = Release|Any CPU - {066F0DBD-C46C-4C20-AFEC-99829A172625}.Release|x86.Build.0 = Release|Any CPU {2DAE4406-7A89-4B5F-95C3-BC5422CE47CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DAE4406-7A89-4B5F-95C3-BC5422CE47CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DAE4406-7A89-4B5F-95C3-BC5422CE47CE}.Debug|x86.ActiveCfg = Debug|Any CPU - {2DAE4406-7A89-4B5F-95C3-BC5422CE47CE}.Debug|x86.Build.0 = Debug|Any CPU {2DAE4406-7A89-4B5F-95C3-BC5422CE47CE}.Release|Any CPU.ActiveCfg = Release|Any CPU {2DAE4406-7A89-4B5F-95C3-BC5422CE47CE}.Release|Any CPU.Build.0 = Release|Any CPU - {2DAE4406-7A89-4B5F-95C3-BC5422CE47CE}.Release|x86.ActiveCfg = Release|Any CPU - {2DAE4406-7A89-4B5F-95C3-BC5422CE47CE}.Release|x86.Build.0 = Release|Any CPU {8E2A252E-A140-45A6-A81A-2652996EA589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8E2A252E-A140-45A6-A81A-2652996EA589}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E2A252E-A140-45A6-A81A-2652996EA589}.Debug|x86.ActiveCfg = Debug|Any CPU - {8E2A252E-A140-45A6-A81A-2652996EA589}.Debug|x86.Build.0 = Debug|Any CPU {8E2A252E-A140-45A6-A81A-2652996EA589}.Release|Any CPU.ActiveCfg = Release|Any CPU {8E2A252E-A140-45A6-A81A-2652996EA589}.Release|Any CPU.Build.0 = Release|Any CPU - {8E2A252E-A140-45A6-A81A-2652996EA589}.Release|x86.ActiveCfg = Release|Any CPU - {8E2A252E-A140-45A6-A81A-2652996EA589}.Release|x86.Build.0 = Release|Any CPU {AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Debug|x86.ActiveCfg = Debug|Any CPU - {AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Debug|x86.Build.0 = Debug|Any CPU {AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Release|Any CPU.ActiveCfg = Release|Any CPU {AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Release|Any CPU.Build.0 = Release|Any CPU - {AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Release|x86.ActiveCfg = Release|Any CPU - {AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Release|x86.Build.0 = Release|Any CPU {16E93074-4252-466C-89A3-3B905ABAF779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {16E93074-4252-466C-89A3-3B905ABAF779}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16E93074-4252-466C-89A3-3B905ABAF779}.Debug|x86.ActiveCfg = Debug|Any CPU - {16E93074-4252-466C-89A3-3B905ABAF779}.Debug|x86.Build.0 = Debug|Any CPU {16E93074-4252-466C-89A3-3B905ABAF779}.Release|Any CPU.ActiveCfg = Release|Any CPU {16E93074-4252-466C-89A3-3B905ABAF779}.Release|Any CPU.Build.0 = Release|Any CPU - {16E93074-4252-466C-89A3-3B905ABAF779}.Release|x86.ActiveCfg = Release|Any CPU - {16E93074-4252-466C-89A3-3B905ABAF779}.Release|x86.Build.0 = Release|Any CPU {8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Debug|x86.ActiveCfg = Debug|Any CPU - {8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Debug|x86.Build.0 = Debug|Any CPU {8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Release|Any CPU.ActiveCfg = Release|Any CPU {8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Release|Any CPU.Build.0 = Release|Any CPU - {8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Release|x86.ActiveCfg = Release|Any CPU - {8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Release|x86.Build.0 = Release|Any CPU {3CEA0D69-00D3-40E5-A661-DC41EA07269B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3CEA0D69-00D3-40E5-A661-DC41EA07269B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CEA0D69-00D3-40E5-A661-DC41EA07269B}.Debug|x86.ActiveCfg = Debug|Any CPU - {3CEA0D69-00D3-40E5-A661-DC41EA07269B}.Debug|x86.Build.0 = Debug|Any CPU {3CEA0D69-00D3-40E5-A661-DC41EA07269B}.Release|Any CPU.ActiveCfg = Release|Any CPU {3CEA0D69-00D3-40E5-A661-DC41EA07269B}.Release|Any CPU.Build.0 = Release|Any CPU - {3CEA0D69-00D3-40E5-A661-DC41EA07269B}.Release|x86.ActiveCfg = Release|Any CPU - {3CEA0D69-00D3-40E5-A661-DC41EA07269B}.Release|x86.Build.0 = Release|Any CPU {76C6F005-C89D-4348-BB4A-39189DDBEB52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {76C6F005-C89D-4348-BB4A-39189DDBEB52}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76C6F005-C89D-4348-BB4A-39189DDBEB52}.Debug|x86.ActiveCfg = Debug|Any CPU - {76C6F005-C89D-4348-BB4A-39189DDBEB52}.Debug|x86.Build.0 = Debug|Any CPU {76C6F005-C89D-4348-BB4A-39189DDBEB52}.Release|Any CPU.ActiveCfg = Release|Any CPU {76C6F005-C89D-4348-BB4A-39189DDBEB52}.Release|Any CPU.Build.0 = Release|Any CPU - {76C6F005-C89D-4348-BB4A-39189DDBEB52}.Release|x86.ActiveCfg = Release|Any CPU - {76C6F005-C89D-4348-BB4A-39189DDBEB52}.Release|x86.Build.0 = Release|Any CPU {FE2CBEA6-D121-4FAA-AA8B-FC9900BF8C83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FE2CBEA6-D121-4FAA-AA8B-FC9900BF8C83}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FE2CBEA6-D121-4FAA-AA8B-FC9900BF8C83}.Debug|x86.ActiveCfg = Debug|Any CPU - {FE2CBEA6-D121-4FAA-AA8B-FC9900BF8C83}.Debug|x86.Build.0 = Debug|Any CPU {FE2CBEA6-D121-4FAA-AA8B-FC9900BF8C83}.Release|Any CPU.ActiveCfg = Release|Any CPU {FE2CBEA6-D121-4FAA-AA8B-FC9900BF8C83}.Release|Any CPU.Build.0 = Release|Any CPU - {FE2CBEA6-D121-4FAA-AA8B-FC9900BF8C83}.Release|x86.ActiveCfg = Release|Any CPU - {FE2CBEA6-D121-4FAA-AA8B-FC9900BF8C83}.Release|x86.Build.0 = Release|Any CPU {EBA4DFA1-6DED-418F-A485-A3B608978906}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EBA4DFA1-6DED-418F-A485-A3B608978906}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBA4DFA1-6DED-418F-A485-A3B608978906}.Debug|x86.ActiveCfg = Debug|Any CPU - {EBA4DFA1-6DED-418F-A485-A3B608978906}.Debug|x86.Build.0 = Debug|Any CPU {EBA4DFA1-6DED-418F-A485-A3B608978906}.Release|Any CPU.ActiveCfg = Release|Any CPU {EBA4DFA1-6DED-418F-A485-A3B608978906}.Release|Any CPU.Build.0 = Release|Any CPU - {EBA4DFA1-6DED-418F-A485-A3B608978906}.Release|x86.ActiveCfg = Release|Any CPU - {EBA4DFA1-6DED-418F-A485-A3B608978906}.Release|x86.Build.0 = Release|Any CPU {8CEE3609-A5A9-4A9B-86D7-33118F5D6B34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8CEE3609-A5A9-4A9B-86D7-33118F5D6B34}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8CEE3609-A5A9-4A9B-86D7-33118F5D6B34}.Debug|x86.ActiveCfg = Debug|Any CPU - {8CEE3609-A5A9-4A9B-86D7-33118F5D6B34}.Debug|x86.Build.0 = Debug|Any CPU {8CEE3609-A5A9-4A9B-86D7-33118F5D6B34}.Release|Any CPU.ActiveCfg = Release|Any CPU {8CEE3609-A5A9-4A9B-86D7-33118F5D6B34}.Release|Any CPU.Build.0 = Release|Any CPU - {8CEE3609-A5A9-4A9B-86D7-33118F5D6B34}.Release|x86.ActiveCfg = Release|Any CPU - {8CEE3609-A5A9-4A9B-86D7-33118F5D6B34}.Release|x86.Build.0 = Release|Any CPU {14118347-ED06-4608-9C45-18228273C712}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {14118347-ED06-4608-9C45-18228273C712}.Debug|Any CPU.Build.0 = Debug|Any CPU - {14118347-ED06-4608-9C45-18228273C712}.Debug|x86.ActiveCfg = Debug|Any CPU - {14118347-ED06-4608-9C45-18228273C712}.Debug|x86.Build.0 = Debug|Any CPU {14118347-ED06-4608-9C45-18228273C712}.Release|Any CPU.ActiveCfg = Release|Any CPU {14118347-ED06-4608-9C45-18228273C712}.Release|Any CPU.Build.0 = Release|Any CPU - {14118347-ED06-4608-9C45-18228273C712}.Release|x86.ActiveCfg = Release|Any CPU - {14118347-ED06-4608-9C45-18228273C712}.Release|x86.Build.0 = Release|Any CPU {6E62A0FF-D0DC-4109-9131-AB8E60CDFF7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E62A0FF-D0DC-4109-9131-AB8E60CDFF7B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E62A0FF-D0DC-4109-9131-AB8E60CDFF7B}.Debug|x86.ActiveCfg = Debug|Any CPU - {6E62A0FF-D0DC-4109-9131-AB8E60CDFF7B}.Debug|x86.Build.0 = Debug|Any CPU {6E62A0FF-D0DC-4109-9131-AB8E60CDFF7B}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E62A0FF-D0DC-4109-9131-AB8E60CDFF7B}.Release|Any CPU.Build.0 = Release|Any CPU - {6E62A0FF-D0DC-4109-9131-AB8E60CDFF7B}.Release|x86.ActiveCfg = Release|Any CPU - {6E62A0FF-D0DC-4109-9131-AB8E60CDFF7B}.Release|x86.Build.0 = Release|Any CPU {86FD5B9A-4FA0-4B10-B59F-CFAF077A859C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {86FD5B9A-4FA0-4B10-B59F-CFAF077A859C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86FD5B9A-4FA0-4B10-B59F-CFAF077A859C}.Debug|x86.ActiveCfg = Debug|Any CPU - {86FD5B9A-4FA0-4B10-B59F-CFAF077A859C}.Debug|x86.Build.0 = Debug|Any CPU {86FD5B9A-4FA0-4B10-B59F-CFAF077A859C}.Release|Any CPU.ActiveCfg = Release|Any CPU {86FD5B9A-4FA0-4B10-B59F-CFAF077A859C}.Release|Any CPU.Build.0 = Release|Any CPU - {86FD5B9A-4FA0-4B10-B59F-CFAF077A859C}.Release|x86.ActiveCfg = Release|Any CPU - {86FD5B9A-4FA0-4B10-B59F-CFAF077A859C}.Release|x86.Build.0 = Release|Any CPU {C0E80510-4FBE-4B0C-AF2C-4F473787722C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C0E80510-4FBE-4B0C-AF2C-4F473787722C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C0E80510-4FBE-4B0C-AF2C-4F473787722C}.Debug|x86.ActiveCfg = Debug|Any CPU - {C0E80510-4FBE-4B0C-AF2C-4F473787722C}.Debug|x86.Build.0 = Debug|Any CPU {C0E80510-4FBE-4B0C-AF2C-4F473787722C}.Release|Any CPU.ActiveCfg = Release|Any CPU {C0E80510-4FBE-4B0C-AF2C-4F473787722C}.Release|Any CPU.Build.0 = Release|Any CPU - {C0E80510-4FBE-4B0C-AF2C-4F473787722C}.Release|x86.ActiveCfg = Release|Any CPU - {C0E80510-4FBE-4B0C-AF2C-4F473787722C}.Release|x86.Build.0 = Release|Any CPU {7BE3DEEB-87F8-4E15-9C21-4F94B0B1C2D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7BE3DEEB-87F8-4E15-9C21-4F94B0B1C2D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7BE3DEEB-87F8-4E15-9C21-4F94B0B1C2D6}.Debug|x86.ActiveCfg = Debug|Any CPU - {7BE3DEEB-87F8-4E15-9C21-4F94B0B1C2D6}.Debug|x86.Build.0 = Debug|Any CPU {7BE3DEEB-87F8-4E15-9C21-4F94B0B1C2D6}.Release|Any CPU.ActiveCfg = Release|Any CPU {7BE3DEEB-87F8-4E15-9C21-4F94B0B1C2D6}.Release|Any CPU.Build.0 = Release|Any CPU - {7BE3DEEB-87F8-4E15-9C21-4F94B0B1C2D6}.Release|x86.ActiveCfg = Release|Any CPU - {7BE3DEEB-87F8-4E15-9C21-4F94B0B1C2D6}.Release|x86.Build.0 = Release|Any CPU {D49439D7-56D2-450F-A4F0-74CB95D620E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D49439D7-56D2-450F-A4F0-74CB95D620E6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D49439D7-56D2-450F-A4F0-74CB95D620E6}.Debug|x86.ActiveCfg = Debug|Any CPU - {D49439D7-56D2-450F-A4F0-74CB95D620E6}.Debug|x86.Build.0 = Debug|Any CPU {D49439D7-56D2-450F-A4F0-74CB95D620E6}.Release|Any CPU.ActiveCfg = Release|Any CPU {D49439D7-56D2-450F-A4F0-74CB95D620E6}.Release|Any CPU.Build.0 = Release|Any CPU - {D49439D7-56D2-450F-A4F0-74CB95D620E6}.Release|x86.ActiveCfg = Release|Any CPU - {D49439D7-56D2-450F-A4F0-74CB95D620E6}.Release|x86.Build.0 = Release|Any CPU {5DEFADBD-44EB-47A2-A53E-F1282CC9E4E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5DEFADBD-44EB-47A2-A53E-F1282CC9E4E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5DEFADBD-44EB-47A2-A53E-F1282CC9E4E9}.Debug|x86.ActiveCfg = Debug|Any CPU - {5DEFADBD-44EB-47A2-A53E-F1282CC9E4E9}.Debug|x86.Build.0 = Debug|Any CPU {5DEFADBD-44EB-47A2-A53E-F1282CC9E4E9}.Release|Any CPU.ActiveCfg = Release|Any CPU {5DEFADBD-44EB-47A2-A53E-F1282CC9E4E9}.Release|Any CPU.Build.0 = Release|Any CPU - {5DEFADBD-44EB-47A2-A53E-F1282CC9E4E9}.Release|x86.ActiveCfg = Release|Any CPU - {5DEFADBD-44EB-47A2-A53E-F1282CC9E4E9}.Release|x86.Build.0 = Release|Any CPU {91C574AD-0352-47E9-A019-EE02CC32A396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {91C574AD-0352-47E9-A019-EE02CC32A396}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91C574AD-0352-47E9-A019-EE02CC32A396}.Debug|x86.ActiveCfg = Debug|Any CPU - {91C574AD-0352-47E9-A019-EE02CC32A396}.Debug|x86.Build.0 = Debug|Any CPU {91C574AD-0352-47E9-A019-EE02CC32A396}.Release|Any CPU.ActiveCfg = Release|Any CPU {91C574AD-0352-47E9-A019-EE02CC32A396}.Release|Any CPU.Build.0 = Release|Any CPU - {91C574AD-0352-47E9-A019-EE02CC32A396}.Release|x86.ActiveCfg = Release|Any CPU - {91C574AD-0352-47E9-A019-EE02CC32A396}.Release|x86.Build.0 = Release|Any CPU {A1455D30-55FC-45EF-8759-3AEBDB13D940}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A1455D30-55FC-45EF-8759-3AEBDB13D940}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A1455D30-55FC-45EF-8759-3AEBDB13D940}.Debug|x86.ActiveCfg = Debug|Any CPU - {A1455D30-55FC-45EF-8759-3AEBDB13D940}.Debug|x86.Build.0 = Debug|Any CPU {A1455D30-55FC-45EF-8759-3AEBDB13D940}.Release|Any CPU.ActiveCfg = Release|Any CPU {A1455D30-55FC-45EF-8759-3AEBDB13D940}.Release|Any CPU.Build.0 = Release|Any CPU - {A1455D30-55FC-45EF-8759-3AEBDB13D940}.Release|x86.ActiveCfg = Release|Any CPU - {A1455D30-55FC-45EF-8759-3AEBDB13D940}.Release|x86.Build.0 = Release|Any CPU {201EC5B7-F91E-45E5-B9F2-67A266CCE6FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {201EC5B7-F91E-45E5-B9F2-67A266CCE6FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {201EC5B7-F91E-45E5-B9F2-67A266CCE6FC}.Debug|x86.ActiveCfg = Debug|Any CPU - {201EC5B7-F91E-45E5-B9F2-67A266CCE6FC}.Debug|x86.Build.0 = Debug|Any CPU {201EC5B7-F91E-45E5-B9F2-67A266CCE6FC}.Release|Any CPU.ActiveCfg = Release|Any CPU {201EC5B7-F91E-45E5-B9F2-67A266CCE6FC}.Release|Any CPU.Build.0 = Release|Any CPU - {201EC5B7-F91E-45E5-B9F2-67A266CCE6FC}.Release|x86.ActiveCfg = Release|Any CPU - {201EC5B7-F91E-45E5-B9F2-67A266CCE6FC}.Release|x86.Build.0 = Release|Any CPU {A486D7DE-F614-409D-BB41-0FFDF582E35C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A486D7DE-F614-409D-BB41-0FFDF582E35C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A486D7DE-F614-409D-BB41-0FFDF582E35C}.Debug|x86.ActiveCfg = Debug|Any CPU - {A486D7DE-F614-409D-BB41-0FFDF582E35C}.Debug|x86.Build.0 = Debug|Any CPU {A486D7DE-F614-409D-BB41-0FFDF582E35C}.Release|Any CPU.ActiveCfg = Release|Any CPU {A486D7DE-F614-409D-BB41-0FFDF582E35C}.Release|Any CPU.Build.0 = Release|Any CPU - {A486D7DE-F614-409D-BB41-0FFDF582E35C}.Release|x86.ActiveCfg = Release|Any CPU - {A486D7DE-F614-409D-BB41-0FFDF582E35C}.Release|x86.Build.0 = Release|Any CPU {B617717C-7881-4F01-AB6D-B1B6CC0483A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B617717C-7881-4F01-AB6D-B1B6CC0483A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B617717C-7881-4F01-AB6D-B1B6CC0483A0}.Debug|x86.ActiveCfg = Debug|Any CPU - {B617717C-7881-4F01-AB6D-B1B6CC0483A0}.Debug|x86.Build.0 = Debug|Any CPU {B617717C-7881-4F01-AB6D-B1B6CC0483A0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B617717C-7881-4F01-AB6D-B1B6CC0483A0}.Release|Any CPU.Build.0 = Release|Any CPU - {B617717C-7881-4F01-AB6D-B1B6CC0483A0}.Release|x86.ActiveCfg = Release|Any CPU - {B617717C-7881-4F01-AB6D-B1B6CC0483A0}.Release|x86.Build.0 = Release|Any CPU {FD6BA96C-7905-4876-8BCC-E38E2CA64F31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FD6BA96C-7905-4876-8BCC-E38E2CA64F31}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD6BA96C-7905-4876-8BCC-E38E2CA64F31}.Debug|x86.ActiveCfg = Debug|Any CPU - {FD6BA96C-7905-4876-8BCC-E38E2CA64F31}.Debug|x86.Build.0 = Debug|Any CPU {FD6BA96C-7905-4876-8BCC-E38E2CA64F31}.Release|Any CPU.ActiveCfg = Release|Any CPU {FD6BA96C-7905-4876-8BCC-E38E2CA64F31}.Release|Any CPU.Build.0 = Release|Any CPU - {FD6BA96C-7905-4876-8BCC-E38E2CA64F31}.Release|x86.ActiveCfg = Release|Any CPU - {FD6BA96C-7905-4876-8BCC-E38E2CA64F31}.Release|x86.Build.0 = Release|Any CPU {AE297965-4D56-4BA9-85EB-655AC4FC95A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AE297965-4D56-4BA9-85EB-655AC4FC95A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE297965-4D56-4BA9-85EB-655AC4FC95A0}.Debug|x86.ActiveCfg = Debug|Any CPU - {AE297965-4D56-4BA9-85EB-655AC4FC95A0}.Debug|x86.Build.0 = Debug|Any CPU {AE297965-4D56-4BA9-85EB-655AC4FC95A0}.Release|Any CPU.ActiveCfg = Release|Any CPU {AE297965-4D56-4BA9-85EB-655AC4FC95A0}.Release|Any CPU.Build.0 = Release|Any CPU - {AE297965-4D56-4BA9-85EB-655AC4FC95A0}.Release|x86.ActiveCfg = Release|Any CPU - {AE297965-4D56-4BA9-85EB-655AC4FC95A0}.Release|x86.Build.0 = Release|Any CPU {60DB272A-21C9-4E8D-9803-FF4E132392C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {60DB272A-21C9-4E8D-9803-FF4E132392C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60DB272A-21C9-4E8D-9803-FF4E132392C8}.Debug|x86.ActiveCfg = Debug|Any CPU - {60DB272A-21C9-4E8D-9803-FF4E132392C8}.Debug|x86.Build.0 = Debug|Any CPU {60DB272A-21C9-4E8D-9803-FF4E132392C8}.Release|Any CPU.ActiveCfg = Release|Any CPU {60DB272A-21C9-4E8D-9803-FF4E132392C8}.Release|Any CPU.Build.0 = Release|Any CPU - {60DB272A-21C9-4E8D-9803-FF4E132392C8}.Release|x86.ActiveCfg = Release|Any CPU - {60DB272A-21C9-4E8D-9803-FF4E132392C8}.Release|x86.Build.0 = Release|Any CPU {73242A2D-6300-499D-8C15-FADF7ECB185C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {73242A2D-6300-499D-8C15-FADF7ECB185C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73242A2D-6300-499D-8C15-FADF7ECB185C}.Debug|x86.ActiveCfg = Debug|Any CPU - {73242A2D-6300-499D-8C15-FADF7ECB185C}.Debug|x86.Build.0 = Debug|Any CPU {73242A2D-6300-499D-8C15-FADF7ECB185C}.Release|Any CPU.ActiveCfg = Release|Any CPU {73242A2D-6300-499D-8C15-FADF7ECB185C}.Release|Any CPU.Build.0 = Release|Any CPU - {73242A2D-6300-499D-8C15-FADF7ECB185C}.Release|x86.ActiveCfg = Release|Any CPU - {73242A2D-6300-499D-8C15-FADF7ECB185C}.Release|x86.Build.0 = Release|Any CPU {AC5E3515-482C-4C6A-92D9-D0CEA687DFC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AC5E3515-482C-4C6A-92D9-D0CEA687DFC2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC5E3515-482C-4C6A-92D9-D0CEA687DFC2}.Debug|x86.ActiveCfg = Debug|Any CPU - {AC5E3515-482C-4C6A-92D9-D0CEA687DFC2}.Debug|x86.Build.0 = Debug|Any CPU {AC5E3515-482C-4C6A-92D9-D0CEA687DFC2}.Release|Any CPU.ActiveCfg = Release|Any CPU {AC5E3515-482C-4C6A-92D9-D0CEA687DFC2}.Release|Any CPU.Build.0 = Release|Any CPU - {AC5E3515-482C-4C6A-92D9-D0CEA687DFC2}.Release|x86.ActiveCfg = Release|Any CPU - {AC5E3515-482C-4C6A-92D9-D0CEA687DFC2}.Release|x86.Build.0 = Release|Any CPU {B8DA3A90-A60C-42E3-9D8E-6C67B800C395}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B8DA3A90-A60C-42E3-9D8E-6C67B800C395}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8DA3A90-A60C-42E3-9D8E-6C67B800C395}.Debug|x86.ActiveCfg = Debug|Any CPU - {B8DA3A90-A60C-42E3-9D8E-6C67B800C395}.Debug|x86.Build.0 = Debug|Any CPU {B8DA3A90-A60C-42E3-9D8E-6C67B800C395}.Release|Any CPU.ActiveCfg = Release|Any CPU {B8DA3A90-A60C-42E3-9D8E-6C67B800C395}.Release|Any CPU.Build.0 = Release|Any CPU - {B8DA3A90-A60C-42E3-9D8E-6C67B800C395}.Release|x86.ActiveCfg = Release|Any CPU - {B8DA3A90-A60C-42E3-9D8E-6C67B800C395}.Release|x86.Build.0 = Release|Any CPU {ACE53515-482C-4C6A-E2D2-4242A687DFEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ACE53515-482C-4C6A-E2D2-4242A687DFEE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ACE53515-482C-4C6A-E2D2-4242A687DFEE}.Debug|x86.ActiveCfg = Debug|Any CPU - {ACE53515-482C-4C6A-E2D2-4242A687DFEE}.Debug|x86.Build.0 = Debug|Any CPU {ACE53515-482C-4C6A-E2D2-4242A687DFEE}.Release|Any CPU.ActiveCfg = Release|Any CPU {ACE53515-482C-4C6A-E2D2-4242A687DFEE}.Release|Any CPU.Build.0 = Release|Any CPU - {ACE53515-482C-4C6A-E2D2-4242A687DFEE}.Release|x86.ActiveCfg = Release|Any CPU - {ACE53515-482C-4C6A-E2D2-4242A687DFEE}.Release|x86.Build.0 = Release|Any CPU {21B80A31-8FF9-4E3A-8403-AABD635AEED9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {21B80A31-8FF9-4E3A-8403-AABD635AEED9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21B80A31-8FF9-4E3A-8403-AABD635AEED9}.Debug|x86.ActiveCfg = Debug|Any CPU - {21B80A31-8FF9-4E3A-8403-AABD635AEED9}.Debug|x86.Build.0 = Debug|Any CPU {21B80A31-8FF9-4E3A-8403-AABD635AEED9}.Release|Any CPU.ActiveCfg = Release|Any CPU {21B80A31-8FF9-4E3A-8403-AABD635AEED9}.Release|Any CPU.Build.0 = Release|Any CPU - {21B80A31-8FF9-4E3A-8403-AABD635AEED9}.Release|x86.ActiveCfg = Release|Any CPU - {21B80A31-8FF9-4E3A-8403-AABD635AEED9}.Release|x86.Build.0 = Release|Any CPU {ABDBAC1E-350E-4DC3-BB45-3504404545EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ABDBAC1E-350E-4DC3-BB45-3504404545EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABDBAC1E-350E-4DC3-BB45-3504404545EE}.Debug|x86.ActiveCfg = Debug|Any CPU - {ABDBAC1E-350E-4DC3-BB45-3504404545EE}.Debug|x86.Build.0 = Debug|Any CPU {ABDBAC1E-350E-4DC3-BB45-3504404545EE}.Release|Any CPU.ActiveCfg = Release|Any CPU {ABDBAC1E-350E-4DC3-BB45-3504404545EE}.Release|Any CPU.Build.0 = Release|Any CPU - {ABDBAC1E-350E-4DC3-BB45-3504404545EE}.Release|x86.ActiveCfg = Release|Any CPU - {ABDBAC1E-350E-4DC3-BB45-3504404545EE}.Release|x86.Build.0 = Release|Any CPU {FCFA8808-A1B6-48CC-A1EA-0B8CA8AEDA8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FCFA8808-A1B6-48CC-A1EA-0B8CA8AEDA8E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FCFA8808-A1B6-48CC-A1EA-0B8CA8AEDA8E}.Debug|x86.ActiveCfg = Debug|Any CPU - {FCFA8808-A1B6-48CC-A1EA-0B8CA8AEDA8E}.Debug|x86.Build.0 = Debug|Any CPU {FCFA8808-A1B6-48CC-A1EA-0B8CA8AEDA8E}.Release|Any CPU.ActiveCfg = Release|Any CPU {FCFA8808-A1B6-48CC-A1EA-0B8CA8AEDA8E}.Release|Any CPU.Build.0 = Release|Any CPU - {FCFA8808-A1B6-48CC-A1EA-0B8CA8AEDA8E}.Release|x86.ActiveCfg = Release|Any CPU - {FCFA8808-A1B6-48CC-A1EA-0B8CA8AEDA8E}.Release|x86.Build.0 = Release|Any CPU {1DFEA9C5-973C-4179-9B1B-0F32288E1EF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DFEA9C5-973C-4179-9B1B-0F32288E1EF2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1DFEA9C5-973C-4179-9B1B-0F32288E1EF2}.Debug|x86.ActiveCfg = Debug|Any CPU - {1DFEA9C5-973C-4179-9B1B-0F32288E1EF2}.Debug|x86.Build.0 = Debug|Any CPU {1DFEA9C5-973C-4179-9B1B-0F32288E1EF2}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DFEA9C5-973C-4179-9B1B-0F32288E1EF2}.Release|Any CPU.Build.0 = Release|Any CPU - {1DFEA9C5-973C-4179-9B1B-0F32288E1EF2}.Release|x86.ActiveCfg = Release|Any CPU - {1DFEA9C5-973C-4179-9B1B-0F32288E1EF2}.Release|x86.Build.0 = Release|Any CPU {76242A2D-2600-49DD-8C15-FEA07ECB1842}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {76242A2D-2600-49DD-8C15-FEA07ECB1842}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76242A2D-2600-49DD-8C15-FEA07ECB1842}.Debug|x86.ActiveCfg = Debug|Any CPU - {76242A2D-2600-49DD-8C15-FEA07ECB1842}.Debug|x86.Build.0 = Debug|Any CPU {76242A2D-2600-49DD-8C15-FEA07ECB1842}.Release|Any CPU.ActiveCfg = Release|Any CPU {76242A2D-2600-49DD-8C15-FEA07ECB1842}.Release|Any CPU.Build.0 = Release|Any CPU - {76242A2D-2600-49DD-8C15-FEA07ECB1842}.Release|x86.ActiveCfg = Release|Any CPU - {76242A2D-2600-49DD-8C15-FEA07ECB1842}.Release|x86.Build.0 = Release|Any CPU {76242A2D-2600-49DD-8C15-FEA07ECB1843}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {76242A2D-2600-49DD-8C15-FEA07ECB1843}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76242A2D-2600-49DD-8C15-FEA07ECB1843}.Debug|x86.ActiveCfg = Debug|Any CPU - {76242A2D-2600-49DD-8C15-FEA07ECB1843}.Debug|x86.Build.0 = Debug|Any CPU {76242A2D-2600-49DD-8C15-FEA07ECB1843}.Release|Any CPU.ActiveCfg = Release|Any CPU {76242A2D-2600-49DD-8C15-FEA07ECB1843}.Release|Any CPU.Build.0 = Release|Any CPU - {76242A2D-2600-49DD-8C15-FEA07ECB1843}.Release|x86.ActiveCfg = Release|Any CPU - {76242A2D-2600-49DD-8C15-FEA07ECB1843}.Release|x86.Build.0 = Release|Any CPU {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D3}.Debug|x86.ActiveCfg = Debug|Any CPU - {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D3}.Debug|x86.Build.0 = Debug|Any CPU {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D3}.Release|Any CPU.ActiveCfg = Release|Any CPU {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D3}.Release|Any CPU.Build.0 = Release|Any CPU - {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D3}.Release|x86.ActiveCfg = Release|Any CPU - {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D3}.Release|x86.Build.0 = Release|Any CPU {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D4}.Debug|x86.ActiveCfg = Debug|Any CPU - {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D4}.Debug|x86.Build.0 = Debug|Any CPU {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D4}.Release|Any CPU.ActiveCfg = Release|Any CPU {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D4}.Release|Any CPU.Build.0 = Release|Any CPU - {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D4}.Release|x86.ActiveCfg = Release|Any CPU - {BF9DAC1E-3A5E-4DC3-BB44-9A64E0D4E9D4}.Release|x86.Build.0 = Release|Any CPU {BEDC5A4A-809E-4017-9CFD-6C8D4E1847F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEDC5A4A-809E-4017-9CFD-6C8D4E1847F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BEDC5A4A-809E-4017-9CFD-6C8D4E1847F0}.Debug|x86.ActiveCfg = Debug|Any CPU - {BEDC5A4A-809E-4017-9CFD-6C8D4E1847F0}.Debug|x86.Build.0 = Debug|Any CPU {BEDC5A4A-809E-4017-9CFD-6C8D4E1847F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {BEDC5A4A-809E-4017-9CFD-6C8D4E1847F0}.Release|Any CPU.Build.0 = Release|Any CPU - {BEDC5A4A-809E-4017-9CFD-6C8D4E1847F0}.Release|x86.ActiveCfg = Release|Any CPU - {BEDC5A4A-809E-4017-9CFD-6C8D4E1847F0}.Release|x86.Build.0 = Release|Any CPU {FA0E905D-EC46-466D-B7B2-3B5557F9428C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FA0E905D-EC46-466D-B7B2-3B5557F9428C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FA0E905D-EC46-466D-B7B2-3B5557F9428C}.Debug|x86.ActiveCfg = Debug|Any CPU - {FA0E905D-EC46-466D-B7B2-3B5557F9428C}.Debug|x86.Build.0 = Debug|Any CPU {FA0E905D-EC46-466D-B7B2-3B5557F9428C}.Release|Any CPU.ActiveCfg = Release|Any CPU {FA0E905D-EC46-466D-B7B2-3B5557F9428C}.Release|Any CPU.Build.0 = Release|Any CPU - {FA0E905D-EC46-466D-B7B2-3B5557F9428C}.Release|x86.ActiveCfg = Release|Any CPU - {FA0E905D-EC46-466D-B7B2-3B5557F9428C}.Release|x86.Build.0 = Release|Any CPU {E58EE9D7-1239-4961-A0C1-F9EC3952C4C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E58EE9D7-1239-4961-A0C1-F9EC3952C4C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E58EE9D7-1239-4961-A0C1-F9EC3952C4C1}.Debug|x86.ActiveCfg = Debug|Any CPU - {E58EE9D7-1239-4961-A0C1-F9EC3952C4C1}.Debug|x86.Build.0 = Debug|Any CPU {E58EE9D7-1239-4961-A0C1-F9EC3952C4C1}.Release|Any CPU.ActiveCfg = Release|Any CPU {E58EE9D7-1239-4961-A0C1-F9EC3952C4C1}.Release|Any CPU.Build.0 = Release|Any CPU - {E58EE9D7-1239-4961-A0C1-F9EC3952C4C1}.Release|x86.ActiveCfg = Release|Any CPU - {E58EE9D7-1239-4961-A0C1-F9EC3952C4C1}.Release|x86.Build.0 = Release|Any CPU {CCBD3438-3E84-40A9-83AD-533F23BCFCA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CCBD3438-3E84-40A9-83AD-533F23BCFCA5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCBD3438-3E84-40A9-83AD-533F23BCFCA5}.Debug|x86.ActiveCfg = Debug|Any CPU - {CCBD3438-3E84-40A9-83AD-533F23BCFCA5}.Debug|x86.Build.0 = Debug|Any CPU {CCBD3438-3E84-40A9-83AD-533F23BCFCA5}.Release|Any CPU.ActiveCfg = Release|Any CPU {CCBD3438-3E84-40A9-83AD-533F23BCFCA5}.Release|Any CPU.Build.0 = Release|Any CPU - {CCBD3438-3E84-40A9-83AD-533F23BCFCA5}.Release|x86.ActiveCfg = Release|Any CPU - {CCBD3438-3E84-40A9-83AD-533F23BCFCA5}.Release|x86.Build.0 = Release|Any CPU {6FD1CC3E-6A99-4736-9B8D-757992DDE75D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6FD1CC3E-6A99-4736-9B8D-757992DDE75D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6FD1CC3E-6A99-4736-9B8D-757992DDE75D}.Debug|x86.ActiveCfg = Debug|Any CPU - {6FD1CC3E-6A99-4736-9B8D-757992DDE75D}.Debug|x86.Build.0 = Debug|Any CPU {6FD1CC3E-6A99-4736-9B8D-757992DDE75D}.Release|Any CPU.ActiveCfg = Release|Any CPU {6FD1CC3E-6A99-4736-9B8D-757992DDE75D}.Release|Any CPU.Build.0 = Release|Any CPU - {6FD1CC3E-6A99-4736-9B8D-757992DDE75D}.Release|x86.ActiveCfg = Release|Any CPU - {6FD1CC3E-6A99-4736-9B8D-757992DDE75D}.Release|x86.Build.0 = Release|Any CPU {286B01F3-811A-40A7-8C1F-10C9BB0597F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {286B01F3-811A-40A7-8C1F-10C9BB0597F7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {286B01F3-811A-40A7-8C1F-10C9BB0597F7}.Debug|x86.ActiveCfg = Debug|Any CPU - {286B01F3-811A-40A7-8C1F-10C9BB0597F7}.Debug|x86.Build.0 = Debug|Any CPU {286B01F3-811A-40A7-8C1F-10C9BB0597F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {286B01F3-811A-40A7-8C1F-10C9BB0597F7}.Release|Any CPU.Build.0 = Release|Any CPU - {286B01F3-811A-40A7-8C1F-10C9BB0597F7}.Release|x86.ActiveCfg = Release|Any CPU - {286B01F3-811A-40A7-8C1F-10C9BB0597F7}.Release|x86.Build.0 = Release|Any CPU {24973B4C-FD09-4EE1-97F4-EA03E6B12040}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {24973B4C-FD09-4EE1-97F4-EA03E6B12040}.Debug|Any CPU.Build.0 = Debug|Any CPU - {24973B4C-FD09-4EE1-97F4-EA03E6B12040}.Debug|x86.ActiveCfg = Debug|Any CPU - {24973B4C-FD09-4EE1-97F4-EA03E6B12040}.Debug|x86.Build.0 = Debug|Any CPU {24973B4C-FD09-4EE1-97F4-EA03E6B12040}.Release|Any CPU.ActiveCfg = Release|Any CPU {24973B4C-FD09-4EE1-97F4-EA03E6B12040}.Release|Any CPU.Build.0 = Release|Any CPU - {24973B4C-FD09-4EE1-97F4-EA03E6B12040}.Release|x86.ActiveCfg = Release|Any CPU - {24973B4C-FD09-4EE1-97F4-EA03E6B12040}.Release|x86.Build.0 = Release|Any CPU {ABC7262E-1053-49F3-B846-E3091BB92E8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ABC7262E-1053-49F3-B846-E3091BB92E8C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABC7262E-1053-49F3-B846-E3091BB92E8C}.Debug|x86.ActiveCfg = Debug|Any CPU - {ABC7262E-1053-49F3-B846-E3091BB92E8C}.Debug|x86.Build.0 = Debug|Any CPU {ABC7262E-1053-49F3-B846-E3091BB92E8C}.Release|Any CPU.ActiveCfg = Release|Any CPU {ABC7262E-1053-49F3-B846-E3091BB92E8C}.Release|Any CPU.Build.0 = Release|Any CPU - {ABC7262E-1053-49F3-B846-E3091BB92E8C}.Release|x86.ActiveCfg = Release|Any CPU - {ABC7262E-1053-49F3-B846-E3091BB92E8C}.Release|x86.Build.0 = Release|Any CPU {E2E889A5-2489-4546-9194-47C63E49EAEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E2E889A5-2489-4546-9194-47C63E49EAEB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E2E889A5-2489-4546-9194-47C63E49EAEB}.Debug|x86.ActiveCfg = Debug|Any CPU - {E2E889A5-2489-4546-9194-47C63E49EAEB}.Debug|x86.Build.0 = Debug|Any CPU {E2E889A5-2489-4546-9194-47C63E49EAEB}.Release|Any CPU.ActiveCfg = Release|Any CPU {E2E889A5-2489-4546-9194-47C63E49EAEB}.Release|Any CPU.Build.0 = Release|Any CPU - {E2E889A5-2489-4546-9194-47C63E49EAEB}.Release|x86.ActiveCfg = Release|Any CPU - {E2E889A5-2489-4546-9194-47C63E49EAEB}.Release|x86.Build.0 = Release|Any CPU {43026D51-3083-4850-928D-07E1883D5B1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {43026D51-3083-4850-928D-07E1883D5B1A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {43026D51-3083-4850-928D-07E1883D5B1A}.Debug|x86.ActiveCfg = Debug|Any CPU - {43026D51-3083-4850-928D-07E1883D5B1A}.Debug|x86.Build.0 = Debug|Any CPU {43026D51-3083-4850-928D-07E1883D5B1A}.Release|Any CPU.ActiveCfg = Release|Any CPU {43026D51-3083-4850-928D-07E1883D5B1A}.Release|Any CPU.Build.0 = Release|Any CPU - {43026D51-3083-4850-928D-07E1883D5B1A}.Release|x86.ActiveCfg = Release|Any CPU - {43026D51-3083-4850-928D-07E1883D5B1A}.Release|x86.Build.0 = Release|Any CPU {A88AB44F-7F9D-43F6-A127-83BB65E5A7E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A88AB44F-7F9D-43F6-A127-83BB65E5A7E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A88AB44F-7F9D-43F6-A127-83BB65E5A7E2}.Debug|x86.ActiveCfg = Debug|Any CPU - {A88AB44F-7F9D-43F6-A127-83BB65E5A7E2}.Debug|x86.Build.0 = Debug|Any CPU {A88AB44F-7F9D-43F6-A127-83BB65E5A7E2}.Release|Any CPU.ActiveCfg = Release|Any CPU {A88AB44F-7F9D-43F6-A127-83BB65E5A7E2}.Release|Any CPU.Build.0 = Release|Any CPU - {A88AB44F-7F9D-43F6-A127-83BB65E5A7E2}.Release|x86.ActiveCfg = Release|Any CPU - {A88AB44F-7F9D-43F6-A127-83BB65E5A7E2}.Release|x86.Build.0 = Release|Any CPU {E5A55C16-A5B9-4874-9043-A5266DC02F58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E5A55C16-A5B9-4874-9043-A5266DC02F58}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5A55C16-A5B9-4874-9043-A5266DC02F58}.Debug|x86.ActiveCfg = Debug|Any CPU - {E5A55C16-A5B9-4874-9043-A5266DC02F58}.Debug|x86.Build.0 = Debug|Any CPU {E5A55C16-A5B9-4874-9043-A5266DC02F58}.Release|Any CPU.ActiveCfg = Release|Any CPU {E5A55C16-A5B9-4874-9043-A5266DC02F58}.Release|Any CPU.Build.0 = Release|Any CPU - {E5A55C16-A5B9-4874-9043-A5266DC02F58}.Release|x86.ActiveCfg = Release|Any CPU - {E5A55C16-A5B9-4874-9043-A5266DC02F58}.Release|x86.Build.0 = Release|Any CPU {3BED15FD-D608-4573-B432-1569C1026F6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3BED15FD-D608-4573-B432-1569C1026F6D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BED15FD-D608-4573-B432-1569C1026F6D}.Debug|x86.ActiveCfg = Debug|Any CPU - {3BED15FD-D608-4573-B432-1569C1026F6D}.Debug|x86.Build.0 = Debug|Any CPU {3BED15FD-D608-4573-B432-1569C1026F6D}.Release|Any CPU.ActiveCfg = Release|Any CPU {3BED15FD-D608-4573-B432-1569C1026F6D}.Release|Any CPU.Build.0 = Release|Any CPU - {3BED15FD-D608-4573-B432-1569C1026F6D}.Release|x86.ActiveCfg = Release|Any CPU - {3BED15FD-D608-4573-B432-1569C1026F6D}.Release|x86.Build.0 = Release|Any CPU {DA0D2A70-A2F9-4654-A99A-3227EDF54FF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DA0D2A70-A2F9-4654-A99A-3227EDF54FF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA0D2A70-A2F9-4654-A99A-3227EDF54FF1}.Debug|x86.ActiveCfg = Debug|Any CPU - {DA0D2A70-A2F9-4654-A99A-3227EDF54FF1}.Debug|x86.Build.0 = Debug|Any CPU {DA0D2A70-A2F9-4654-A99A-3227EDF54FF1}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA0D2A70-A2F9-4654-A99A-3227EDF54FF1}.Release|Any CPU.Build.0 = Release|Any CPU - {DA0D2A70-A2F9-4654-A99A-3227EDF54FF1}.Release|x86.ActiveCfg = Release|Any CPU - {DA0D2A70-A2F9-4654-A99A-3227EDF54FF1}.Release|x86.Build.0 = Release|Any CPU {971E832B-7471-48B5-833E-5913188EC0E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {971E832B-7471-48B5-833E-5913188EC0E4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {971E832B-7471-48B5-833E-5913188EC0E4}.Debug|x86.ActiveCfg = Debug|Any CPU - {971E832B-7471-48B5-833E-5913188EC0E4}.Debug|x86.Build.0 = Debug|Any CPU {971E832B-7471-48B5-833E-5913188EC0E4}.Release|Any CPU.ActiveCfg = Release|Any CPU {971E832B-7471-48B5-833E-5913188EC0E4}.Release|Any CPU.Build.0 = Release|Any CPU - {971E832B-7471-48B5-833E-5913188EC0E4}.Release|x86.ActiveCfg = Release|Any CPU - {971E832B-7471-48B5-833E-5913188EC0E4}.Release|x86.Build.0 = Release|Any CPU {59AD474E-2A35-4E8A-A74D-E33479977FBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {59AD474E-2A35-4E8A-A74D-E33479977FBF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59AD474E-2A35-4E8A-A74D-E33479977FBF}.Debug|x86.ActiveCfg = Debug|Any CPU - {59AD474E-2A35-4E8A-A74D-E33479977FBF}.Debug|x86.Build.0 = Debug|Any CPU {59AD474E-2A35-4E8A-A74D-E33479977FBF}.Release|Any CPU.ActiveCfg = Release|Any CPU {59AD474E-2A35-4E8A-A74D-E33479977FBF}.Release|Any CPU.Build.0 = Release|Any CPU - {59AD474E-2A35-4E8A-A74D-E33479977FBF}.Release|x86.ActiveCfg = Release|Any CPU - {59AD474E-2A35-4E8A-A74D-E33479977FBF}.Release|x86.Build.0 = Release|Any CPU {F822F72A-CC87-4E31-B57D-853F65CBEBF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F822F72A-CC87-4E31-B57D-853F65CBEBF3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F822F72A-CC87-4E31-B57D-853F65CBEBF3}.Debug|x86.ActiveCfg = Debug|Any CPU - {F822F72A-CC87-4E31-B57D-853F65CBEBF3}.Debug|x86.Build.0 = Debug|Any CPU {F822F72A-CC87-4E31-B57D-853F65CBEBF3}.Release|Any CPU.ActiveCfg = Release|Any CPU {F822F72A-CC87-4E31-B57D-853F65CBEBF3}.Release|Any CPU.Build.0 = Release|Any CPU - {F822F72A-CC87-4E31-B57D-853F65CBEBF3}.Release|x86.ActiveCfg = Release|Any CPU - {F822F72A-CC87-4E31-B57D-853F65CBEBF3}.Release|x86.Build.0 = Release|Any CPU {80FDDD00-9393-47F7-8BAF-7E87CE011068}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {80FDDD00-9393-47F7-8BAF-7E87CE011068}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80FDDD00-9393-47F7-8BAF-7E87CE011068}.Debug|x86.ActiveCfg = Debug|Any CPU - {80FDDD00-9393-47F7-8BAF-7E87CE011068}.Debug|x86.Build.0 = Debug|Any CPU {80FDDD00-9393-47F7-8BAF-7E87CE011068}.Release|Any CPU.ActiveCfg = Release|Any CPU {80FDDD00-9393-47F7-8BAF-7E87CE011068}.Release|Any CPU.Build.0 = Release|Any CPU - {80FDDD00-9393-47F7-8BAF-7E87CE011068}.Release|x86.ActiveCfg = Release|Any CPU - {80FDDD00-9393-47F7-8BAF-7E87CE011068}.Release|x86.Build.0 = Release|Any CPU {7AD4FE65-9A30-41A6-8004-AA8F89BCB7F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7AD4FE65-9A30-41A6-8004-AA8F89BCB7F3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7AD4FE65-9A30-41A6-8004-AA8F89BCB7F3}.Debug|x86.ActiveCfg = Debug|Any CPU - {7AD4FE65-9A30-41A6-8004-AA8F89BCB7F3}.Debug|x86.Build.0 = Debug|Any CPU {7AD4FE65-9A30-41A6-8004-AA8F89BCB7F3}.Release|Any CPU.ActiveCfg = Release|Any CPU {7AD4FE65-9A30-41A6-8004-AA8F89BCB7F3}.Release|Any CPU.Build.0 = Release|Any CPU - {7AD4FE65-9A30-41A6-8004-AA8F89BCB7F3}.Release|x86.ActiveCfg = Release|Any CPU - {7AD4FE65-9A30-41A6-8004-AA8F89BCB7F3}.Release|x86.Build.0 = Release|Any CPU {2E1658E2-5045-4F85-A64C-C0ECCD39F719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2E1658E2-5045-4F85-A64C-C0ECCD39F719}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E1658E2-5045-4F85-A64C-C0ECCD39F719}.Debug|x86.ActiveCfg = Debug|Any CPU - {2E1658E2-5045-4F85-A64C-C0ECCD39F719}.Debug|x86.Build.0 = Debug|Any CPU {2E1658E2-5045-4F85-A64C-C0ECCD39F719}.Release|Any CPU.ActiveCfg = Release|Any CPU {2E1658E2-5045-4F85-A64C-C0ECCD39F719}.Release|Any CPU.Build.0 = Release|Any CPU - {2E1658E2-5045-4F85-A64C-C0ECCD39F719}.Release|x86.ActiveCfg = Release|Any CPU - {2E1658E2-5045-4F85-A64C-C0ECCD39F719}.Release|x86.Build.0 = Release|Any CPU {9C0660D9-48CA-40E1-BABA-8F6A1F11FE10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C0660D9-48CA-40E1-BABA-8F6A1F11FE10}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9C0660D9-48CA-40E1-BABA-8F6A1F11FE10}.Debug|x86.ActiveCfg = Debug|Any CPU - {9C0660D9-48CA-40E1-BABA-8F6A1F11FE10}.Debug|x86.Build.0 = Debug|Any CPU {9C0660D9-48CA-40E1-BABA-8F6A1F11FE10}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C0660D9-48CA-40E1-BABA-8F6A1F11FE10}.Release|Any CPU.Build.0 = Release|Any CPU - {9C0660D9-48CA-40E1-BABA-8F6A1F11FE10}.Release|x86.ActiveCfg = Release|Any CPU - {9C0660D9-48CA-40E1-BABA-8F6A1F11FE10}.Release|x86.Build.0 = Release|Any CPU {21A01C2D-2501-4619-8144-48977DD22D9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {21A01C2D-2501-4619-8144-48977DD22D9C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21A01C2D-2501-4619-8144-48977DD22D9C}.Debug|x86.ActiveCfg = Debug|Any CPU - {21A01C2D-2501-4619-8144-48977DD22D9C}.Debug|x86.Build.0 = Debug|Any CPU {21A01C2D-2501-4619-8144-48977DD22D9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {21A01C2D-2501-4619-8144-48977DD22D9C}.Release|Any CPU.Build.0 = Release|Any CPU - {21A01C2D-2501-4619-8144-48977DD22D9C}.Release|x86.ActiveCfg = Release|Any CPU - {21A01C2D-2501-4619-8144-48977DD22D9C}.Release|x86.Build.0 = Release|Any CPU {3F2FDC1C-DC6F-44CB-B4A1-A9026F25D66E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F2FDC1C-DC6F-44CB-B4A1-A9026F25D66E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3F2FDC1C-DC6F-44CB-B4A1-A9026F25D66E}.Debug|x86.ActiveCfg = Debug|Any CPU - {3F2FDC1C-DC6F-44CB-B4A1-A9026F25D66E}.Debug|x86.Build.0 = Debug|Any CPU {3F2FDC1C-DC6F-44CB-B4A1-A9026F25D66E}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F2FDC1C-DC6F-44CB-B4A1-A9026F25D66E}.Release|Any CPU.Build.0 = Release|Any CPU - {3F2FDC1C-DC6F-44CB-B4A1-A9026F25D66E}.Release|x86.ActiveCfg = Release|Any CPU - {3F2FDC1C-DC6F-44CB-B4A1-A9026F25D66E}.Release|x86.Build.0 = Release|Any CPU {3DFB4701-E3D6-4435-9F70-A6E35822C4F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3DFB4701-E3D6-4435-9F70-A6E35822C4F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3DFB4701-E3D6-4435-9F70-A6E35822C4F2}.Debug|x86.ActiveCfg = Debug|Any CPU - {3DFB4701-E3D6-4435-9F70-A6E35822C4F2}.Debug|x86.Build.0 = Debug|Any CPU {3DFB4701-E3D6-4435-9F70-A6E35822C4F2}.Release|Any CPU.ActiveCfg = Release|Any CPU {3DFB4701-E3D6-4435-9F70-A6E35822C4F2}.Release|Any CPU.Build.0 = Release|Any CPU - {3DFB4701-E3D6-4435-9F70-A6E35822C4F2}.Release|x86.ActiveCfg = Release|Any CPU - {3DFB4701-E3D6-4435-9F70-A6E35822C4F2}.Release|x86.Build.0 = Release|Any CPU {69F853E5-BD04-4842-984F-FC68CC51F402}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {69F853E5-BD04-4842-984F-FC68CC51F402}.Debug|Any CPU.Build.0 = Debug|Any CPU - {69F853E5-BD04-4842-984F-FC68CC51F402}.Debug|x86.ActiveCfg = Debug|Any CPU - {69F853E5-BD04-4842-984F-FC68CC51F402}.Debug|x86.Build.0 = Debug|Any CPU {69F853E5-BD04-4842-984F-FC68CC51F402}.Release|Any CPU.ActiveCfg = Release|Any CPU {69F853E5-BD04-4842-984F-FC68CC51F402}.Release|Any CPU.Build.0 = Release|Any CPU - {69F853E5-BD04-4842-984F-FC68CC51F402}.Release|x86.ActiveCfg = Release|Any CPU - {69F853E5-BD04-4842-984F-FC68CC51F402}.Release|x86.Build.0 = Release|Any CPU {6FC8E6F5-659C-424D-AEB5-331B95883E29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6FC8E6F5-659C-424D-AEB5-331B95883E29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6FC8E6F5-659C-424D-AEB5-331B95883E29}.Debug|x86.ActiveCfg = Debug|Any CPU - {6FC8E6F5-659C-424D-AEB5-331B95883E29}.Debug|x86.Build.0 = Debug|Any CPU {6FC8E6F5-659C-424D-AEB5-331B95883E29}.Release|Any CPU.ActiveCfg = Release|Any CPU {6FC8E6F5-659C-424D-AEB5-331B95883E29}.Release|Any CPU.Build.0 = Release|Any CPU - {6FC8E6F5-659C-424D-AEB5-331B95883E29}.Release|x86.ActiveCfg = Release|Any CPU - {6FC8E6F5-659C-424D-AEB5-331B95883E29}.Release|x86.Build.0 = Release|Any CPU {DD317BE1-42A1-4795-B1D4-F370C40D649A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD317BE1-42A1-4795-B1D4-F370C40D649A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD317BE1-42A1-4795-B1D4-F370C40D649A}.Debug|x86.ActiveCfg = Debug|Any CPU - {DD317BE1-42A1-4795-B1D4-F370C40D649A}.Debug|x86.Build.0 = Debug|Any CPU {DD317BE1-42A1-4795-B1D4-F370C40D649A}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD317BE1-42A1-4795-B1D4-F370C40D649A}.Release|Any CPU.Build.0 = Release|Any CPU - {DD317BE1-42A1-4795-B1D4-F370C40D649A}.Release|x86.ActiveCfg = Release|Any CPU - {DD317BE1-42A1-4795-B1D4-F370C40D649A}.Release|x86.Build.0 = Release|Any CPU {B6FC05F2-0E49-4BE2-8030-ACBB82B7F431}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6FC05F2-0E49-4BE2-8030-ACBB82B7F431}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6FC05F2-0E49-4BE2-8030-ACBB82B7F431}.Debug|x86.ActiveCfg = Debug|Any CPU - {B6FC05F2-0E49-4BE2-8030-ACBB82B7F431}.Debug|x86.Build.0 = Debug|Any CPU {B6FC05F2-0E49-4BE2-8030-ACBB82B7F431}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6FC05F2-0E49-4BE2-8030-ACBB82B7F431}.Release|Any CPU.Build.0 = Release|Any CPU - {B6FC05F2-0E49-4BE2-8030-ACBB82B7F431}.Release|x86.ActiveCfg = Release|Any CPU - {B6FC05F2-0E49-4BE2-8030-ACBB82B7F431}.Release|x86.Build.0 = Release|Any CPU {1688E1E5-D510-4E06-86F3-F8DB10B1393D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1688E1E5-D510-4E06-86F3-F8DB10B1393D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1688E1E5-D510-4E06-86F3-F8DB10B1393D}.Debug|x86.ActiveCfg = Debug|Any CPU - {1688E1E5-D510-4E06-86F3-F8DB10B1393D}.Debug|x86.Build.0 = Debug|Any CPU {1688E1E5-D510-4E06-86F3-F8DB10B1393D}.Release|Any CPU.ActiveCfg = Release|Any CPU {1688E1E5-D510-4E06-86F3-F8DB10B1393D}.Release|Any CPU.Build.0 = Release|Any CPU - {1688E1E5-D510-4E06-86F3-F8DB10B1393D}.Release|x86.ActiveCfg = Release|Any CPU - {1688E1E5-D510-4E06-86F3-F8DB10B1393D}.Release|x86.Build.0 = Release|Any CPU {F040CEC5-5E11-4DBD-9F6A-250478E28177}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F040CEC5-5E11-4DBD-9F6A-250478E28177}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F040CEC5-5E11-4DBD-9F6A-250478E28177}.Debug|x86.ActiveCfg = Debug|Any CPU - {F040CEC5-5E11-4DBD-9F6A-250478E28177}.Debug|x86.Build.0 = Debug|Any CPU {F040CEC5-5E11-4DBD-9F6A-250478E28177}.Release|Any CPU.ActiveCfg = Release|Any CPU {F040CEC5-5E11-4DBD-9F6A-250478E28177}.Release|Any CPU.Build.0 = Release|Any CPU - {F040CEC5-5E11-4DBD-9F6A-250478E28177}.Release|x86.ActiveCfg = Release|Any CPU - {F040CEC5-5E11-4DBD-9F6A-250478E28177}.Release|x86.Build.0 = Release|Any CPU {275812EE-DEDB-4232-9439-91C9757D2AE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {275812EE-DEDB-4232-9439-91C9757D2AE4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {275812EE-DEDB-4232-9439-91C9757D2AE4}.Debug|x86.ActiveCfg = Debug|Any CPU - {275812EE-DEDB-4232-9439-91C9757D2AE4}.Debug|x86.Build.0 = Debug|Any CPU {275812EE-DEDB-4232-9439-91C9757D2AE4}.Release|Any CPU.ActiveCfg = Release|Any CPU {275812EE-DEDB-4232-9439-91C9757D2AE4}.Release|Any CPU.Build.0 = Release|Any CPU - {275812EE-DEDB-4232-9439-91C9757D2AE4}.Release|x86.ActiveCfg = Release|Any CPU - {275812EE-DEDB-4232-9439-91C9757D2AE4}.Release|x86.Build.0 = Release|Any CPU {5FF1E493-69CC-4D0B-83F2-039F469A04E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5FF1E493-69CC-4D0B-83F2-039F469A04E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FF1E493-69CC-4D0B-83F2-039F469A04E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {5FF1E493-69CC-4D0B-83F2-039F469A04E1}.Debug|x86.Build.0 = Debug|Any CPU {5FF1E493-69CC-4D0B-83F2-039F469A04E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {5FF1E493-69CC-4D0B-83F2-039F469A04E1}.Release|Any CPU.Build.0 = Release|Any CPU - {5FF1E493-69CC-4D0B-83F2-039F469A04E1}.Release|x86.ActiveCfg = Release|Any CPU - {5FF1E493-69CC-4D0B-83F2-039F469A04E1}.Release|x86.Build.0 = Release|Any CPU {AA87BFED-089A-4096-B8D5-690BDC7D5B24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA87BFED-089A-4096-B8D5-690BDC7D5B24}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA87BFED-089A-4096-B8D5-690BDC7D5B24}.Debug|x86.ActiveCfg = Debug|Any CPU - {AA87BFED-089A-4096-B8D5-690BDC7D5B24}.Debug|x86.Build.0 = Debug|Any CPU {AA87BFED-089A-4096-B8D5-690BDC7D5B24}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA87BFED-089A-4096-B8D5-690BDC7D5B24}.Release|Any CPU.Build.0 = Release|Any CPU - {AA87BFED-089A-4096-B8D5-690BDC7D5B24}.Release|x86.ActiveCfg = Release|Any CPU - {AA87BFED-089A-4096-B8D5-690BDC7D5B24}.Release|x86.Build.0 = Release|Any CPU {A07ABCF5-BC43-4EE9-8FD8-B2D77FD54D73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A07ABCF5-BC43-4EE9-8FD8-B2D77FD54D73}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A07ABCF5-BC43-4EE9-8FD8-B2D77FD54D73}.Debug|x86.ActiveCfg = Debug|Any CPU - {A07ABCF5-BC43-4EE9-8FD8-B2D77FD54D73}.Debug|x86.Build.0 = Debug|Any CPU {A07ABCF5-BC43-4EE9-8FD8-B2D77FD54D73}.Release|Any CPU.ActiveCfg = Release|Any CPU {A07ABCF5-BC43-4EE9-8FD8-B2D77FD54D73}.Release|Any CPU.Build.0 = Release|Any CPU - {A07ABCF5-BC43-4EE9-8FD8-B2D77FD54D73}.Release|x86.ActiveCfg = Release|Any CPU - {A07ABCF5-BC43-4EE9-8FD8-B2D77FD54D73}.Release|x86.Build.0 = Release|Any CPU {2531A8C4-97DD-47BC-A79C-B7846051E137}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2531A8C4-97DD-47BC-A79C-B7846051E137}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2531A8C4-97DD-47BC-A79C-B7846051E137}.Debug|x86.ActiveCfg = Debug|Any CPU - {2531A8C4-97DD-47BC-A79C-B7846051E137}.Debug|x86.Build.0 = Debug|Any CPU {2531A8C4-97DD-47BC-A79C-B7846051E137}.Release|Any CPU.ActiveCfg = Release|Any CPU {2531A8C4-97DD-47BC-A79C-B7846051E137}.Release|Any CPU.Build.0 = Release|Any CPU - {2531A8C4-97DD-47BC-A79C-B7846051E137}.Release|x86.ActiveCfg = Release|Any CPU - {2531A8C4-97DD-47BC-A79C-B7846051E137}.Release|x86.Build.0 = Release|Any CPU {0141285D-8F6C-42C7-BAF3-3C0CCD61C716}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0141285D-8F6C-42C7-BAF3-3C0CCD61C716}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0141285D-8F6C-42C7-BAF3-3C0CCD61C716}.Debug|x86.ActiveCfg = Debug|Any CPU - {0141285D-8F6C-42C7-BAF3-3C0CCD61C716}.Debug|x86.Build.0 = Debug|Any CPU {0141285D-8F6C-42C7-BAF3-3C0CCD61C716}.Release|Any CPU.ActiveCfg = Release|Any CPU {0141285D-8F6C-42C7-BAF3-3C0CCD61C716}.Release|Any CPU.Build.0 = Release|Any CPU - {0141285D-8F6C-42C7-BAF3-3C0CCD61C716}.Release|x86.ActiveCfg = Release|Any CPU - {0141285D-8F6C-42C7-BAF3-3C0CCD61C716}.Release|x86.Build.0 = Release|Any CPU {9FF1205F-1D7C-4EE4-B038-3456FE6EBEAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9FF1205F-1D7C-4EE4-B038-3456FE6EBEAF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9FF1205F-1D7C-4EE4-B038-3456FE6EBEAF}.Debug|x86.ActiveCfg = Debug|Any CPU - {9FF1205F-1D7C-4EE4-B038-3456FE6EBEAF}.Debug|x86.Build.0 = Debug|Any CPU {9FF1205F-1D7C-4EE4-B038-3456FE6EBEAF}.Release|Any CPU.ActiveCfg = Release|Any CPU {9FF1205F-1D7C-4EE4-B038-3456FE6EBEAF}.Release|Any CPU.Build.0 = Release|Any CPU - {9FF1205F-1D7C-4EE4-B038-3456FE6EBEAF}.Release|x86.ActiveCfg = Release|Any CPU - {9FF1205F-1D7C-4EE4-B038-3456FE6EBEAF}.Release|x86.Build.0 = Release|Any CPU {5018D049-5870-465A-889B-C742CE1E31CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5018D049-5870-465A-889B-C742CE1E31CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5018D049-5870-465A-889B-C742CE1E31CB}.Debug|x86.ActiveCfg = Debug|Any CPU - {5018D049-5870-465A-889B-C742CE1E31CB}.Debug|x86.Build.0 = Debug|Any CPU {5018D049-5870-465A-889B-C742CE1E31CB}.Release|Any CPU.ActiveCfg = Release|Any CPU {5018D049-5870-465A-889B-C742CE1E31CB}.Release|Any CPU.Build.0 = Release|Any CPU - {5018D049-5870-465A-889B-C742CE1E31CB}.Release|x86.ActiveCfg = Release|Any CPU - {5018D049-5870-465A-889B-C742CE1E31CB}.Release|x86.Build.0 = Release|Any CPU {E512C6C1-F085-4AD7-B0D9-E8F1A0A2A510}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E512C6C1-F085-4AD7-B0D9-E8F1A0A2A510}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E512C6C1-F085-4AD7-B0D9-E8F1A0A2A510}.Debug|x86.ActiveCfg = Debug|Any CPU - {E512C6C1-F085-4AD7-B0D9-E8F1A0A2A510}.Debug|x86.Build.0 = Debug|Any CPU {E512C6C1-F085-4AD7-B0D9-E8F1A0A2A510}.Release|Any CPU.ActiveCfg = Release|Any CPU {E512C6C1-F085-4AD7-B0D9-E8F1A0A2A510}.Release|Any CPU.Build.0 = Release|Any CPU - {E512C6C1-F085-4AD7-B0D9-E8F1A0A2A510}.Release|x86.ActiveCfg = Release|Any CPU - {E512C6C1-F085-4AD7-B0D9-E8F1A0A2A510}.Release|x86.Build.0 = Release|Any CPU {2D36C343-BB6A-4CB5-902B-E2145ACCB58F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2D36C343-BB6A-4CB5-902B-E2145ACCB58F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D36C343-BB6A-4CB5-902B-E2145ACCB58F}.Debug|x86.ActiveCfg = Debug|Any CPU - {2D36C343-BB6A-4CB5-902B-E2145ACCB58F}.Debug|x86.Build.0 = Debug|Any CPU {2D36C343-BB6A-4CB5-902B-E2145ACCB58F}.Release|Any CPU.ActiveCfg = Release|Any CPU {2D36C343-BB6A-4CB5-902B-E2145ACCB58F}.Release|Any CPU.Build.0 = Release|Any CPU - {2D36C343-BB6A-4CB5-902B-E2145ACCB58F}.Release|x86.ActiveCfg = Release|Any CPU - {2D36C343-BB6A-4CB5-902B-E2145ACCB58F}.Release|x86.Build.0 = Release|Any CPU {FFB00FB5-8C8C-4A02-B67D-262B9D28E8B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FFB00FB5-8C8C-4A02-B67D-262B9D28E8B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFB00FB5-8C8C-4A02-B67D-262B9D28E8B1}.Debug|x86.ActiveCfg = Debug|Any CPU - {FFB00FB5-8C8C-4A02-B67D-262B9D28E8B1}.Debug|x86.Build.0 = Debug|Any CPU {FFB00FB5-8C8C-4A02-B67D-262B9D28E8B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {FFB00FB5-8C8C-4A02-B67D-262B9D28E8B1}.Release|Any CPU.Build.0 = Release|Any CPU - {FFB00FB5-8C8C-4A02-B67D-262B9D28E8B1}.Release|x86.ActiveCfg = Release|Any CPU - {FFB00FB5-8C8C-4A02-B67D-262B9D28E8B1}.Release|x86.Build.0 = Release|Any CPU {60166C60-813C-46C4-911D-2411B4ABBC0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {60166C60-813C-46C4-911D-2411B4ABBC0F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60166C60-813C-46C4-911D-2411B4ABBC0F}.Debug|x86.ActiveCfg = Debug|Any CPU - {60166C60-813C-46C4-911D-2411B4ABBC0F}.Debug|x86.Build.0 = Debug|Any CPU {60166C60-813C-46C4-911D-2411B4ABBC0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {60166C60-813C-46C4-911D-2411B4ABBC0F}.Release|Any CPU.Build.0 = Release|Any CPU - {60166C60-813C-46C4-911D-2411B4ABBC0F}.Release|x86.ActiveCfg = Release|Any CPU - {60166C60-813C-46C4-911D-2411B4ABBC0F}.Release|x86.Build.0 = Release|Any CPU {FC2AE90B-2E4B-4045-9FDD-73D4F5ED6C89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FC2AE90B-2E4B-4045-9FDD-73D4F5ED6C89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FC2AE90B-2E4B-4045-9FDD-73D4F5ED6C89}.Debug|x86.ActiveCfg = Debug|Any CPU - {FC2AE90B-2E4B-4045-9FDD-73D4F5ED6C89}.Debug|x86.Build.0 = Debug|Any CPU {FC2AE90B-2E4B-4045-9FDD-73D4F5ED6C89}.Release|Any CPU.ActiveCfg = Release|Any CPU {FC2AE90B-2E4B-4045-9FDD-73D4F5ED6C89}.Release|Any CPU.Build.0 = Release|Any CPU - {FC2AE90B-2E4B-4045-9FDD-73D4F5ED6C89}.Release|x86.ActiveCfg = Release|Any CPU - {FC2AE90B-2E4B-4045-9FDD-73D4F5ED6C89}.Release|x86.Build.0 = Release|Any CPU {49E7C367-181B-499C-AC2E-8E17C81418D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {49E7C367-181B-499C-AC2E-8E17C81418D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {49E7C367-181B-499C-AC2E-8E17C81418D6}.Debug|x86.ActiveCfg = Debug|Any CPU - {49E7C367-181B-499C-AC2E-8E17C81418D6}.Debug|x86.Build.0 = Debug|Any CPU {49E7C367-181B-499C-AC2E-8E17C81418D6}.Release|Any CPU.ActiveCfg = Release|Any CPU {49E7C367-181B-499C-AC2E-8E17C81418D6}.Release|Any CPU.Build.0 = Release|Any CPU - {49E7C367-181B-499C-AC2E-8E17C81418D6}.Release|x86.ActiveCfg = Release|Any CPU - {49E7C367-181B-499C-AC2E-8E17C81418D6}.Release|x86.Build.0 = Release|Any CPU {037F06F0-3BE8-42D0-801E-2F74FC380AB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {037F06F0-3BE8-42D0-801E-2F74FC380AB8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {037F06F0-3BE8-42D0-801E-2F74FC380AB8}.Debug|x86.ActiveCfg = Debug|Any CPU - {037F06F0-3BE8-42D0-801E-2F74FC380AB8}.Debug|x86.Build.0 = Debug|Any CPU {037F06F0-3BE8-42D0-801E-2F74FC380AB8}.Release|Any CPU.ActiveCfg = Release|Any CPU {037F06F0-3BE8-42D0-801E-2F74FC380AB8}.Release|Any CPU.Build.0 = Release|Any CPU - {037F06F0-3BE8-42D0-801E-2F74FC380AB8}.Release|x86.ActiveCfg = Release|Any CPU - {037F06F0-3BE8-42D0-801E-2F74FC380AB8}.Release|x86.Build.0 = Release|Any CPU {2F11618A-9251-4609-B3D5-CE4D2B3D3E49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2F11618A-9251-4609-B3D5-CE4D2B3D3E49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F11618A-9251-4609-B3D5-CE4D2B3D3E49}.Debug|x86.ActiveCfg = Debug|Any CPU - {2F11618A-9251-4609-B3D5-CE4D2B3D3E49}.Debug|x86.Build.0 = Debug|Any CPU {2F11618A-9251-4609-B3D5-CE4D2B3D3E49}.Release|Any CPU.ActiveCfg = Release|Any CPU {2F11618A-9251-4609-B3D5-CE4D2B3D3E49}.Release|Any CPU.Build.0 = Release|Any CPU - {2F11618A-9251-4609-B3D5-CE4D2B3D3E49}.Release|x86.ActiveCfg = Release|Any CPU - {2F11618A-9251-4609-B3D5-CE4D2B3D3E49}.Release|x86.Build.0 = Release|Any CPU {764D2C19-0187-4837-A2A3-96DDC6EF4CE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {764D2C19-0187-4837-A2A3-96DDC6EF4CE2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {764D2C19-0187-4837-A2A3-96DDC6EF4CE2}.Debug|x86.ActiveCfg = Debug|Any CPU - {764D2C19-0187-4837-A2A3-96DDC6EF4CE2}.Debug|x86.Build.0 = Debug|Any CPU {764D2C19-0187-4837-A2A3-96DDC6EF4CE2}.Release|Any CPU.ActiveCfg = Release|Any CPU {764D2C19-0187-4837-A2A3-96DDC6EF4CE2}.Release|Any CPU.Build.0 = Release|Any CPU - {764D2C19-0187-4837-A2A3-96DDC6EF4CE2}.Release|x86.ActiveCfg = Release|Any CPU - {764D2C19-0187-4837-A2A3-96DDC6EF4CE2}.Release|x86.Build.0 = Release|Any CPU {9102ECF3-5CD1-4107-B8B7-F3795A52D790}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9102ECF3-5CD1-4107-B8B7-F3795A52D790}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9102ECF3-5CD1-4107-B8B7-F3795A52D790}.Debug|x86.ActiveCfg = Debug|Any CPU - {9102ECF3-5CD1-4107-B8B7-F3795A52D790}.Debug|x86.Build.0 = Debug|Any CPU {9102ECF3-5CD1-4107-B8B7-F3795A52D790}.Release|Any CPU.ActiveCfg = Release|Any CPU {9102ECF3-5CD1-4107-B8B7-F3795A52D790}.Release|Any CPU.Build.0 = Release|Any CPU - {9102ECF3-5CD1-4107-B8B7-F3795A52D790}.Release|x86.ActiveCfg = Release|Any CPU - {9102ECF3-5CD1-4107-B8B7-F3795A52D790}.Release|x86.Build.0 = Release|Any CPU {50CF5D8F-F82F-4210-A06E-37CC9BFFDD49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {50CF5D8F-F82F-4210-A06E-37CC9BFFDD49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50CF5D8F-F82F-4210-A06E-37CC9BFFDD49}.Debug|x86.ActiveCfg = Debug|Any CPU - {50CF5D8F-F82F-4210-A06E-37CC9BFFDD49}.Debug|x86.Build.0 = Debug|Any CPU {50CF5D8F-F82F-4210-A06E-37CC9BFFDD49}.Release|Any CPU.ActiveCfg = Release|Any CPU {50CF5D8F-F82F-4210-A06E-37CC9BFFDD49}.Release|Any CPU.Build.0 = Release|Any CPU - {50CF5D8F-F82F-4210-A06E-37CC9BFFDD49}.Release|x86.ActiveCfg = Release|Any CPU - {50CF5D8F-F82F-4210-A06E-37CC9BFFDD49}.Release|x86.Build.0 = Release|Any CPU {CFA94A39-4805-456D-A369-FC35CCC170E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CFA94A39-4805-456D-A369-FC35CCC170E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CFA94A39-4805-456D-A369-FC35CCC170E9}.Debug|x86.ActiveCfg = Debug|Any CPU - {CFA94A39-4805-456D-A369-FC35CCC170E9}.Debug|x86.Build.0 = Debug|Any CPU {CFA94A39-4805-456D-A369-FC35CCC170E9}.Release|Any CPU.ActiveCfg = Release|Any CPU {CFA94A39-4805-456D-A369-FC35CCC170E9}.Release|Any CPU.Build.0 = Release|Any CPU - {CFA94A39-4805-456D-A369-FC35CCC170E9}.Release|x86.ActiveCfg = Release|Any CPU - {CFA94A39-4805-456D-A369-FC35CCC170E9}.Release|x86.Build.0 = Release|Any CPU {4A490CBC-37F4-4859-AFDB-4B0833D144AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4A490CBC-37F4-4859-AFDB-4B0833D144AF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4A490CBC-37F4-4859-AFDB-4B0833D144AF}.Debug|x86.ActiveCfg = Debug|Any CPU - {4A490CBC-37F4-4859-AFDB-4B0833D144AF}.Debug|x86.Build.0 = Debug|Any CPU {4A490CBC-37F4-4859-AFDB-4B0833D144AF}.Release|Any CPU.ActiveCfg = Release|Any CPU {4A490CBC-37F4-4859-AFDB-4B0833D144AF}.Release|Any CPU.Build.0 = Release|Any CPU - {4A490CBC-37F4-4859-AFDB-4B0833D144AF}.Release|x86.ActiveCfg = Release|Any CPU - {4A490CBC-37F4-4859-AFDB-4B0833D144AF}.Release|x86.Build.0 = Release|Any CPU {34E868E9-D30B-4FB5-BC61-AFC4A9612A0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {34E868E9-D30B-4FB5-BC61-AFC4A9612A0F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34E868E9-D30B-4FB5-BC61-AFC4A9612A0F}.Debug|x86.ActiveCfg = Debug|Any CPU - {34E868E9-D30B-4FB5-BC61-AFC4A9612A0F}.Debug|x86.Build.0 = Debug|Any CPU {34E868E9-D30B-4FB5-BC61-AFC4A9612A0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {34E868E9-D30B-4FB5-BC61-AFC4A9612A0F}.Release|Any CPU.Build.0 = Release|Any CPU - {34E868E9-D30B-4FB5-BC61-AFC4A9612A0F}.Release|x86.ActiveCfg = Release|Any CPU - {34E868E9-D30B-4FB5-BC61-AFC4A9612A0F}.Release|x86.Build.0 = Release|Any CPU {0EB22BD1-B8B1-417D-8276-F475C2E190FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0EB22BD1-B8B1-417D-8276-F475C2E190FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0EB22BD1-B8B1-417D-8276-F475C2E190FF}.Debug|x86.ActiveCfg = Debug|Any CPU - {0EB22BD1-B8B1-417D-8276-F475C2E190FF}.Debug|x86.Build.0 = Debug|Any CPU {0EB22BD1-B8B1-417D-8276-F475C2E190FF}.Release|Any CPU.ActiveCfg = Release|Any CPU {0EB22BD1-B8B1-417D-8276-F475C2E190FF}.Release|Any CPU.Build.0 = Release|Any CPU - {0EB22BD1-B8B1-417D-8276-F475C2E190FF}.Release|x86.ActiveCfg = Release|Any CPU - {0EB22BD1-B8B1-417D-8276-F475C2E190FF}.Release|x86.Build.0 = Release|Any CPU {3636D3E2-E3EF-4815-B020-819F382204CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3636D3E2-E3EF-4815-B020-819F382204CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3636D3E2-E3EF-4815-B020-819F382204CD}.Debug|x86.ActiveCfg = Debug|Any CPU - {3636D3E2-E3EF-4815-B020-819F382204CD}.Debug|x86.Build.0 = Debug|Any CPU {3636D3E2-E3EF-4815-B020-819F382204CD}.Release|Any CPU.ActiveCfg = Release|Any CPU {3636D3E2-E3EF-4815-B020-819F382204CD}.Release|Any CPU.Build.0 = Release|Any CPU - {3636D3E2-E3EF-4815-B020-819F382204CD}.Release|x86.ActiveCfg = Release|Any CPU - {3636D3E2-E3EF-4815-B020-819F382204CD}.Release|x86.Build.0 = Release|Any CPU {B9843F65-262E-4F40-A0BC-2CBEF7563A44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B9843F65-262E-4F40-A0BC-2CBEF7563A44}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9843F65-262E-4F40-A0BC-2CBEF7563A44}.Debug|x86.ActiveCfg = Debug|Any CPU - {B9843F65-262E-4F40-A0BC-2CBEF7563A44}.Debug|x86.Build.0 = Debug|Any CPU {B9843F65-262E-4F40-A0BC-2CBEF7563A44}.Release|Any CPU.ActiveCfg = Release|Any CPU {B9843F65-262E-4F40-A0BC-2CBEF7563A44}.Release|Any CPU.Build.0 = Release|Any CPU - {B9843F65-262E-4F40-A0BC-2CBEF7563A44}.Release|x86.ActiveCfg = Release|Any CPU - {B9843F65-262E-4F40-A0BC-2CBEF7563A44}.Release|x86.Build.0 = Release|Any CPU {03607817-6800-40B6-BEAA-D6F437CD62B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {03607817-6800-40B6-BEAA-D6F437CD62B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03607817-6800-40B6-BEAA-D6F437CD62B7}.Debug|x86.ActiveCfg = Debug|Any CPU - {03607817-6800-40B6-BEAA-D6F437CD62B7}.Debug|x86.Build.0 = Debug|Any CPU {03607817-6800-40B6-BEAA-D6F437CD62B7}.Release|Any CPU.ActiveCfg = Release|Any CPU {03607817-6800-40B6-BEAA-D6F437CD62B7}.Release|Any CPU.Build.0 = Release|Any CPU - {03607817-6800-40B6-BEAA-D6F437CD62B7}.Release|x86.ActiveCfg = Release|Any CPU - {03607817-6800-40B6-BEAA-D6F437CD62B7}.Release|x86.Build.0 = Release|Any CPU {6A68FDF9-24B3-4CB6-A808-96BF50D1BCE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6A68FDF9-24B3-4CB6-A808-96BF50D1BCE5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A68FDF9-24B3-4CB6-A808-96BF50D1BCE5}.Debug|x86.ActiveCfg = Debug|Any CPU - {6A68FDF9-24B3-4CB6-A808-96BF50D1BCE5}.Debug|x86.Build.0 = Debug|Any CPU {6A68FDF9-24B3-4CB6-A808-96BF50D1BCE5}.Release|Any CPU.ActiveCfg = Release|Any CPU {6A68FDF9-24B3-4CB6-A808-96BF50D1BCE5}.Release|Any CPU.Build.0 = Release|Any CPU - {6A68FDF9-24B3-4CB6-A808-96BF50D1BCE5}.Release|x86.ActiveCfg = Release|Any CPU - {6A68FDF9-24B3-4CB6-A808-96BF50D1BCE5}.Release|x86.Build.0 = Release|Any CPU {23405307-7EFF-4774-8B11-8F5885439761}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {23405307-7EFF-4774-8B11-8F5885439761}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23405307-7EFF-4774-8B11-8F5885439761}.Debug|x86.ActiveCfg = Debug|Any CPU - {23405307-7EFF-4774-8B11-8F5885439761}.Debug|x86.Build.0 = Debug|Any CPU {23405307-7EFF-4774-8B11-8F5885439761}.Release|Any CPU.ActiveCfg = Release|Any CPU {23405307-7EFF-4774-8B11-8F5885439761}.Release|Any CPU.Build.0 = Release|Any CPU - {23405307-7EFF-4774-8B11-8F5885439761}.Release|x86.ActiveCfg = Release|Any CPU - {23405307-7EFF-4774-8B11-8F5885439761}.Release|x86.Build.0 = Release|Any CPU {6362616E-6A47-48F0-9EE0-27800B306ACB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6362616E-6A47-48F0-9EE0-27800B306ACB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6362616E-6A47-48F0-9EE0-27800B306ACB}.Debug|x86.ActiveCfg = Debug|Any CPU - {6362616E-6A47-48F0-9EE0-27800B306ACB}.Debug|x86.Build.0 = Debug|Any CPU {6362616E-6A47-48F0-9EE0-27800B306ACB}.Release|Any CPU.ActiveCfg = Release|Any CPU {6362616E-6A47-48F0-9EE0-27800B306ACB}.Release|Any CPU.Build.0 = Release|Any CPU - {6362616E-6A47-48F0-9EE0-27800B306ACB}.Release|x86.ActiveCfg = Release|Any CPU - {6362616E-6A47-48F0-9EE0-27800B306ACB}.Release|x86.Build.0 = Release|Any CPU {BD8CE303-5F04-45EC-8DCF-73C9164CD614}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD8CE303-5F04-45EC-8DCF-73C9164CD614}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD8CE303-5F04-45EC-8DCF-73C9164CD614}.Debug|x86.ActiveCfg = Debug|Any CPU - {BD8CE303-5F04-45EC-8DCF-73C9164CD614}.Debug|x86.Build.0 = Debug|Any CPU {BD8CE303-5F04-45EC-8DCF-73C9164CD614}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD8CE303-5F04-45EC-8DCF-73C9164CD614}.Release|Any CPU.Build.0 = Release|Any CPU - {BD8CE303-5F04-45EC-8DCF-73C9164CD614}.Release|x86.ActiveCfg = Release|Any CPU - {BD8CE303-5F04-45EC-8DCF-73C9164CD614}.Release|x86.Build.0 = Release|Any CPU {2FB6C157-DF91-4B1C-9827-A4D1C08C73EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2FB6C157-DF91-4B1C-9827-A4D1C08C73EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2FB6C157-DF91-4B1C-9827-A4D1C08C73EC}.Debug|x86.ActiveCfg = Debug|Any CPU - {2FB6C157-DF91-4B1C-9827-A4D1C08C73EC}.Debug|x86.Build.0 = Debug|Any CPU {2FB6C157-DF91-4B1C-9827-A4D1C08C73EC}.Release|Any CPU.ActiveCfg = Release|Any CPU {2FB6C157-DF91-4B1C-9827-A4D1C08C73EC}.Release|Any CPU.Build.0 = Release|Any CPU - {2FB6C157-DF91-4B1C-9827-A4D1C08C73EC}.Release|x86.ActiveCfg = Release|Any CPU - {2FB6C157-DF91-4B1C-9827-A4D1C08C73EC}.Release|x86.Build.0 = Release|Any CPU {5E6E9184-DEC5-4EC5-B0A4-77CFDC8CDEBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5E6E9184-DEC5-4EC5-B0A4-77CFDC8CDEBE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5E6E9184-DEC5-4EC5-B0A4-77CFDC8CDEBE}.Debug|x86.ActiveCfg = Debug|Any CPU - {5E6E9184-DEC5-4EC5-B0A4-77CFDC8CDEBE}.Debug|x86.Build.0 = Debug|Any CPU {5E6E9184-DEC5-4EC5-B0A4-77CFDC8CDEBE}.Release|Any CPU.ActiveCfg = Release|Any CPU {5E6E9184-DEC5-4EC5-B0A4-77CFDC8CDEBE}.Release|Any CPU.Build.0 = Release|Any CPU - {5E6E9184-DEC5-4EC5-B0A4-77CFDC8CDEBE}.Release|x86.ActiveCfg = Release|Any CPU - {5E6E9184-DEC5-4EC5-B0A4-77CFDC8CDEBE}.Release|x86.Build.0 = Release|Any CPU {A74C7D2E-92FA-490A-B80A-28BEF56B56FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A74C7D2E-92FA-490A-B80A-28BEF56B56FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A74C7D2E-92FA-490A-B80A-28BEF56B56FC}.Debug|x86.ActiveCfg = Debug|Any CPU - {A74C7D2E-92FA-490A-B80A-28BEF56B56FC}.Debug|x86.Build.0 = Debug|Any CPU {A74C7D2E-92FA-490A-B80A-28BEF56B56FC}.Release|Any CPU.ActiveCfg = Release|Any CPU {A74C7D2E-92FA-490A-B80A-28BEF56B56FC}.Release|Any CPU.Build.0 = Release|Any CPU - {A74C7D2E-92FA-490A-B80A-28BEF56B56FC}.Release|x86.ActiveCfg = Release|Any CPU - {A74C7D2E-92FA-490A-B80A-28BEF56B56FC}.Release|x86.Build.0 = Release|Any CPU {686BF57E-A6FF-467B-AAB3-44DE916A9772}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {686BF57E-A6FF-467B-AAB3-44DE916A9772}.Debug|Any CPU.Build.0 = Debug|Any CPU - {686BF57E-A6FF-467B-AAB3-44DE916A9772}.Debug|x86.ActiveCfg = Debug|Any CPU - {686BF57E-A6FF-467B-AAB3-44DE916A9772}.Debug|x86.Build.0 = Debug|Any CPU {686BF57E-A6FF-467B-AAB3-44DE916A9772}.Release|Any CPU.ActiveCfg = Release|Any CPU {686BF57E-A6FF-467B-AAB3-44DE916A9772}.Release|Any CPU.Build.0 = Release|Any CPU - {686BF57E-A6FF-467B-AAB3-44DE916A9772}.Release|x86.ActiveCfg = Release|Any CPU - {686BF57E-A6FF-467B-AAB3-44DE916A9772}.Release|x86.Build.0 = Release|Any CPU {1DDE89EE-5819-441F-A060-2FF4A986F372}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DDE89EE-5819-441F-A060-2FF4A986F372}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1DDE89EE-5819-441F-A060-2FF4A986F372}.Debug|x86.ActiveCfg = Debug|Any CPU - {1DDE89EE-5819-441F-A060-2FF4A986F372}.Debug|x86.Build.0 = Debug|Any CPU {1DDE89EE-5819-441F-A060-2FF4A986F372}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DDE89EE-5819-441F-A060-2FF4A986F372}.Release|Any CPU.Build.0 = Release|Any CPU - {1DDE89EE-5819-441F-A060-2FF4A986F372}.Release|x86.ActiveCfg = Release|Any CPU - {1DDE89EE-5819-441F-A060-2FF4A986F372}.Release|x86.Build.0 = Release|Any CPU {655A5B07-39B8-48CD-8590-8AC0C2B708D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {655A5B07-39B8-48CD-8590-8AC0C2B708D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {655A5B07-39B8-48CD-8590-8AC0C2B708D8}.Debug|x86.ActiveCfg = Debug|Any CPU - {655A5B07-39B8-48CD-8590-8AC0C2B708D8}.Debug|x86.Build.0 = Debug|Any CPU {655A5B07-39B8-48CD-8590-8AC0C2B708D8}.Release|Any CPU.ActiveCfg = Release|Any CPU {655A5B07-39B8-48CD-8590-8AC0C2B708D8}.Release|Any CPU.Build.0 = Release|Any CPU - {655A5B07-39B8-48CD-8590-8AC0C2B708D8}.Release|x86.ActiveCfg = Release|Any CPU - {655A5B07-39B8-48CD-8590-8AC0C2B708D8}.Release|x86.Build.0 = Release|Any CPU {DE53934B-7FC1-48A0-85AB-C519FBBD02CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DE53934B-7FC1-48A0-85AB-C519FBBD02CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE53934B-7FC1-48A0-85AB-C519FBBD02CF}.Debug|x86.ActiveCfg = Debug|Any CPU - {DE53934B-7FC1-48A0-85AB-C519FBBD02CF}.Debug|x86.Build.0 = Debug|Any CPU {DE53934B-7FC1-48A0-85AB-C519FBBD02CF}.Release|Any CPU.ActiveCfg = Release|Any CPU {DE53934B-7FC1-48A0-85AB-C519FBBD02CF}.Release|Any CPU.Build.0 = Release|Any CPU - {DE53934B-7FC1-48A0-85AB-C519FBBD02CF}.Release|x86.ActiveCfg = Release|Any CPU - {DE53934B-7FC1-48A0-85AB-C519FBBD02CF}.Release|x86.Build.0 = Release|Any CPU {3D33BBFD-EC63-4E8C-A714-0A48A3809A87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3D33BBFD-EC63-4E8C-A714-0A48A3809A87}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D33BBFD-EC63-4E8C-A714-0A48A3809A87}.Debug|x86.ActiveCfg = Debug|Any CPU - {3D33BBFD-EC63-4E8C-A714-0A48A3809A87}.Debug|x86.Build.0 = Debug|Any CPU {3D33BBFD-EC63-4E8C-A714-0A48A3809A87}.Release|Any CPU.ActiveCfg = Release|Any CPU {3D33BBFD-EC63-4E8C-A714-0A48A3809A87}.Release|Any CPU.Build.0 = Release|Any CPU - {3D33BBFD-EC63-4E8C-A714-0A48A3809A87}.Release|x86.ActiveCfg = Release|Any CPU - {3D33BBFD-EC63-4E8C-A714-0A48A3809A87}.Release|x86.Build.0 = Release|Any CPU {BFFB5CAE-33B5-447E-9218-BDEBFDA96CB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BFFB5CAE-33B5-447E-9218-BDEBFDA96CB5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BFFB5CAE-33B5-447E-9218-BDEBFDA96CB5}.Debug|x86.ActiveCfg = Debug|Any CPU - {BFFB5CAE-33B5-447E-9218-BDEBFDA96CB5}.Debug|x86.Build.0 = Debug|Any CPU {BFFB5CAE-33B5-447E-9218-BDEBFDA96CB5}.Release|Any CPU.ActiveCfg = Release|Any CPU {BFFB5CAE-33B5-447E-9218-BDEBFDA96CB5}.Release|Any CPU.Build.0 = Release|Any CPU - {BFFB5CAE-33B5-447E-9218-BDEBFDA96CB5}.Release|x86.ActiveCfg = Release|Any CPU - {BFFB5CAE-33B5-447E-9218-BDEBFDA96CB5}.Release|x86.Build.0 = Release|Any CPU {FC32EF16-31B1-47B3-B625-A80933CB3F29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FC32EF16-31B1-47B3-B625-A80933CB3F29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FC32EF16-31B1-47B3-B625-A80933CB3F29}.Debug|x86.ActiveCfg = Debug|Any CPU - {FC32EF16-31B1-47B3-B625-A80933CB3F29}.Debug|x86.Build.0 = Debug|Any CPU {FC32EF16-31B1-47B3-B625-A80933CB3F29}.Release|Any CPU.ActiveCfg = Release|Any CPU {FC32EF16-31B1-47B3-B625-A80933CB3F29}.Release|Any CPU.Build.0 = Release|Any CPU - {FC32EF16-31B1-47B3-B625-A80933CB3F29}.Release|x86.ActiveCfg = Release|Any CPU - {FC32EF16-31B1-47B3-B625-A80933CB3F29}.Release|x86.Build.0 = Release|Any CPU {453C8E28-81D4-431E-BFB0-F3D413346E51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {453C8E28-81D4-431E-BFB0-F3D413346E51}.Debug|Any CPU.Build.0 = Debug|Any CPU - {453C8E28-81D4-431E-BFB0-F3D413346E51}.Debug|x86.ActiveCfg = Debug|Any CPU - {453C8E28-81D4-431E-BFB0-F3D413346E51}.Debug|x86.Build.0 = Debug|Any CPU {453C8E28-81D4-431E-BFB0-F3D413346E51}.Release|Any CPU.ActiveCfg = Release|Any CPU {453C8E28-81D4-431E-BFB0-F3D413346E51}.Release|Any CPU.Build.0 = Release|Any CPU - {453C8E28-81D4-431E-BFB0-F3D413346E51}.Release|x86.ActiveCfg = Release|Any CPU - {453C8E28-81D4-431E-BFB0-F3D413346E51}.Release|x86.Build.0 = Release|Any CPU {CE7F7553-DB2D-4839-92E3-F042E4261B4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CE7F7553-DB2D-4839-92E3-F042E4261B4E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE7F7553-DB2D-4839-92E3-F042E4261B4E}.Debug|x86.ActiveCfg = Debug|Any CPU - {CE7F7553-DB2D-4839-92E3-F042E4261B4E}.Debug|x86.Build.0 = Debug|Any CPU {CE7F7553-DB2D-4839-92E3-F042E4261B4E}.Release|Any CPU.ActiveCfg = Release|Any CPU {CE7F7553-DB2D-4839-92E3-F042E4261B4E}.Release|Any CPU.Build.0 = Release|Any CPU - {CE7F7553-DB2D-4839-92E3-F042E4261B4E}.Release|x86.ActiveCfg = Release|Any CPU - {CE7F7553-DB2D-4839-92E3-F042E4261B4E}.Release|x86.Build.0 = Release|Any CPU {FF38E9C9-7A25-44F0-B2C4-24C9BFD6A8F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FF38E9C9-7A25-44F0-B2C4-24C9BFD6A8F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF38E9C9-7A25-44F0-B2C4-24C9BFD6A8F6}.Debug|x86.ActiveCfg = Debug|Any CPU - {FF38E9C9-7A25-44F0-B2C4-24C9BFD6A8F6}.Debug|x86.Build.0 = Debug|Any CPU {FF38E9C9-7A25-44F0-B2C4-24C9BFD6A8F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {FF38E9C9-7A25-44F0-B2C4-24C9BFD6A8F6}.Release|Any CPU.Build.0 = Release|Any CPU - {FF38E9C9-7A25-44F0-B2C4-24C9BFD6A8F6}.Release|x86.ActiveCfg = Release|Any CPU - {FF38E9C9-7A25-44F0-B2C4-24C9BFD6A8F6}.Release|x86.Build.0 = Release|Any CPU {D55FB2BD-CC9E-454B-9654-94AF5D910BF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D55FB2BD-CC9E-454B-9654-94AF5D910BF7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D55FB2BD-CC9E-454B-9654-94AF5D910BF7}.Debug|x86.ActiveCfg = Debug|Any CPU - {D55FB2BD-CC9E-454B-9654-94AF5D910BF7}.Debug|x86.Build.0 = Debug|Any CPU {D55FB2BD-CC9E-454B-9654-94AF5D910BF7}.Release|Any CPU.ActiveCfg = Release|Any CPU {D55FB2BD-CC9E-454B-9654-94AF5D910BF7}.Release|Any CPU.Build.0 = Release|Any CPU - {D55FB2BD-CC9E-454B-9654-94AF5D910BF7}.Release|x86.ActiveCfg = Release|Any CPU - {D55FB2BD-CC9E-454B-9654-94AF5D910BF7}.Release|x86.Build.0 = Release|Any CPU {B9899CF1-E0EB-4599-9E24-6939A04B4979}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B9899CF1-E0EB-4599-9E24-6939A04B4979}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9899CF1-E0EB-4599-9E24-6939A04B4979}.Debug|x86.ActiveCfg = Debug|Any CPU - {B9899CF1-E0EB-4599-9E24-6939A04B4979}.Debug|x86.Build.0 = Debug|Any CPU {B9899CF1-E0EB-4599-9E24-6939A04B4979}.Release|Any CPU.ActiveCfg = Release|Any CPU {B9899CF1-E0EB-4599-9E24-6939A04B4979}.Release|Any CPU.Build.0 = Release|Any CPU - {B9899CF1-E0EB-4599-9E24-6939A04B4979}.Release|x86.ActiveCfg = Release|Any CPU - {B9899CF1-E0EB-4599-9E24-6939A04B4979}.Release|x86.Build.0 = Release|Any CPU {D15BF03E-04ED-4BEE-A72B-7620F541F4E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D15BF03E-04ED-4BEE-A72B-7620F541F4E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D15BF03E-04ED-4BEE-A72B-7620F541F4E2}.Debug|x86.ActiveCfg = Debug|Any CPU - {D15BF03E-04ED-4BEE-A72B-7620F541F4E2}.Debug|x86.Build.0 = Debug|Any CPU {D15BF03E-04ED-4BEE-A72B-7620F541F4E2}.Release|Any CPU.ActiveCfg = Release|Any CPU {D15BF03E-04ED-4BEE-A72B-7620F541F4E2}.Release|Any CPU.Build.0 = Release|Any CPU - {D15BF03E-04ED-4BEE-A72B-7620F541F4E2}.Release|x86.ActiveCfg = Release|Any CPU - {D15BF03E-04ED-4BEE-A72B-7620F541F4E2}.Release|x86.Build.0 = Release|Any CPU {B64766CD-1A1F-4C1B-B11F-C30F82B8E41E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B64766CD-1A1F-4C1B-B11F-C30F82B8E41E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B64766CD-1A1F-4C1B-B11F-C30F82B8E41E}.Debug|x86.ActiveCfg = Debug|Any CPU - {B64766CD-1A1F-4C1B-B11F-C30F82B8E41E}.Debug|x86.Build.0 = Debug|Any CPU {B64766CD-1A1F-4C1B-B11F-C30F82B8E41E}.Release|Any CPU.ActiveCfg = Release|Any CPU {B64766CD-1A1F-4C1B-B11F-C30F82B8E41E}.Release|Any CPU.Build.0 = Release|Any CPU - {B64766CD-1A1F-4C1B-B11F-C30F82B8E41E}.Release|x86.ActiveCfg = Release|Any CPU - {B64766CD-1A1F-4C1B-B11F-C30F82B8E41E}.Release|x86.Build.0 = Release|Any CPU {2D5E2DE4-5DA8-41C1-A14F-49855DCCE9C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2D5E2DE4-5DA8-41C1-A14F-49855DCCE9C5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D5E2DE4-5DA8-41C1-A14F-49855DCCE9C5}.Debug|x86.ActiveCfg = Debug|Any CPU - {2D5E2DE4-5DA8-41C1-A14F-49855DCCE9C5}.Debug|x86.Build.0 = Debug|Any CPU {2D5E2DE4-5DA8-41C1-A14F-49855DCCE9C5}.Release|Any CPU.ActiveCfg = Release|Any CPU {2D5E2DE4-5DA8-41C1-A14F-49855DCCE9C5}.Release|Any CPU.Build.0 = Release|Any CPU - {2D5E2DE4-5DA8-41C1-A14F-49855DCCE9C5}.Release|x86.ActiveCfg = Release|Any CPU - {2D5E2DE4-5DA8-41C1-A14F-49855DCCE9C5}.Release|x86.Build.0 = Release|Any CPU {CEA80C83-5848-4FF6-B4E8-CEEE9482E4AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CEA80C83-5848-4FF6-B4E8-CEEE9482E4AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CEA80C83-5848-4FF6-B4E8-CEEE9482E4AA}.Debug|x86.ActiveCfg = Debug|Any CPU - {CEA80C83-5848-4FF6-B4E8-CEEE9482E4AA}.Debug|x86.Build.0 = Debug|Any CPU {CEA80C83-5848-4FF6-B4E8-CEEE9482E4AA}.Release|Any CPU.ActiveCfg = Release|Any CPU {CEA80C83-5848-4FF6-B4E8-CEEE9482E4AA}.Release|Any CPU.Build.0 = Release|Any CPU - {CEA80C83-5848-4FF6-B4E8-CEEE9482E4AA}.Release|x86.ActiveCfg = Release|Any CPU - {CEA80C83-5848-4FF6-B4E8-CEEE9482E4AA}.Release|x86.Build.0 = Release|Any CPU {2801F82B-78CE-4BAE-B06F-537574751E2E}.Debug|Any CPU.ActiveCfg = Debug|x86 - {2801F82B-78CE-4BAE-B06F-537574751E2E}.Debug|x86.ActiveCfg = Debug|x86 - {2801F82B-78CE-4BAE-B06F-537574751E2E}.Debug|x86.Build.0 = Debug|x86 {2801F82B-78CE-4BAE-B06F-537574751E2E}.Release|Any CPU.ActiveCfg = Release|x86 - {2801F82B-78CE-4BAE-B06F-537574751E2E}.Release|x86.ActiveCfg = Release|x86 - {2801F82B-78CE-4BAE-B06F-537574751E2E}.Release|x86.Build.0 = Release|x86 {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|Any CPU.Build.0 = Debug|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|Any CPU.ActiveCfg = Release|Any CPU From a7e79fe3490dfe1114092d0f1ec700fab3c53d4c Mon Sep 17 00:00:00 2001 From: Sam Harwell Date: Thu, 8 Oct 2020 08:15:09 -0700 Subject: [PATCH 11/68] Enable nullable reference types in SQLite v2 implementation --- .../SQLitePersistentStorageBenchmark.cs | 19 +++++++---- .../AbstractPersistentStorageTests.cs | 22 ++++++------ .../SQLiteV2PersistentStorageTests.cs | 12 +++---- .../PersistenceStorageServiceFactory.cs | 2 -- .../AbstractSQLitePersistentStorageService.cs | 2 -- .../Storage/SQLite/Interop/NativeMethods.cs | 2 +- .../Storage/SQLite/Interop/OpenFlags.cs | 2 -- .../Portable/Storage/SQLite/Interop/Result.cs | 2 -- .../Storage/SQLite/Interop/SqlException.cs | 2 -- ...PersistentStorage_DocumentSerialization.cs | 4 +-- ...ePersistentStorage_ProjectSerialization.cs | 4 +-- .../Portable/Storage/SQLite/v2/Database.cs | 2 -- .../v2/Interop/ResettableSqlStatement.cs | 2 -- .../SQLite/v2/Interop/SqlConnection.cs | 12 +++---- .../Storage/SQLite/v2/Interop/SqlStatement.cs | 2 -- .../Storage/SQLite/v2/PooledConnection.cs | 2 -- .../v2/SQLitePersistentStorage.Accessor.cs | 22 ++++++------ ...SQLitePersistentStorage_BulkPopulateIds.cs | 3 ++ ...PersistentStorage_DocumentSerialization.cs | 4 +-- .../v2/SQLitePersistentStorage_FlushWrites.cs | 2 -- .../v2/SQLitePersistentStorage_Helpers.cs | 4 +-- ...ePersistentStorage_ProjectSerialization.cs | 4 +-- ...PersistentStorage_SolutionSerialization.cs | 8 ++--- .../v2/SQLitePersistentStorage_StringIds.cs | 2 -- .../v2/SQLitePersistentStorage_Threading.cs | 2 -- .../Core/Portable/Storage/StorageDatabase.cs | 2 -- .../Portable/Storage/StorageDatabaseLogger.cs | 6 ++-- .../Core/Portable/Storage/StorageOptions.cs | 2 -- .../AbstractPersistentStorage.cs | 34 +++++++++---------- .../MEF/UseExportProviderAttribute.cs | 4 +-- 30 files changed, 80 insertions(+), 112 deletions(-) diff --git a/src/Tools/IdeBenchmarks/SQLitePersistentStorageBenchmark.cs b/src/Tools/IdeBenchmarks/SQLitePersistentStorageBenchmark.cs index c84beaeab6e55..073fb04e88984 100644 --- a/src/Tools/IdeBenchmarks/SQLitePersistentStorageBenchmark.cs +++ b/src/Tools/IdeBenchmarks/SQLitePersistentStorageBenchmark.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.Collections.Generic; using System.IO; @@ -35,6 +33,15 @@ public class SQLitePersistentStorageBenchmarks private Document _document; private Random _random; + public SQLitePersistentStorageBenchmarks() + { + _document = null!; + _storage = null!; + _storageService = null!; + _workspace = null!; + _random = null!; + } + [GlobalSetup] public void GlobalSetup() { @@ -80,12 +87,12 @@ public void GlobalCleanup() throw new InvalidOperationException(); } - _document = null; + _document = null!; _storage.Dispose(); - _storage = null; - _storageService = null; + _storage = null!; + _storageService = null!; _workspace.Dispose(); - _workspace = null; + _workspace = null!; _useExportProviderAttribute.After(null); } diff --git a/src/VisualStudio/CSharp/Test/PersistentStorage/AbstractPersistentStorageTests.cs b/src/VisualStudio/CSharp/Test/PersistentStorage/AbstractPersistentStorageTests.cs index 8d6d5406d3014..eef7f873a5178 100644 --- a/src/VisualStudio/CSharp/Test/PersistentStorage/AbstractPersistentStorageTests.cs +++ b/src/VisualStudio/CSharp/Test/PersistentStorage/AbstractPersistentStorageTests.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.Collections.Generic; using System.Composition; @@ -38,7 +36,7 @@ public enum Size private readonly Encoding _encoding = Encoding.UTF8; - private AbstractPersistentStorageService _storageService; + private AbstractPersistentStorageService? _storageService; private readonly DisposableDirectory _persistentFolderRoot; private readonly TempDirectory _persistentFolder; @@ -90,10 +88,10 @@ private string GetData1(Size size) private string GetData2(Size size) => size == Size.Small ? SmallData2 : size == Size.Medium ? MediumData2 : LargeData2; - private Checksum GetChecksum1(bool withChecksum) + private Checksum? GetChecksum1(bool withChecksum) => withChecksum ? s_checksum1 : null; - private Checksum GetChecksum2(bool withChecksum) + private Checksum? GetChecksum2(bool withChecksum) => withChecksum ? s_checksum2 : null; [Fact] @@ -797,9 +795,9 @@ public void CacheDirectoryShouldNotBeAtRoot() var workspace = new AdhocWorkspace(FeaturesTestCompositions.Features.AddParts(typeof(TestPersistentStorageLocationService)).GetHostServices()); workspace.AddSolution(SolutionInfo.Create(SolutionId.CreateNewId(), new VersionStamp(), @"D:\git\PCLCrypto\PCLCrypto.sln")); - var locationService = workspace.Services.GetService(); + var locationService = workspace.Services.GetRequiredService(); var location = locationService.TryGetStorageLocation(workspace.CurrentSolution); - Assert.False(location.StartsWith("/")); + Assert.False(location?.StartsWith("/") ?? false); } [PartNotDiscoverable] @@ -873,7 +871,7 @@ protected Solution CreateOrOpenSolution(bool nullPaths = false) } internal IChecksummedPersistentStorage GetStorage( - Solution solution, IPersistentStorageFaultInjector faultInjectorOpt = null) + Solution solution, IPersistentStorageFaultInjector? faultInjectorOpt = null) { // If we handed out one for a previous test, we need to shut that down first _storageService?.GetTestAccessor().Shutdown(); @@ -892,7 +890,7 @@ internal IChecksummedPersistentStorage GetStorage( } internal IChecksummedPersistentStorage GetStorageFromKey( - Workspace workspace, SolutionKey solutionKey, IPersistentStorageFaultInjector faultInjectorOpt = null) + Workspace workspace, SolutionKey solutionKey, IPersistentStorageFaultInjector? faultInjectorOpt = null) { // If we handed out one for a previous test, we need to shut that down first _storageService?.GetTestAccessor().Shutdown(); @@ -923,14 +921,14 @@ public MockPersistentStorageLocationService(SolutionId solutionId, string storag public bool IsSupported(Workspace workspace) => true; - public string TryGetStorageLocation(Solution solution) + public string? TryGetStorageLocation(Solution solution) => solution.Id == _solutionId ? _storageLocation : null; - public string TryGetStorageLocation(Workspace workspace, SolutionKey solutionKey) + public string? TryGetStorageLocation(Workspace workspace, SolutionKey solutionKey) => solutionKey.Id == _solutionId ? _storageLocation : null; } - internal abstract AbstractPersistentStorageService GetStorageService(IPersistentStorageLocationService locationService, IPersistentStorageFaultInjector faultInjector); + internal abstract AbstractPersistentStorageService GetStorageService(IPersistentStorageLocationService locationService, IPersistentStorageFaultInjector? faultInjector); protected Stream EncodeString(string text) { diff --git a/src/VisualStudio/CSharp/Test/PersistentStorage/SQLiteV2PersistentStorageTests.cs b/src/VisualStudio/CSharp/Test/PersistentStorage/SQLiteV2PersistentStorageTests.cs index 567fbcc162503..ead3586e4eff7 100644 --- a/src/VisualStudio/CSharp/Test/PersistentStorage/SQLiteV2PersistentStorageTests.cs +++ b/src/VisualStudio/CSharp/Test/PersistentStorage/SQLiteV2PersistentStorageTests.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.IO; using System.Threading.Tasks; @@ -21,7 +19,7 @@ namespace Microsoft.CodeAnalysis.UnitTests.WorkspaceServices /// public class SQLiteV2PersistentStorageTests : AbstractPersistentStorageTests { - internal override AbstractPersistentStorageService GetStorageService(IPersistentStorageLocationService locationService, IPersistentStorageFaultInjector faultInjector) + internal override AbstractPersistentStorageService GetStorageService(IPersistentStorageLocationService locationService, IPersistentStorageFaultInjector? faultInjector) => new SQLitePersistentStorageService(locationService, faultInjector); [Fact] @@ -68,12 +66,12 @@ public async Task TestCrashInNewConnection() private class PersistentStorageFaultInjector : IPersistentStorageFaultInjector { - private readonly Action _onNewConnection; - private readonly Action _onFatalError; + private readonly Action? _onNewConnection; + private readonly Action? _onFatalError; public PersistentStorageFaultInjector( - Action onNewConnection = null, - Action onFatalError = null) + Action? onNewConnection = null, + Action? onFatalError = null) { _onNewConnection = onNewConnection; _onFatalError = onFatalError; diff --git a/src/Workspaces/Core/Portable/Storage/PersistenceStorageServiceFactory.cs b/src/Workspaces/Core/Portable/Storage/PersistenceStorageServiceFactory.cs index 1a2e5fdbab01a..24acc50268947 100644 --- a/src/Workspaces/Core/Portable/Storage/PersistenceStorageServiceFactory.cs +++ b/src/Workspaces/Core/Portable/Storage/PersistenceStorageServiceFactory.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.Composition; using Microsoft.CodeAnalysis.Experiments; diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/AbstractSQLitePersistentStorageService.cs b/src/Workspaces/Core/Portable/Storage/SQLite/AbstractSQLitePersistentStorageService.cs index eebd81107c3ca..d3e13fad2ff82 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/AbstractSQLitePersistentStorageService.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/AbstractSQLitePersistentStorageService.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.IO; using System.Runtime.InteropServices; diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/Interop/NativeMethods.cs b/src/Workspaces/Core/Portable/Storage/SQLite/Interop/NativeMethods.cs index 1ad14e5772b6f..1d5505bc11b32 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/Interop/NativeMethods.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/Interop/NativeMethods.cs @@ -11,7 +11,7 @@ namespace Microsoft.CodeAnalysis.SQLite.Interop [SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "Name chosen to match SQLitePCL.raw")] internal static class NativeMethods { - public static SafeSqliteHandle sqlite3_open_v2(string filename, int flags, string vfs, out Result result) + public static SafeSqliteHandle sqlite3_open_v2(string filename, int flags, string? vfs, out Result result) { result = (Result)raw.sqlite3_open_v2(filename, out var wrapper, flags, vfs); if (result != Result.OK) diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/Interop/OpenFlags.cs b/src/Workspaces/Core/Portable/Storage/SQLite/Interop/OpenFlags.cs index 552460c25b860..5be779c90a892 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/Interop/OpenFlags.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/Interop/OpenFlags.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - namespace Microsoft.CodeAnalysis.SQLite.Interop { // From: https://sqlite.org/c3ref/c_open_autoproxy.html diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/Interop/Result.cs b/src/Workspaces/Core/Portable/Storage/SQLite/Interop/Result.cs index 8360bbe7519c3..3e09236ab30cc 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/Interop/Result.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/Interop/Result.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - namespace Microsoft.CodeAnalysis.SQLite.Interop { // From https://sqlite.org/c3ref/c_abort.html diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/Interop/SqlException.cs b/src/Workspaces/Core/Portable/Storage/SQLite/Interop/SqlException.cs index bba86cd4b3d01..27dc41ad6970a 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/Interop/SqlException.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/Interop/SqlException.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; namespace Microsoft.CodeAnalysis.SQLite.Interop diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v1/SQLitePersistentStorage_DocumentSerialization.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v1/SQLitePersistentStorage_DocumentSerialization.cs index 201ce244a997d..045d932f7c3df 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v1/SQLitePersistentStorage_DocumentSerialization.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v1/SQLitePersistentStorage_DocumentSerialization.cs @@ -12,10 +12,10 @@ namespace Microsoft.CodeAnalysis.SQLite.v1 { internal partial class SQLitePersistentStorage { - protected override Task ReadChecksumAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, CancellationToken cancellationToken) + protected override Task ReadChecksumAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, CancellationToken cancellationToken) => _documentAccessor.ReadChecksumAsync((documentKey, bulkLoadSnapshot, name), cancellationToken); - protected override Task ReadStreamAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken) + protected override Task ReadStreamAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken) => _documentAccessor.ReadStreamAsync((documentKey, bulkLoadSnapshot, name), checksum, cancellationToken); public override Task WriteStreamAsync(Document document, string name, Stream stream, Checksum? checksum, CancellationToken cancellationToken) diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v1/SQLitePersistentStorage_ProjectSerialization.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v1/SQLitePersistentStorage_ProjectSerialization.cs index d71d490d1e725..f44a64953434f 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v1/SQLitePersistentStorage_ProjectSerialization.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v1/SQLitePersistentStorage_ProjectSerialization.cs @@ -12,10 +12,10 @@ namespace Microsoft.CodeAnalysis.SQLite.v1 { internal partial class SQLitePersistentStorage { - protected override Task ReadChecksumAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, CancellationToken cancellationToken) + protected override Task ReadChecksumAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, CancellationToken cancellationToken) => _projectAccessor.ReadChecksumAsync((projectKey, bulkLoadSnapshot, name), cancellationToken); - protected override Task ReadStreamAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken) + protected override Task ReadStreamAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken) => _projectAccessor.ReadStreamAsync((projectKey, bulkLoadSnapshot, name), checksum, cancellationToken); public override Task WriteStreamAsync(Project project, string name, Stream stream, Checksum? checksum, CancellationToken cancellationToken) diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/Database.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/Database.cs index 67e087849e76e..77b950a76fcb2 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/Database.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/Database.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.SQLite.v2 diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/ResettableSqlStatement.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/ResettableSqlStatement.cs index c09d114f1d59c..fede17c0776d1 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/ResettableSqlStatement.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/ResettableSqlStatement.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; namespace Microsoft.CodeAnalysis.SQLite.v2.Interop diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/SqlConnection.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/SqlConnection.cs index 97da6650942d6..2c9cab3017a14 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/SqlConnection.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/SqlConnection.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.Collections.Generic; using System.IO; @@ -37,7 +35,7 @@ internal class SqlConnection /// /// For testing purposes to simulate failures during testing. /// - private readonly IPersistentStorageFaultInjector _faultInjector; + private readonly IPersistentStorageFaultInjector? _faultInjector; #pragma warning restore IDE0052 // Remove unread private members /// @@ -52,7 +50,7 @@ internal class SqlConnection /// public bool IsInTransaction { get; private set; } - public static SqlConnection Create(IPersistentStorageFaultInjector faultInjector, string databasePath) + public static SqlConnection Create(IPersistentStorageFaultInjector? faultInjector, string databasePath) { faultInjector?.OnNewConnection(); @@ -112,7 +110,7 @@ public static SqlConnection Create(IPersistentStorageFaultInjector faultInjector } } - private SqlConnection(SafeSqliteHandle handle, IPersistentStorageFaultInjector faultInjector, Dictionary queryToStatement) + private SqlConnection(SafeSqliteHandle handle, IPersistentStorageFaultInjector? faultInjector, Dictionary queryToStatement) { _handle = handle; _faultInjector = faultInjector; @@ -176,7 +174,7 @@ public void RunInTransaction(Action action, TState state) state => { state.action(state.state); - return (object)null; + return (object?)null; }, (action, state)); } @@ -239,7 +237,7 @@ public int LastInsertRowId() => (int)NativeMethods.sqlite3_last_insert_rowid(_handle); [PerformanceSensitive("https://github.com/dotnet/roslyn/issues/36114", AllowCaptures = false)] - public Stream ReadBlob_MustRunInTransaction(Database database, string tableName, string columnName, long rowId) + public Stream? ReadBlob_MustRunInTransaction(Database database, string tableName, string columnName, long rowId) { // NOTE: we do need to do the blob reading in a transaction because of the // following: https://www.sqlite.org/c3ref/blob_open.html diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/SqlStatement.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/SqlStatement.cs index aca482c445c41..291a05b1ed782 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/SqlStatement.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/Interop/SqlStatement.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.Runtime.InteropServices; using Microsoft.CodeAnalysis.SQLite.Interop; diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/PooledConnection.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/PooledConnection.cs index 50d214542420b..d1cb487b52871 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/PooledConnection.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/PooledConnection.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.SQLite.v2.Interop; diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.Accessor.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.Accessor.cs index 772ff7f04f188..c99045c3d2604 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.Accessor.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.Accessor.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.IO; using System.Threading; @@ -65,12 +63,12 @@ public Accessor(SQLitePersistentStorage storage) protected abstract TWriteQueueKey GetWriteQueueKey(TKey key); [PerformanceSensitive("https://github.com/dotnet/roslyn/issues/36114", AllowCaptures = false)] - public Task ReadChecksumAsync(TKey key, CancellationToken cancellationToken) + public Task ReadChecksumAsync(TKey key, CancellationToken cancellationToken) => Storage.PerformReadAsync( static t => t.self.ReadChecksum(t.key, t.cancellationToken), (self: this, key, cancellationToken), cancellationToken); - private Checksum ReadChecksum(TKey key, CancellationToken cancellationToken) + private Checksum? ReadChecksum(TKey key, CancellationToken cancellationToken) { using (var stream = ReadBlobColumn(key, ChecksumColumnName, checksumOpt: null, cancellationToken)) using (var reader = ObjectReader.TryGetReader(stream, leaveOpen: false, cancellationToken)) @@ -85,17 +83,17 @@ private Checksum ReadChecksum(TKey key, CancellationToken cancellationToken) } [PerformanceSensitive("https://github.com/dotnet/roslyn/issues/36114", AllowCaptures = false)] - public Task ReadStreamAsync(TKey key, Checksum checksum, CancellationToken cancellationToken) + public Task ReadStreamAsync(TKey key, Checksum? checksum, CancellationToken cancellationToken) => Storage.PerformReadAsync( static t => t.self.ReadStream(t.key, t.checksum, t.cancellationToken), (self: this, key, checksum, cancellationToken), cancellationToken); [PerformanceSensitive("https://github.com/dotnet/roslyn/issues/36114", AllowCaptures = false)] - private Stream ReadStream(TKey key, Checksum checksum, CancellationToken cancellationToken) + private Stream? ReadStream(TKey key, Checksum? checksum, CancellationToken cancellationToken) => ReadBlobColumn(key, DataColumnName, checksum, cancellationToken); - private Stream ReadBlobColumn( - TKey key, string columnName, Checksum checksumOpt, CancellationToken cancellationToken) + private Stream? ReadBlobColumn( + TKey key, string columnName, Checksum? checksumOpt, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); @@ -121,12 +119,12 @@ private Stream ReadBlobColumn( return null; } - public Task WriteStreamAsync(TKey key, Stream stream, Checksum checksumOpt, CancellationToken cancellationToken) + public Task WriteStreamAsync(TKey key, Stream stream, Checksum? checksumOpt, CancellationToken cancellationToken) => Storage.PerformWriteAsync( static t => t.self.WriteStream(t.key, t.stream, t.checksumOpt, t.cancellationToken), (self: this, key, stream, checksumOpt, cancellationToken), cancellationToken); - private bool WriteStream(TKey key, Stream stream, Checksum checksumOpt, CancellationToken cancellationToken) + private bool WriteStream(TKey key, Stream stream, Checksum? checksumOpt, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); @@ -162,10 +160,10 @@ private bool WriteStream(TKey key, Stream stream, Checksum checksumOpt, Cancella return false; } - private Stream ReadBlob( + private Stream? ReadBlob( SqlConnection connection, Database database, TDatabaseId dataId, string columnName, - Checksum checksumOpt, CancellationToken cancellationToken) + Checksum? checksumOpt, CancellationToken cancellationToken) { // Note: it's possible that someone may write to this row between when we // get the row ID above and now. That's fine. We'll just read the new diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_BulkPopulateIds.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_BulkPopulateIds.cs index 9055f37712bbf..266f0c8f9e4f5 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_BulkPopulateIds.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_BulkPopulateIds.cs @@ -10,6 +10,7 @@ using Microsoft.CodeAnalysis.SQLite.Interop; using Microsoft.CodeAnalysis.SQLite.v2.Interop; using Microsoft.CodeAnalysis.Storage; +using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.SQLite.v2 { @@ -196,6 +197,8 @@ bool AddDocumentIds() string GetDocumentIdString(Document document) { + Contract.ThrowIfNull(document.FilePath); + // We should always be able to index directly into these maps. This function is only // ever called after we called AddIndividualProjectAndDocumentComponentIds. var documentPathId = _stringToIdMap[document.FilePath]; diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_DocumentSerialization.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_DocumentSerialization.cs index 8fec7e2fb6143..0186cf321b2cd 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_DocumentSerialization.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_DocumentSerialization.cs @@ -12,10 +12,10 @@ namespace Microsoft.CodeAnalysis.SQLite.v2 { internal partial class SQLitePersistentStorage { - protected override Task ReadChecksumAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, CancellationToken cancellationToken) + protected override Task ReadChecksumAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, CancellationToken cancellationToken) => _documentAccessor.ReadChecksumAsync((documentKey, bulkLoadSnapshot, name), cancellationToken); - protected override Task ReadStreamAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken) + protected override Task ReadStreamAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken) => _documentAccessor.ReadStreamAsync((documentKey, bulkLoadSnapshot, name), checksum, cancellationToken); public override Task WriteStreamAsync(Document document, string name, Stream stream, Checksum? checksum, CancellationToken cancellationToken) diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_FlushWrites.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_FlushWrites.cs index f7905523c30ba..606284d4114b3 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_FlushWrites.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_FlushWrites.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System.Collections.Immutable; using System.Diagnostics; using System.Threading; diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Helpers.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Helpers.cs index b07c948160849..7f9a00b960b07 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Helpers.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Helpers.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.Collections.Generic; using System.IO; @@ -25,7 +23,7 @@ private static long CombineInt32ValuesToInt64(int v1, int v2) => ((long)v1 << 32) | (long)v2; private static (byte[] bytes, int length, bool fromPool) GetBytes( - Checksum checksumOpt, CancellationToken cancellationToken) + Checksum? checksumOpt, CancellationToken cancellationToken) { // If we weren't passed a checksum, just pass the singleton empty byte array. // Note: we don't add this to/from our pool. But it likely wouldn't be a problem diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_ProjectSerialization.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_ProjectSerialization.cs index 3e74277ed2df8..6c5768725caca 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_ProjectSerialization.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_ProjectSerialization.cs @@ -12,10 +12,10 @@ namespace Microsoft.CodeAnalysis.SQLite.v2 { internal partial class SQLitePersistentStorage { - protected override Task ReadChecksumAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, CancellationToken cancellationToken) + protected override Task ReadChecksumAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, CancellationToken cancellationToken) => _projectAccessor.ReadChecksumAsync((projectKey, bulkLoadSnapshot, name), cancellationToken); - protected override Task ReadStreamAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken) + protected override Task ReadStreamAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken) => _projectAccessor.ReadStreamAsync((projectKey, bulkLoadSnapshot, name), checksum, cancellationToken); public override Task WriteStreamAsync(Project project, string name, Stream stream, Checksum? checksum, CancellationToken cancellationToken) diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_SolutionSerialization.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_SolutionSerialization.cs index ec06ced6fe087..6d8e733ae3ac8 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_SolutionSerialization.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_SolutionSerialization.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System.IO; using System.Threading; using System.Threading.Tasks; @@ -13,13 +11,13 @@ namespace Microsoft.CodeAnalysis.SQLite.v2 { internal partial class SQLitePersistentStorage { - public override Task ReadChecksumAsync(string name, CancellationToken cancellationToken) + public override Task ReadChecksumAsync(string name, CancellationToken cancellationToken) => _solutionAccessor.ReadChecksumAsync(name, cancellationToken); - public override Task ReadStreamAsync(string name, Checksum checksum, CancellationToken cancellationToken) + public override Task ReadStreamAsync(string name, Checksum? checksum, CancellationToken cancellationToken) => _solutionAccessor.ReadStreamAsync(name, checksum, cancellationToken); - public override Task WriteStreamAsync(string name, Stream stream, Checksum checksum, CancellationToken cancellationToken) + public override Task WriteStreamAsync(string name, Stream stream, Checksum? checksum, CancellationToken cancellationToken) => _solutionAccessor.WriteStreamAsync(name, stream, checksum, cancellationToken); /// diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_StringIds.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_StringIds.cs index 856b7576771cf..d3f39235bfe7c 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_StringIds.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_StringIds.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.Collections.Concurrent; using Microsoft.CodeAnalysis.SQLite.Interop; diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Threading.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Threading.cs index 33314959e5d99..e0f9f9a028ded 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Threading.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Threading.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.Threading; using System.Threading.Tasks; diff --git a/src/Workspaces/Core/Portable/Storage/StorageDatabase.cs b/src/Workspaces/Core/Portable/Storage/StorageDatabase.cs index bf435225ac3d9..4587658fe8c46 100644 --- a/src/Workspaces/Core/Portable/Storage/StorageDatabase.cs +++ b/src/Workspaces/Core/Portable/Storage/StorageDatabase.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - namespace Microsoft.CodeAnalysis.Storage { internal enum StorageDatabase diff --git a/src/Workspaces/Core/Portable/Storage/StorageDatabaseLogger.cs b/src/Workspaces/Core/Portable/Storage/StorageDatabaseLogger.cs index 59e9673b72d37..b9d51f882a3cb 100644 --- a/src/Workspaces/Core/Portable/Storage/StorageDatabaseLogger.cs +++ b/src/Workspaces/Core/Portable/Storage/StorageDatabaseLogger.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.Collections.Concurrent; using Microsoft.CodeAnalysis.Internal.Log; @@ -18,8 +16,8 @@ internal class StorageDatabaseLogger private static readonly StorageDatabaseLogger Instance = new(); #pragma warning disable IDE0052 // Remove unread private members - hold onto last exception to make investigation easier - private Exception _reportedException; - private string _reportedExceptionMessage; + private Exception? _reportedException; + private string? _reportedExceptionMessage; #pragma warning restore IDE0052 // Remove unread private members private readonly ConcurrentDictionary _set = new(concurrencyLevel: 2, capacity: 10); diff --git a/src/Workspaces/Core/Portable/Storage/StorageOptions.cs b/src/Workspaces/Core/Portable/Storage/StorageOptions.cs index 72b630be1a117..6f8a157d8d263 100644 --- a/src/Workspaces/Core/Portable/Storage/StorageOptions.cs +++ b/src/Workspaces/Core/Portable/Storage/StorageOptions.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#nullable disable - using System; using System.Collections.Immutable; using System.Composition; diff --git a/src/Workspaces/Core/Portable/Workspace/Host/PersistentStorage/AbstractPersistentStorage.cs b/src/Workspaces/Core/Portable/Workspace/Host/PersistentStorage/AbstractPersistentStorage.cs index 2503d00092b90..124caa5935097 100644 --- a/src/Workspaces/Core/Portable/Workspace/Host/PersistentStorage/AbstractPersistentStorage.cs +++ b/src/Workspaces/Core/Portable/Workspace/Host/PersistentStorage/AbstractPersistentStorage.cs @@ -35,51 +35,51 @@ protected AbstractPersistentStorage( public abstract void Dispose(); - public abstract Task ReadChecksumAsync(string name, CancellationToken cancellationToken); + public abstract Task ReadChecksumAsync(string name, CancellationToken cancellationToken); - protected abstract Task ReadChecksumAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, CancellationToken cancellationToken); - protected abstract Task ReadChecksumAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, CancellationToken cancellationToken); + protected abstract Task ReadChecksumAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, CancellationToken cancellationToken); + protected abstract Task ReadChecksumAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, CancellationToken cancellationToken); - public Task ReadChecksumAsync(ProjectKey projectKey, string name, CancellationToken cancellationToken) + public Task ReadChecksumAsync(ProjectKey projectKey, string name, CancellationToken cancellationToken) => ReadChecksumAsync(projectKey, bulkLoadSnapshot: null, name, cancellationToken); - public Task ReadChecksumAsync(DocumentKey documentKey, string name, CancellationToken cancellationToken) + public Task ReadChecksumAsync(DocumentKey documentKey, string name, CancellationToken cancellationToken) => ReadChecksumAsync(documentKey, bulkLoadSnapshot: null, name, cancellationToken); - public Task ReadChecksumAsync(Project project, string name, CancellationToken cancellationToken) + public Task ReadChecksumAsync(Project project, string name, CancellationToken cancellationToken) => ReadChecksumAsync((ProjectKey)project, project, name, cancellationToken); - public Task ReadChecksumAsync(Document document, string name, CancellationToken cancellationToken) + public Task ReadChecksumAsync(Document document, string name, CancellationToken cancellationToken) => ReadChecksumAsync((DocumentKey)document, document, name, cancellationToken); - public abstract Task ReadStreamAsync(string name, Checksum? checksum, CancellationToken cancellationToken); + public abstract Task ReadStreamAsync(string name, Checksum? checksum, CancellationToken cancellationToken); - protected abstract Task ReadStreamAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken); - protected abstract Task ReadStreamAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken); + protected abstract Task ReadStreamAsync(ProjectKey projectKey, Project? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken); + protected abstract Task ReadStreamAsync(DocumentKey documentKey, Document? bulkLoadSnapshot, string name, Checksum? checksum, CancellationToken cancellationToken); - public Task ReadStreamAsync(ProjectKey projectKey, string name, Checksum? checksum, CancellationToken cancellationToken) + public Task ReadStreamAsync(ProjectKey projectKey, string name, Checksum? checksum, CancellationToken cancellationToken) => ReadStreamAsync(projectKey, bulkLoadSnapshot: null, name, checksum, cancellationToken); - public Task ReadStreamAsync(DocumentKey documentKey, string name, Checksum? checksum, CancellationToken cancellationToken) + public Task ReadStreamAsync(DocumentKey documentKey, string name, Checksum? checksum, CancellationToken cancellationToken) => ReadStreamAsync(documentKey, bulkLoadSnapshot: null, name, checksum, cancellationToken); - public Task ReadStreamAsync(Project project, string name, Checksum? checksum, CancellationToken cancellationToken) + public Task ReadStreamAsync(Project project, string name, Checksum? checksum, CancellationToken cancellationToken) => ReadStreamAsync((ProjectKey)project, project, name, checksum, cancellationToken); - public Task ReadStreamAsync(Document document, string name, Checksum? checksum, CancellationToken cancellationToken) + public Task ReadStreamAsync(Document document, string name, Checksum? checksum, CancellationToken cancellationToken) => ReadStreamAsync((DocumentKey)document, document, name, checksum, cancellationToken); public abstract Task WriteStreamAsync(string name, Stream stream, Checksum? checksum, CancellationToken cancellationToken); public abstract Task WriteStreamAsync(Project project, string name, Stream stream, Checksum? checksum, CancellationToken cancellationToken); public abstract Task WriteStreamAsync(Document document, string name, Stream stream, Checksum? checksum, CancellationToken cancellationToken); - public Task ReadStreamAsync(string name, CancellationToken cancellationToken) + public Task ReadStreamAsync(string name, CancellationToken cancellationToken) => ReadStreamAsync(name, checksum: null, cancellationToken); - public Task ReadStreamAsync(Project project, string name, CancellationToken cancellationToken) + public Task ReadStreamAsync(Project project, string name, CancellationToken cancellationToken) => ReadStreamAsync(project, name, checksum: null, cancellationToken); - public Task ReadStreamAsync(Document document, string name, CancellationToken cancellationToken) + public Task ReadStreamAsync(Document document, string name, CancellationToken cancellationToken) => ReadStreamAsync(document, name, checksum: null, cancellationToken); public Task WriteStreamAsync(string name, Stream stream, CancellationToken cancellationToken) diff --git a/src/Workspaces/CoreTestUtilities/MEF/UseExportProviderAttribute.cs b/src/Workspaces/CoreTestUtilities/MEF/UseExportProviderAttribute.cs index 987c60476ec00..d5a98c493913d 100644 --- a/src/Workspaces/CoreTestUtilities/MEF/UseExportProviderAttribute.cs +++ b/src/Workspaces/CoreTestUtilities/MEF/UseExportProviderAttribute.cs @@ -66,7 +66,7 @@ static UseExportProviderAttribute() RuntimeHelpers.RunModuleConstructor(typeof(TestBase).Module.ModuleHandle); } - public override void Before(MethodInfo methodUnderTest) + public override void Before(MethodInfo? methodUnderTest) { MefHostServices.TestAccessor.HookServiceCreation(CreateMefHostServices); @@ -87,7 +87,7 @@ public override void Before(MethodInfo methodUnderTest) /// Clearing static state variables related to the use of MEF during a test. /// /// - public override void After(MethodInfo methodUnderTest) + public override void After(MethodInfo? methodUnderTest) { try { From c93dd9f57a55a56326101a02f2fd58ff2c83d20c Mon Sep 17 00:00:00 2001 From: Sam Harwell Date: Thu, 8 Oct 2020 08:58:39 -0700 Subject: [PATCH 12/68] Fix all RS0046 (Avoid 'Opt' suffix in nullable-enabled code) --- .../AbstractPersistentStorageTests.cs | 12 ++++----- .../v2/SQLitePersistentStorage.Accessor.cs | 26 +++++++++---------- .../SQLite/v2/SQLitePersistentStorage.cs | 8 +++--- .../v2/SQLitePersistentStorage_Helpers.cs | 6 ++--- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/VisualStudio/CSharp/Test/PersistentStorage/AbstractPersistentStorageTests.cs b/src/VisualStudio/CSharp/Test/PersistentStorage/AbstractPersistentStorageTests.cs index eef7f873a5178..b4e23c515bc69 100644 --- a/src/VisualStudio/CSharp/Test/PersistentStorage/AbstractPersistentStorageTests.cs +++ b/src/VisualStudio/CSharp/Test/PersistentStorage/AbstractPersistentStorageTests.cs @@ -871,17 +871,17 @@ protected Solution CreateOrOpenSolution(bool nullPaths = false) } internal IChecksummedPersistentStorage GetStorage( - Solution solution, IPersistentStorageFaultInjector? faultInjectorOpt = null) + Solution solution, IPersistentStorageFaultInjector? faultInjector = null) { // If we handed out one for a previous test, we need to shut that down first _storageService?.GetTestAccessor().Shutdown(); var locationService = new MockPersistentStorageLocationService(solution.Id, _persistentFolder.Path); - _storageService = GetStorageService(locationService, faultInjectorOpt); + _storageService = GetStorageService(locationService, faultInjector); var storage = _storageService.GetStorage(solution, checkBranchId: true); // If we're injecting faults, we expect things to be strange - if (faultInjectorOpt == null) + if (faultInjector == null) { Assert.NotEqual(NoOpPersistentStorage.Instance, storage); } @@ -890,17 +890,17 @@ internal IChecksummedPersistentStorage GetStorage( } internal IChecksummedPersistentStorage GetStorageFromKey( - Workspace workspace, SolutionKey solutionKey, IPersistentStorageFaultInjector? faultInjectorOpt = null) + Workspace workspace, SolutionKey solutionKey, IPersistentStorageFaultInjector? faultInjector = null) { // If we handed out one for a previous test, we need to shut that down first _storageService?.GetTestAccessor().Shutdown(); var locationService = new MockPersistentStorageLocationService(solutionKey.Id, _persistentFolder.Path); - _storageService = GetStorageService(locationService, faultInjectorOpt); + _storageService = GetStorageService(locationService, faultInjector); var storage = _storageService.GetStorage(workspace, solutionKey, checkBranchId: true); // If we're injecting faults, we expect things to be strange - if (faultInjectorOpt == null) + if (faultInjector == null) { Assert.NotEqual(NoOpPersistentStorage.Instance, storage); } diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.Accessor.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.Accessor.cs index c99045c3d2604..cd4fa361d3bbe 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.Accessor.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.Accessor.cs @@ -70,7 +70,7 @@ public Accessor(SQLitePersistentStorage storage) private Checksum? ReadChecksum(TKey key, CancellationToken cancellationToken) { - using (var stream = ReadBlobColumn(key, ChecksumColumnName, checksumOpt: null, cancellationToken)) + using (var stream = ReadBlobColumn(key, ChecksumColumnName, checksum: null, cancellationToken)) using (var reader = ObjectReader.TryGetReader(stream, leaveOpen: false, cancellationToken)) { if (reader != null) @@ -93,7 +93,7 @@ public Accessor(SQLitePersistentStorage storage) => ReadBlobColumn(key, DataColumnName, checksum, cancellationToken); private Stream? ReadBlobColumn( - TKey key, string columnName, Checksum? checksumOpt, CancellationToken cancellationToken) + TKey key, string columnName, Checksum? checksum, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); @@ -106,8 +106,8 @@ public Accessor(SQLitePersistentStorage storage) { // First, try to see if there was a write to this key in our in-memory db. // If it wasn't in the in-memory write-cache. Check the full on-disk file. - return ReadBlob(connection, Database.WriteCache, dataId, columnName, checksumOpt, cancellationToken) ?? - ReadBlob(connection, Database.Main, dataId, columnName, checksumOpt, cancellationToken); + return ReadBlob(connection, Database.WriteCache, dataId, columnName, checksum, cancellationToken) ?? + ReadBlob(connection, Database.Main, dataId, columnName, checksum, cancellationToken); } catch (Exception ex) { @@ -119,12 +119,12 @@ public Accessor(SQLitePersistentStorage storage) return null; } - public Task WriteStreamAsync(TKey key, Stream stream, Checksum? checksumOpt, CancellationToken cancellationToken) + public Task WriteStreamAsync(TKey key, Stream stream, Checksum? checksum, CancellationToken cancellationToken) => Storage.PerformWriteAsync( - static t => t.self.WriteStream(t.key, t.stream, t.checksumOpt, t.cancellationToken), - (self: this, key, stream, checksumOpt, cancellationToken), cancellationToken); + static t => t.self.WriteStream(t.key, t.stream, t.checksum, t.cancellationToken), + (self: this, key, stream, checksum, cancellationToken), cancellationToken); - private bool WriteStream(TKey key, Stream stream, Checksum? checksumOpt, CancellationToken cancellationToken) + private bool WriteStream(TKey key, Stream stream, Checksum? checksum, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); @@ -135,7 +135,7 @@ private bool WriteStream(TKey key, Stream stream, Checksum? checksumOpt, Cancell // Determine the appropriate data-id to store this stream at. if (TryGetDatabaseId(connection, key, out var dataId)) { - var (checksumBytes, checksumLength, checksumPooled) = GetBytes(checksumOpt, cancellationToken); + var (checksumBytes, checksumLength, checksumPooled) = GetBytes(checksum, cancellationToken); var (dataBytes, dataLength, dataPooled) = GetBytes(stream); // Write the information into the in-memory write-cache. Later on a background task @@ -163,7 +163,7 @@ private bool WriteStream(TKey key, Stream stream, Checksum? checksumOpt, Cancell private Stream? ReadBlob( SqlConnection connection, Database database, TDatabaseId dataId, string columnName, - Checksum? checksumOpt, CancellationToken cancellationToken) + Checksum? checksum, CancellationToken cancellationToken) { // Note: it's possible that someone may write to this row between when we // get the row ID above and now. That's fine. We'll just read the new @@ -189,15 +189,15 @@ private bool WriteStream(TKey key, Stream stream, Checksum? checksumOpt, Cancell // If we were passed a checksum, make sure it matches what we have // stored in the table already. If they don't match, don't read // out the data value at all. - if (t.checksumOpt != null && - !t.self.ChecksumsMatch_MustRunInTransaction(t.connection, t.database, t.rowId, t.checksumOpt, t.cancellationToken)) + if (t.checksum != null && + !t.self.ChecksumsMatch_MustRunInTransaction(t.connection, t.database, t.rowId, t.checksum, t.cancellationToken)) { return null; } return t.connection.ReadBlob_MustRunInTransaction(t.database, t.self.DataTableName, t.columnName, t.rowId); }, - (self: this, connection, database, columnName, checksumOpt, rowId, cancellationToken)); + (self: this, connection, database, columnName, checksum, rowId, cancellationToken)); } private bool ChecksumsMatch_MustRunInTransaction( diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.cs index ab5ab4ae774dc..93e9b41b35c4c 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage.cs @@ -105,7 +105,7 @@ internal partial class SQLitePersistentStorage : AbstractPersistentStorage private readonly CancellationTokenSource _shutdownTokenSource = new(); private readonly IDisposable _dbOwnershipLock; - private readonly IPersistentStorageFaultInjector? _faultInjectorOpt; + private readonly IPersistentStorageFaultInjector? _faultInjector; // Accessors that allow us to retrieve/store data into specific DB tables. The // core Accessor type has logic that we to share across all reading/writing, while @@ -134,11 +134,11 @@ public SQLitePersistentStorage( string solutionFilePath, string databaseFile, IDisposable dbOwnershipLock, - IPersistentStorageFaultInjector? faultInjectorOpt) + IPersistentStorageFaultInjector? faultInjector) : base(workingFolderPath, solutionFilePath, databaseFile) { _dbOwnershipLock = dbOwnershipLock; - _faultInjectorOpt = faultInjectorOpt; + _faultInjector = faultInjector; _solutionAccessor = new SolutionAccessor(this); _projectAccessor = new ProjectAccessor(this); @@ -168,7 +168,7 @@ private SqlConnection GetConnection() } // Otherwise create a new connection. - return SqlConnection.Create(_faultInjectorOpt, DatabaseFile); + return SqlConnection.Create(_faultInjector, DatabaseFile); } private void ReleaseConnection(SqlConnection connection) diff --git a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Helpers.cs b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Helpers.cs index 7f9a00b960b07..7ca499f7a5aa4 100644 --- a/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Helpers.cs +++ b/src/Workspaces/Core/Portable/Storage/SQLite/v2/SQLitePersistentStorage_Helpers.cs @@ -23,13 +23,13 @@ private static long CombineInt32ValuesToInt64(int v1, int v2) => ((long)v1 << 32) | (long)v2; private static (byte[] bytes, int length, bool fromPool) GetBytes( - Checksum? checksumOpt, CancellationToken cancellationToken) + Checksum? checksum, CancellationToken cancellationToken) { // If we weren't passed a checksum, just pass the singleton empty byte array. // Note: we don't add this to/from our pool. But it likely wouldn't be a problem // for us to do that as this instance can't actually be mutated since it's just // an empty array. - if (checksumOpt == null) + if (checksum == null) { return (Array.Empty(), length: 0, fromPool: false); } @@ -38,7 +38,7 @@ private static (byte[] bytes, int length, bool fromPool) GetBytes( using (var writer = new ObjectWriter(stream, leaveOpen: true, cancellationToken)) { - checksumOpt.WriteTo(writer); + checksum.WriteTo(writer); } stream.Position = 0; From cfcc3058914298406d74257d1634a60a08492040 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 10:53:31 -0700 Subject: [PATCH 13/68] Support coloring inline hints --- .../Core.Wpf/InlineHints/InlineHintsTag.cs | 38 ++++++++++++++++--- .../Core.Wpf/InlineHints/InlineHintsTagger.cs | 7 +++- .../InlineHints/InlineHintsTaggerProvider.cs | 3 ++ .../Core/InlineHints/InlineHintDataTag.cs | 11 +++--- .../InlineHintsDataTaggerProvider.cs | 26 +++++++------ .../InlineHints/InlineHintsOptions.cs | 13 ++++++- .../Options/AdvancedOptionPageControl.xaml | 3 ++ .../Options/AdvancedOptionPageControl.xaml.cs | 2 + .../Impl/Options/AdvancedOptionPageStrings.cs | 3 ++ .../Core/Def/ServicesVSResources.resx | 3 ++ .../Core/Def/xlf/ServicesVSResources.cs.xlf | 5 +++ .../Core/Def/xlf/ServicesVSResources.de.xlf | 5 +++ .../Core/Def/xlf/ServicesVSResources.es.xlf | 5 +++ .../Core/Def/xlf/ServicesVSResources.fr.xlf | 5 +++ .../Core/Def/xlf/ServicesVSResources.it.xlf | 5 +++ .../Core/Def/xlf/ServicesVSResources.ja.xlf | 5 +++ .../Core/Def/xlf/ServicesVSResources.ko.xlf | 5 +++ .../Core/Def/xlf/ServicesVSResources.pl.xlf | 5 +++ .../Def/xlf/ServicesVSResources.pt-BR.xlf | 5 +++ .../Core/Def/xlf/ServicesVSResources.ru.xlf | 5 +++ .../Core/Def/xlf/ServicesVSResources.tr.xlf | 5 +++ .../Def/xlf/ServicesVSResources.zh-Hans.xlf | 5 +++ .../Def/xlf/ServicesVSResources.zh-Hant.xlf | 5 +++ .../Options/AdvancedOptionPageControl.xaml | 3 ++ .../Options/AdvancedOptionPageControl.xaml.vb | 2 + .../Impl/Options/AdvancedOptionPageStrings.vb | 3 ++ 26 files changed, 157 insertions(+), 25 deletions(-) diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs index 09047240b0c73..78330b8246c75 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs @@ -10,16 +10,19 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; +using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using Microsoft.CodeAnalysis.DocumentationComments; using Microsoft.CodeAnalysis.Editor.Host; +using Microsoft.CodeAnalysis.Editor.Shared.Extensions; using Microsoft.CodeAnalysis.Editor.Shared.Utilities; using Microsoft.CodeAnalysis.LanguageServices; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Text; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Adornments; +using Microsoft.VisualStudio.Text.Classification; using Microsoft.VisualStudio.Text.Editor; using Microsoft.VisualStudio.Text.Formatting; @@ -70,14 +73,18 @@ private InlineHintsTag( /// The span that has the location of the hint /// The symbolkey associated with each parameter public static InlineHintsTag Create( - string text, + ImmutableArray parts, TextFormattingRunProperties format, IWpfTextView textView, SnapshotSpan span, SymbolKey? key, - InlineHintsTaggerProvider taggerProvider) + InlineHintsTaggerProvider taggerProvider, + IClassificationFormatMap formatMap, + bool classify) { - return new InlineHintsTag(CreateElement(text, textView, format), textView, span, key, taggerProvider); + return new InlineHintsTag( + CreateElement(parts, textView, format, formatMap, taggerProvider.TypeMap, classify), + textView, span, key, taggerProvider); } public async Task> CreateDescriptionAsync(CancellationToken cancellationToken) @@ -132,11 +139,17 @@ public async Task> CreateDescriptionAsync(Cancellati return Array.Empty(); } - private static FrameworkElement CreateElement(string text, IWpfTextView textView, TextFormattingRunProperties format) + private static FrameworkElement CreateElement( + ImmutableArray parts, + IWpfTextView textView, + TextFormattingRunProperties format, + IClassificationFormatMap formatMap, + ClassificationTypeMap typeMap, + bool classify) { // Constructs the hint block which gets assigned parameter name and fontstyles according to the options // page. Calculates a font size 1/4 smaller than the font size of the rest of the editor - var right = text.EndsWith(":") ? 0 : 1; + var right = parts.Last().ToString().EndsWith(":") ? 0 : 1; var block = new TextBlock { FontFamily = format.Typeface.FontFamily, @@ -147,10 +160,23 @@ private static FrameworkElement CreateElement(string text, IWpfTextView textView // Adds a little bit of padding to the left of the text relative to the border // to make the text seem more balanced in the border Padding = new Thickness(left: 1, top: 0, right: right, bottom: 0), - Text = text, VerticalAlignment = VerticalAlignment.Center, }; + var taggedTexts = parts.ToTaggedText(); + foreach (var taggedText in taggedTexts) + { + var run = new Run(taggedText.ToVisibleDisplayString(includeLeftToRightMarker: true)); + + if (classify) + { + var properties = formatMap.GetTextProperties(typeMap.GetClassificationType(taggedText.Tag.ToClassificationTypeName())); + run.Foreground = properties.ForegroundBrush; + } + + block.Inlines.Add(run); + } + // Encapsulates the textblock within a border. Sets the height of the border to be 3/4 of the original // height. Gets foreground/background colors from the options menu. The margin is the distance from the // adornment to the text and pushing the adornment upwards to create a separation when on a specific line diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs index 6d21bc756a864..4bff3c6e8eb41 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs @@ -6,6 +6,8 @@ using System.Collections.Generic; using System.Composition; using Microsoft.CodeAnalysis.Editor.Shared.Utilities; +using Microsoft.CodeAnalysis.InlineHints; +using Microsoft.CodeAnalysis.Text; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Classification; using Microsoft.VisualStudio.Text.Editor; @@ -114,6 +116,9 @@ public IEnumerable> GetTags(NormalizedSnapshotSp _cache.Clear(); _cacheSnapshot = snapshot; + var document = snapshot.GetOpenDocumentInCurrentContextWithChanges(); + var classify = document?.Project.Solution.Workspace.Options.GetOption(InlineHintsOptions.ColorHints, document?.Project.Language) ?? false; + // Calling into the InlineParameterNameHintsDataTaggerProvider which only responds with the current // active view and disregards and requests for tags not in that view var fullSpan = new SnapshotSpan(snapshot, 0, snapshot.Length); @@ -130,7 +135,7 @@ public IEnumerable> GetTags(NormalizedSnapshotSp var dataTagSpan = dataTagSpans[0]; var parameterHintSnapshotSpan = new SnapshotSpan(dataTagSpan.Start, 0); var parameterHintUITag = InlineHintsTag.Create( - textTag.Text, Format, _textView, dataTagSpan, textTag.SymbolKey, _taggerProvider); + textTag.Parts, Format, _textView, dataTagSpan, textTag.SymbolKey, _taggerProvider, _formatMap, classify); _cache.Add(new TagSpan(parameterHintSnapshotSpan, parameterHintUITag)); } diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTaggerProvider.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTaggerProvider.cs index ece2016751fa0..7744549c70ba8 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTaggerProvider.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTaggerProvider.cs @@ -32,6 +32,7 @@ internal class InlineHintsTaggerProvider : IViewTaggerProvider public readonly IClassificationTypeRegistryService ClassificationTypeRegistryService; public readonly IThreadingContext ThreadingContext; public readonly IToolTipService ToolTipService; + public readonly ClassificationTypeMap TypeMap; public readonly Lazy StreamingFindUsagesPresenter; [ImportingConstructor] @@ -42,6 +43,7 @@ public InlineHintsTaggerProvider( IClassificationTypeRegistryService classificationTypeRegistryService, IThreadingContext threadingContext, IToolTipService toolTipService, + ClassificationTypeMap typeMap, Lazy streamingFindUsagesPresenter) { _viewTagAggregatorFactoryService = viewTagAggregatorFactoryService; @@ -50,6 +52,7 @@ public InlineHintsTaggerProvider( this.ThreadingContext = threadingContext; this.ToolTipService = toolTipService; this.StreamingFindUsagesPresenter = streamingFindUsagesPresenter; + this.TypeMap = typeMap; } public ITagger? CreateTagger(ITextView textView, ITextBuffer buffer) where T : ITag diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs b/src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs index a87110780723c..0324d32bb28c7 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using System.Collections.Immutable; using Microsoft.VisualStudio.Text.Tagging; namespace Microsoft.CodeAnalysis.Editor.InlineHints @@ -13,15 +14,15 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints /// internal class InlineHintDataTag : ITag { - public readonly string Text; + public readonly ImmutableArray Parts; public readonly SymbolKey? SymbolKey; - public InlineHintDataTag(string text, SymbolKey? symbolKey) + public InlineHintDataTag(ImmutableArray parts, SymbolKey? symbolKey) { - if (text.Length == 0) - throw new ArgumentException("Must have a length greater than 0", nameof(text)); + if (parts.Length == 0) + throw new ArgumentException("Must have a length greater than 0", nameof(parts)); - Text = text; + Parts = parts; SymbolKey = symbolKey; } } diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs index 1b8579eef6db4..b79b18cb9bcfe 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.ComponentModel.Composition; using System.Threading; using System.Threading.Tasks; @@ -14,13 +15,14 @@ using Microsoft.CodeAnalysis.Host.Mef; using Microsoft.CodeAnalysis.InlineHints; using Microsoft.CodeAnalysis.LanguageServices; +using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Shared.TestHooks; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Editor; using Microsoft.VisualStudio.Text.Tagging; -using Microsoft.VisualStudio.Utilities; using Roslyn.Utilities; +using VSUtilities = Microsoft.VisualStudio.Utilities; namespace Microsoft.CodeAnalysis.Editor.InlineHints { @@ -28,9 +30,9 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints /// The TaggerProvider that calls upon the service in order to locate the spans and names /// [Export(typeof(IViewTaggerProvider))] - [ContentType(ContentTypeNames.RoslynContentType)] + [VSUtilities.ContentType(ContentTypeNames.RoslynContentType)] [TagType(typeof(InlineHintDataTag))] - [Name(nameof(InlineHintsDataTaggerProvider))] + [VSUtilities.Name(nameof(InlineHintsDataTaggerProvider))] internal class InlineHintsDataTaggerProvider : AsynchronousViewTaggerProvider { private static readonly SymbolDisplayFormat s_minimalTypeStyle = new SymbolDisplayFormat( @@ -106,24 +108,24 @@ private async Task AddTypeHintsAsync(TaggerContext context, D { Contract.ThrowIfNull(hint.Type); - var sb = PooledStringBuilder.GetInstance(); + using var _ = ArrayBuilder.GetInstance(out var finalParts); var parts = hint.Type.ToDisplayParts(s_minimalTypeStyle); - AddParts(anonymousTypeService, sb, parts, semanticModel, position); + AddParts(anonymousTypeService, finalParts, parts, semanticModel, position); cancellationToken.ThrowIfCancellationRequested(); context.AddTag(new TagSpan( new SnapshotSpan(snapshotSpan.Snapshot, hint.Position, 0), new InlineHintDataTag( - sb.ToStringAndFree(), + finalParts.ToImmutable(), hint.Type.GetSymbolKey(cancellationToken)))); } } private void AddParts( IAnonymousTypeDisplayService anonymousTypeService, - PooledStringBuilder sb, - System.Collections.Immutable.ImmutableArray parts, + ArrayBuilder finalParts, + ImmutableArray parts, SemanticModel semanticModel, int position, HashSet? seenSymbols = null) @@ -137,17 +139,17 @@ private void AddParts( if (seenSymbols.Add(anonymousType)) { var anonymousParts = anonymousTypeService.GetAnonymousTypeParts(anonymousType, semanticModel, position); - AddParts(anonymousTypeService, sb, anonymousParts, semanticModel, position, seenSymbols); + AddParts(anonymousTypeService, finalParts, anonymousParts, semanticModel, position, seenSymbols); seenSymbols.Remove(anonymousType); } else { - sb.Builder.Append("..."); + finalParts.Add(new SymbolDisplayPart(SymbolDisplayPartKind.Text, symbol: null, "...")); } } else { - sb.Builder.Append(part.ToString()); + finalParts.Add(part); } } } @@ -169,7 +171,7 @@ private static async Task AddParameterNameHintsAsync(TaggerContext( new SnapshotSpan(snapshotSpan.Snapshot, hint.Position, 0), new InlineHintDataTag( - hint.Parameter.Name + ":", + ImmutableArray.Create(new SymbolDisplayPart(SymbolDisplayPartKind.Text, hint.Parameter, hint.Parameter.Name + ":")), hint.Parameter.GetSymbolKey(cancellationToken)))); } } diff --git a/src/Features/Core/Portable/InlineHints/InlineHintsOptions.cs b/src/Features/Core/Portable/InlineHints/InlineHintsOptions.cs index ee558cb603158..41930e04b32d2 100644 --- a/src/Features/Core/Portable/InlineHints/InlineHintsOptions.cs +++ b/src/Features/Core/Portable/InlineHints/InlineHintsOptions.cs @@ -19,6 +19,12 @@ internal static class InlineHintsOptions defaultValue: true, storageLocations: new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Specific.DisplayAllHintsWhilePressingCtrlAlt")); + public static readonly PerLanguageOption2 ColorHints = + new(nameof(InlineHintsOptions), + nameof(ColorHints), + defaultValue: true, + storageLocations: new RoamingProfileStorageLocation("TextEditor.%LANGUAGE%.Specific.ColorHints")); + /// /// Non-persisted option used to switch to displaying everything while the user is holding ctrl-alt. /// @@ -92,9 +98,14 @@ public InlineHintsOptionsProvider() } public ImmutableArray Options { get; } = ImmutableArray.Create( + InlineHintsOptions.DisplayAllHintsWhilePressingCtrlAlt, + InlineHintsOptions.ColorHints, InlineHintsOptions.EnabledForParameters, InlineHintsOptions.ForLiteralParameters, InlineHintsOptions.ForObjectCreationParameters, - InlineHintsOptions.ForOtherParameters); + InlineHintsOptions.ForOtherParameters, + InlineHintsOptions.EnabledForTypes, + InlineHintsOptions.ForImplicitVariableTypes, + InlineHintsOptions.ForLambdaParameterTypes); } } diff --git a/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml b/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml index 87117d0017100..2a71be74326af 100644 --- a/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml +++ b/src/VisualStudio/CSharp/Impl/Options/AdvancedOptionPageControl.xaml @@ -193,6 +193,9 @@ + + ServicesVSResources.Display_all_hints_while_pressing_Ctrl_Alt; + public static string Option_Color_hints + => ServicesVSResources.Color_hints; + public static string Option_Display_inline_parameter_name_hints => ServicesVSResources.Display_inline_parameter_name_hints; diff --git a/src/VisualStudio/Core/Def/ServicesVSResources.resx b/src/VisualStudio/Core/Def/ServicesVSResources.resx index 0670892d58ec1..c09ce14da9e43 100644 --- a/src/VisualStudio/Core/Def/ServicesVSResources.resx +++ b/src/VisualStudio/Core/Def/ServicesVSResources.resx @@ -1584,4 +1584,7 @@ I agree to all of the foregoing: Display all hints while pressing Ctrl+Alt + + Color hints + \ No newline at end of file diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.cs.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.cs.xlf index 2f00fca94deb2..d404bd54b66e5 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.cs.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.cs.xlf @@ -147,6 +147,11 @@ Analýza kódu pro řešení se ukončila dříve, než se dokončila. + + Color hints + Color hints + + Colorize regular expressions Obarvit regulární výrazy diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.de.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.de.xlf index f42378a31aabf..44f606a44713e 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.de.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.de.xlf @@ -147,6 +147,11 @@ Die Codeanalyse wurde für die Projektmappe vorzeitig beendet. + + Color hints + Color hints + + Colorize regular expressions Reguläre Ausdrücke farbig hervorheben diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.es.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.es.xlf index ec12649630cfd..7f538f23c3710 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.es.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.es.xlf @@ -147,6 +147,11 @@ El análisis de código terminó antes de completarse para la solución. + + Color hints + Color hints + + Colorize regular expressions Colorear expresiones regulares diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.fr.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.fr.xlf index a2c88f325a7bf..50228db4a5386 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.fr.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.fr.xlf @@ -147,6 +147,11 @@ L'analyse du code s'est terminée avant la fin de la solution. + + Color hints + Color hints + + Colorize regular expressions Coloriser les expressions régulières diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.it.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.it.xlf index 1484ca0421587..c9373307fd587 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.it.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.it.xlf @@ -147,6 +147,11 @@ L'esecuzione di Code Analysis è stata terminata prima del completamento per la soluzione. + + Color hints + Color hints + + Colorize regular expressions Colora espressioni regolari diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ja.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ja.xlf index 7585a432b17fa..bd927e2639bd9 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ja.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ja.xlf @@ -147,6 +147,11 @@ コード分析が、ソリューションでの完了前に終了しました。 + + Color hints + Color hints + + Colorize regular expressions 正規表現をカラー化 diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ko.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ko.xlf index a87ce575d5aeb..488a20465c683 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ko.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ko.xlf @@ -147,6 +147,11 @@ 솔루션 완료 전에 코드 분석이 종료되었습니다. + + Color hints + Color hints + + Colorize regular expressions 정규식 색 지정 diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pl.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pl.xlf index 949ceaec32f27..3c46f6e52d967 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pl.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pl.xlf @@ -147,6 +147,11 @@ Analiza kodu zakończyła się przed zakończeniem dla rozwiązania. + + Color hints + Color hints + + Colorize regular expressions Koloruj wyrażenia regularne diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pt-BR.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pt-BR.xlf index e4ae79e60daa0..64656cc66014a 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pt-BR.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.pt-BR.xlf @@ -147,6 +147,11 @@ Análise de código terminada antes da conclusão da Solução. + + Color hints + Color hints + + Colorize regular expressions Colorir expressões regulares diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ru.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ru.xlf index 9f24f4d992314..a6aa2ebdc90ed 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ru.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.ru.xlf @@ -147,6 +147,11 @@ Анализ кода прерван до завершения решения. + + Color hints + Color hints + + Colorize regular expressions Выделить регулярные выражения цветом diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.tr.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.tr.xlf index 8e9cb62a5cf7f..708352976dfff 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.tr.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.tr.xlf @@ -147,6 +147,11 @@ Kod analizi, Çözüm için tamamlanmadan önce sonlandırıldı. + + Color hints + Color hints + + Colorize regular expressions Normal ifadeleri renklendir diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hans.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hans.xlf index 362b133e91292..37c114cc6c96c 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hans.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hans.xlf @@ -147,6 +147,11 @@ 解决方案的代码分析在完成之前终止。 + + Color hints + Color hints + + Colorize regular expressions 为正规表达式着色 diff --git a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hant.xlf b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hant.xlf index 89c95594574a1..108704fa0dff8 100644 --- a/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hant.xlf +++ b/src/VisualStudio/Core/Def/xlf/ServicesVSResources.zh-Hant.xlf @@ -147,6 +147,11 @@ 程式碼分析在解決方案完成前終止。 + + Color hints + Color hints + + Colorize regular expressions 為規則運算式添加色彩 diff --git a/src/VisualStudio/VisualBasic/Impl/Options/AdvancedOptionPageControl.xaml b/src/VisualStudio/VisualBasic/Impl/Options/AdvancedOptionPageControl.xaml index 876542180a966..ce1aa076580aa 100644 --- a/src/VisualStudio/VisualBasic/Impl/Options/AdvancedOptionPageControl.xaml +++ b/src/VisualStudio/VisualBasic/Impl/Options/AdvancedOptionPageControl.xaml @@ -199,6 +199,9 @@ + + Date: Thu, 8 Oct 2020 10:54:36 -0700 Subject: [PATCH 14/68] Add option checks --- .../Core/InlineHints/InlineHintsDataTaggerProvider.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs index b79b18cb9bcfe..983438ae6d1c4 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs @@ -65,7 +65,10 @@ protected override ITaggerEventSource CreateEventSource(ITextView textViewOpt, I TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForObjectCreationParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForOtherParameters, TaggerDelay.NearImmediate), TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.SuppressForParametersThatMatchMethodIntent, TaggerDelay.NearImmediate), - TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.SuppressForParametersThatDifferOnlyBySuffix, TaggerDelay.NearImmediate)); + TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.SuppressForParametersThatDifferOnlyBySuffix, TaggerDelay.NearImmediate), + TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.EnabledForTypes, TaggerDelay.NearImmediate), + TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForImplicitVariableTypes, TaggerDelay.NearImmediate), + TaggerEventSources.OnOptionChanged(subjectBuffer, InlineHintsOptions.ForLambdaParameterTypes, TaggerDelay.NearImmediate)); } protected override IEnumerable GetSpansToTag(ITextView textView, ITextBuffer subjectBuffer) From 12f0268e067fa170c011a36cd7a9bb9c30fa98d3 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 11:01:55 -0700 Subject: [PATCH 15/68] Support in foreach --- .../Portable/InlineHints/CSharpInlineTypeHintsService.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs index 4d9c9bbc86e97..7082502c01ebc 100644 --- a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs @@ -46,6 +46,14 @@ public CSharpInlineTypeHintsService() if (IsValidType(type)) return new InlineTypeHint(type, variableDesignation.Identifier.SpanStart); } + else if (node is ForEachStatementSyntax forEachStatement && + forEachStatement.Type.IsVar) + { + var info = semanticModel.GetForEachStatementInfo(forEachStatement); + var type = info.ElementType; + if (IsValidType(type)) + return new InlineTypeHint(type, forEachStatement.Identifier.SpanStart); + } } if (forLambdaParameterTypes) From 2ad91afdf0ecd461e51a9c30805d94b401607eda Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 11:06:55 -0700 Subject: [PATCH 16/68] Don't show for declaration patterns (since they specify their type) --- .../CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs index 7082502c01ebc..74eabd4640186 100644 --- a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs @@ -39,7 +39,7 @@ public CSharpInlineTypeHintsService() if (IsValidType(type)) return new InlineTypeHint(type, variableDeclaration.Variables[0].Identifier.SpanStart); } - else if (node is SingleVariableDesignationSyntax variableDesignation) + else if (node is SingleVariableDesignationSyntax { Parent: not DeclarationPatternSyntax } variableDesignation) { var local = semanticModel.GetDeclaredSymbol(variableDesignation, cancellationToken) as ILocalSymbol; var type = local?.Type; From 657b6c67b07467c8d607ebdc1a8cbb59e87dd95d Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 11:17:23 -0700 Subject: [PATCH 17/68] Rename base type --- ...eterNameHintsTests.vb => AbstractInlineHintsTests.vb} | 9 ++++----- .../InlineHints/CSharpInlineParameterNameHintsTests.vb | 2 +- .../VisualBasicInlineParameterNameHintsTests.vb | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) rename src/EditorFeatures/Test2/InlineHints/{AbstractInlineParameterNameHintsTests.vb => AbstractInlineHintsTests.vb} (90%) diff --git a/src/EditorFeatures/Test2/InlineHints/AbstractInlineParameterNameHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb similarity index 90% rename from src/EditorFeatures/Test2/InlineHints/AbstractInlineParameterNameHintsTests.vb rename to src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb index a032b961f399e..3040bff88faf5 100644 --- a/src/EditorFeatures/Test2/InlineHints/AbstractInlineParameterNameHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb @@ -8,11 +8,10 @@ Imports Microsoft.CodeAnalysis.InlineHints Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints <[UseExportProvider]> - Public MustInherit Class AbstractInlineParameterNameHintsTests - + Public MustInherit Class AbstractInlineHintsTests Protected Async Function VerifyParamHints(test As XElement, Optional optionIsEnabled As Boolean = True) As Task Using workspace = TestWorkspace.Create(test) - WpfTestRunner.RequireWpfFact($"{NameOf(AbstractInlineParameterNameHintsTests)}.{NameOf(Me.VerifyParamHints)} creates asynchronous taggers") + WpfTestRunner.RequireWpfFact($"{NameOf(AbstractInlineHintsTests)}.{NameOf(Me.VerifyParamHints)} creates asynchronous taggers") workspace.TryApplyChanges(workspace.CurrentSolution.WithOptions(workspace.Options.WithChangedOption( InlineHintsOptions.EnabledForParameters, @@ -34,8 +33,8 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Function(name) name.Value, Function(name, span) New With {.Name = name.Key, span}) - For Each nameAndSpan In nameAndSpansList.OrderBy(Function(x) x.Span.Start) - expectedTags.Add(nameAndSpan.Name + ":" + nameAndSpan.Span.Start.ToString()) + For Each nameAndSpan In nameAndSpansList.OrderBy(Function(x) x.span.Start) + expectedTags.Add(nameAndSpan.Name + ":" + nameAndSpan.span.Start.ToString()) Next AssertEx.Equal(expectedTags, producedTags) diff --git a/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb index d6a929902f2af..3625795b263bd 100644 --- a/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb @@ -4,7 +4,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Public Class CSharpInlineParameterNameHintsTests - Inherits AbstractInlineParameterNameHintsTests + Inherits AbstractInlineHintsTests Public Async Function TestNoParameterSimpleCase() As Task diff --git a/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb index e1169778b55ec..3ca19b506936e 100644 --- a/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb @@ -4,7 +4,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Public Class VisualBasicInlineParameterNameHintsTests - Inherits AbstractInlineParameterNameHintsTests + Inherits AbstractInlineHintsTests Public Async Function TestNoParameterSimpleCase() As Task From 3982eb14330d3805ad3cb1ef84c955de533a65fa Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 11:35:42 -0700 Subject: [PATCH 18/68] Compute all data in hte service. --- .../InlineHintsDataTaggerProvider.cs | 56 +----------------- .../InlineHints/AbstractInlineHintsTests.vb | 33 +++++++++++ .../CSharpInlineTypeHintsService.cs | 12 ++-- .../AbstractInlineTypeHintsService.cs | 57 +++++++++++++++++-- .../Portable/InlineHints/InlineTypeHint.cs | 12 ++-- 5 files changed, 101 insertions(+), 69 deletions(-) diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs index 983438ae6d1c4..bc66711a96013 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs @@ -14,8 +14,6 @@ using Microsoft.CodeAnalysis.Editor.Tagging; using Microsoft.CodeAnalysis.Host.Mef; using Microsoft.CodeAnalysis.InlineHints; -using Microsoft.CodeAnalysis.LanguageServices; -using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Shared.TestHooks; using Microsoft.VisualStudio.Text; @@ -35,10 +33,6 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints [VSUtilities.Name(nameof(InlineHintsDataTaggerProvider))] internal class InlineHintsDataTaggerProvider : AsynchronousViewTaggerProvider { - private static readonly SymbolDisplayFormat s_minimalTypeStyle = new SymbolDisplayFormat( - genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters, - miscellaneousOptions: SymbolDisplayMiscellaneousOptions.AllowDefaultLiteral | SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier | SymbolDisplayMiscellaneousOptions.UseSpecialTypes); - private readonly IAsynchronousOperationListener _listener; protected override SpanTrackingMode SpanTrackingMode => SpanTrackingMode.EdgeInclusive; @@ -94,66 +88,20 @@ protected override async Task ProduceTagsAsync(TaggerContext await AddParameterNameHintsAsync(context, documentSnapshotSpan, cancellationToken).ConfigureAwait(false); } - private async Task AddTypeHintsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, CancellationToken cancellationToken) + private static async Task AddTypeHintsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, CancellationToken cancellationToken) { var document = documentSnapshotSpan.Document; var service = document.GetLanguageService(); if (service == null) return; - var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); - var anonymousTypeService = document.GetRequiredLanguageService(); - var snapshotSpan = documentSnapshotSpan.SnapshotSpan; - var position = snapshotSpan.Span.Start; var hints = await service.GetInlineTypeHintsAsync(document, snapshotSpan.Span.ToTextSpan(), cancellationToken).ConfigureAwait(false); foreach (var hint in hints) { - Contract.ThrowIfNull(hint.Type); - - using var _ = ArrayBuilder.GetInstance(out var finalParts); - var parts = hint.Type.ToDisplayParts(s_minimalTypeStyle); - - AddParts(anonymousTypeService, finalParts, parts, semanticModel, position); - - cancellationToken.ThrowIfCancellationRequested(); context.AddTag(new TagSpan( new SnapshotSpan(snapshotSpan.Snapshot, hint.Position, 0), - new InlineHintDataTag( - finalParts.ToImmutable(), - hint.Type.GetSymbolKey(cancellationToken)))); - } - } - - private void AddParts( - IAnonymousTypeDisplayService anonymousTypeService, - ArrayBuilder finalParts, - ImmutableArray parts, - SemanticModel semanticModel, - int position, - HashSet? seenSymbols = null) - { - seenSymbols ??= new(); - - foreach (var part in parts) - { - if (part.Symbol is INamedTypeSymbol { IsAnonymousType: true } anonymousType) - { - if (seenSymbols.Add(anonymousType)) - { - var anonymousParts = anonymousTypeService.GetAnonymousTypeParts(anonymousType, semanticModel, position); - AddParts(anonymousTypeService, finalParts, anonymousParts, semanticModel, position, seenSymbols); - seenSymbols.Remove(anonymousType); - } - else - { - finalParts.Add(new SymbolDisplayPart(SymbolDisplayPartKind.Text, symbol: null, "...")); - } - } - else - { - finalParts.Add(part); - } + new InlineHintDataTag(hint.Parts, hint.SymbolKey))); } } diff --git a/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb index 3040bff88faf5..a6ca0b2c121eb 100644 --- a/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb @@ -40,5 +40,38 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints AssertEx.Equal(expectedTags, producedTags) End Using End Function + + Protected Async Function VerifyTypeHints(test As XElement, Optional optionIsEnabled As Boolean = True) As Task + Using workspace = TestWorkspace.Create(test) + WpfTestRunner.RequireWpfFact($"{NameOf(AbstractInlineHintsTests)}.{NameOf(Me.VerifyTypeHints)} creates asynchronous taggers") + + workspace.TryApplyChanges(workspace.CurrentSolution.WithOptions(workspace.Options.WithChangedOption( + InlineHintsOptions.EnabledForTypes, + workspace.CurrentSolution.Projects().First().Language, + optionIsEnabled))) + + Dim hostDocument = workspace.Documents.Single() + Dim snapshot = hostDocument.GetTextBuffer().CurrentSnapshot + Dim document = workspace.CurrentSolution.GetDocument(hostDocument.Id) + Dim tagService = document.GetRequiredLanguageService(Of IInlineTypeHintsService) + Dim typeHints = Await tagService.GetInlineTypeHintsAsync(document, New Text.TextSpan(0, snapshot.Length), New CancellationToken()) + + Dim producedTags = From hint In typeHints + Select hint.Type + + Dim expectedTags As New List(Of String) + + Dim nameAndSpansList = hostDocument.AnnotatedSpans.SelectMany( + Function(name) name.Value, + Function(name, span) New With {.Name = name.Key, span}) + + For Each nameAndSpan In nameAndSpansList.OrderBy(Function(x) x.span.Start) + expectedTags.Add(nameAndSpan.Name + ":" + nameAndSpan.span.Start.ToString()) + Next + + AssertEx.Equal(expectedTags, producedTags) + End Using + End Function + End Class End Namespace diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs index 74eabd4640186..8f169d682654e 100644 --- a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs @@ -21,7 +21,7 @@ public CSharpInlineTypeHintsService() { } - protected override InlineTypeHint? TryGetTypeHint( + protected override (ITypeSymbol type, int position)? TryGetTypeHint( SemanticModel semanticModel, SyntaxNode node, bool forImplicitVariableTypes, @@ -37,14 +37,14 @@ public CSharpInlineTypeHintsService() { var type = semanticModel.GetTypeInfo(variableDeclaration.Type, cancellationToken).Type; if (IsValidType(type)) - return new InlineTypeHint(type, variableDeclaration.Variables[0].Identifier.SpanStart); + return (type, variableDeclaration.Variables[0].Identifier.SpanStart); } else if (node is SingleVariableDesignationSyntax { Parent: not DeclarationPatternSyntax } variableDesignation) { var local = semanticModel.GetDeclaredSymbol(variableDesignation, cancellationToken) as ILocalSymbol; var type = local?.Type; if (IsValidType(type)) - return new InlineTypeHint(type, variableDesignation.Identifier.SpanStart); + return (type, variableDesignation.Identifier.SpanStart); } else if (node is ForEachStatementSyntax forEachStatement && forEachStatement.Type.IsVar) @@ -52,7 +52,7 @@ public CSharpInlineTypeHintsService() var info = semanticModel.GetForEachStatementInfo(forEachStatement); var type = info.ElementType; if (IsValidType(type)) - return new InlineTypeHint(type, forEachStatement.Identifier.SpanStart); + return (type, forEachStatement.Identifier.SpanStart); } } @@ -62,13 +62,13 @@ public CSharpInlineTypeHintsService() { var parameter = semanticModel.GetDeclaredSymbol(simpleLambda.Parameter, cancellationToken); if (IsValidType(parameter?.Type)) - return new InlineTypeHint(parameter.Type, simpleLambda.Parameter.Identifier.SpanStart); + return (parameter.Type, simpleLambda.Parameter.Identifier.SpanStart); } else if (node is ParameterSyntax { Type: null } parameterNode) { var parameter = semanticModel.GetDeclaredSymbol(parameterNode, cancellationToken); if (IsValidType(parameter?.Type)) - return new InlineTypeHint(parameter.Type, parameterNode.Identifier.SpanStart); + return (parameter.Type, parameterNode.Identifier.SpanStart); } } diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs index ee8a4e750c5bf..2e75b46c7e905 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs @@ -3,9 +3,11 @@ // See the LICENSE file in the project root for more information. using System; +using System.Collections.Generic; using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; +using Microsoft.CodeAnalysis.LanguageServices; using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Text; @@ -14,7 +16,11 @@ namespace Microsoft.CodeAnalysis.InlineHints { internal abstract class AbstractInlineTypeHintsService : IInlineTypeHintsService { - protected abstract InlineTypeHint? TryGetTypeHint( + private static readonly SymbolDisplayFormat s_minimalTypeStyle = new SymbolDisplayFormat( + genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters, + miscellaneousOptions: SymbolDisplayMiscellaneousOptions.AllowDefaultLiteral | SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier | SymbolDisplayMiscellaneousOptions.UseSpecialTypes); + + protected abstract (ITypeSymbol type, int position)? TryGetTypeHint( SemanticModel semanticModel, SyntaxNode node, bool forImplicitVariableTypes, bool forLambdaParameterTypes, @@ -35,20 +41,63 @@ public async Task> GetInlineTypeHintsAsync( if (!forImplicitVariableTypes && !forLambdaParameterTypes) return ImmutableArray.Empty; + var anonymousTypeService = document.GetRequiredLanguageService(); var root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); - using var _ = ArrayBuilder.GetInstance(out var result); + using var _1 = ArrayBuilder.GetInstance(out var result); foreach (var node in root.DescendantNodes(n => n.Span.IntersectsWith(textSpan))) { - result.AddIfNotNull(TryGetTypeHint( + var hintOpt = TryGetTypeHint( semanticModel, node, forImplicitVariableTypes, - forLambdaParameterTypes, cancellationToken)); + forLambdaParameterTypes, cancellationToken); + if (hintOpt == null) + continue; + + var (type, position) = hintOpt.Value; + + using var _2 = ArrayBuilder.GetInstance(out var finalParts); + var parts = type.ToDisplayParts(s_minimalTypeStyle); + + AddParts(anonymousTypeService, finalParts, parts, semanticModel, position); + result.Add(new InlineTypeHint(position, finalParts.ToImmutable(), type.GetSymbolKey(cancellationToken))); } return result.ToImmutable(); } + + private void AddParts( + IAnonymousTypeDisplayService anonymousTypeService, + ArrayBuilder finalParts, + ImmutableArray parts, + SemanticModel semanticModel, + int position, + HashSet? seenSymbols = null) + { + seenSymbols ??= new(); + + foreach (var part in parts) + { + if (part.Symbol is INamedTypeSymbol { IsAnonymousType: true } anonymousType) + { + if (seenSymbols.Add(anonymousType)) + { + var anonymousParts = anonymousTypeService.GetAnonymousTypeParts(anonymousType, semanticModel, position); + AddParts(anonymousTypeService, finalParts, anonymousParts, semanticModel, position, seenSymbols); + seenSymbols.Remove(anonymousType); + } + else + { + finalParts.Add(new SymbolDisplayPart(SymbolDisplayPartKind.Text, symbol: null, "...")); + } + } + else + { + finalParts.Add(part); + } + } + } } } diff --git a/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs b/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs index 689b1aec40864..7e37d9ca1640f 100644 --- a/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs +++ b/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs @@ -2,19 +2,21 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Collections.Immutable; + namespace Microsoft.CodeAnalysis.InlineHints { internal readonly struct InlineTypeHint { - public readonly ITypeSymbol Type; public readonly int Position; + public readonly ImmutableArray Parts; + public readonly SymbolKey SymbolKey; - public InlineTypeHint( - ITypeSymbol type, - int position) + public InlineTypeHint(int position, ImmutableArray parts, SymbolKey symbolKey) { - Type = type; Position = position; + Parts = parts; + SymbolKey = symbolKey; } } } From 29851f1b682689bf1c10633435e59a8c98ca65f1 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 11:46:34 -0700 Subject: [PATCH 19/68] Add tests --- .../InlineHints/AbstractInlineHintsTests.vb | 2 +- .../CSharpInlineParameterNameHintsTests.vb | 54 ++++----- .../InlineHints/CSharpInlineTypeHintsTests.vb | 109 ++++++++++++++++++ ...isualBasicInlineParameterNameHintsTests.vb | 52 ++++----- src/Test/Utilities/Portable/Traits/Traits.cs | 2 +- 5 files changed, 164 insertions(+), 55 deletions(-) create mode 100644 src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb diff --git a/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb index a6ca0b2c121eb..fc782199e2715 100644 --- a/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb @@ -57,7 +57,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Dim typeHints = Await tagService.GetInlineTypeHintsAsync(document, New Text.TextSpan(0, snapshot.Length), New CancellationToken()) Dim producedTags = From hint In typeHints - Select hint.Type + Select hint.Parts.GetFullText() + ":" + hint.Position.ToString() Dim expectedTags As New List(Of String) diff --git a/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb index 3625795b263bd..d54da8061cdd1 100644 --- a/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb @@ -6,7 +6,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Public Class CSharpInlineParameterNameHintsTests Inherits AbstractInlineHintsTests - + Public Async Function TestNoParameterSimpleCase() As Task Dim input = @@ -30,7 +30,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestOneParameterSimpleCase() As Task Dim input = @@ -54,7 +54,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestTwoParametersSimpleCase() As Task Dim input = @@ -78,7 +78,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestNegativeNumberParametersSimpleCase() As Task Dim input = @@ -102,7 +102,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestLiteralNestedCastParametersSimpleCase() As Task Dim input = @@ -126,7 +126,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestObjectCreationParametersSimpleCase() As Task Dim input = @@ -150,7 +150,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestCastingANegativeSimpleCase() As Task Dim input = @@ -174,7 +174,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestNegatingACastSimpleCase() As Task Dim input = @@ -198,7 +198,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestMissingParameterNameSimpleCase() As Task Dim input = @@ -222,7 +222,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestDelegateParameter() As Task Dim input = @@ -250,7 +250,7 @@ class Test Await VerifyParamHints(input) End Function - + Public Async Function TestFunctionPointerNoParameter() As Task Dim input = @@ -268,7 +268,7 @@ unsafe class Example { Await VerifyParamHints(input) End Function - + Public Async Function TestParamsArgument() As Task Dim input = @@ -292,7 +292,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestAttributesArgument() As Task Dim input = @@ -313,7 +313,7 @@ class Foo Await VerifyParamHints(input) End Function - + Public Async Function TestIncompleteFunctionCall() As Task Dim input = @@ -337,7 +337,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestInterpolatedString() As Task Dim input = @@ -361,7 +361,7 @@ class A Await VerifyParamHints(input) End Function - + Public Async Function TestRecordBaseType() As Task Dim input = @@ -377,7 +377,7 @@ record Derived(int Other) : Base({|Alice:2|}, {|Bob:2|}); Await VerifyParamHints(input) End Function - + Public Async Function TestClassBaseType() As Task Dim input = @@ -400,7 +400,7 @@ class Derived : Base End Function - + Public Async Function TestNotOnEnableDisableBoolean1() As Task Dim input = @@ -425,7 +425,7 @@ class A End Function - + Public Async Function TestNotOnEnableDisableBoolean2() As Task Dim input = @@ -450,7 +450,7 @@ class A End Function - + Public Async Function TestOnEnableDisableNonBoolean1() As Task Dim input = @@ -475,7 +475,7 @@ class A End Function - + Public Async Function TestOnEnableDisableNonBoolean2() As Task Dim input = @@ -500,7 +500,7 @@ class A End Function - + Public Async Function TestOnSetMethodWithClearContext() As Task Dim input = @@ -525,7 +525,7 @@ class A End Function - + Public Async Function TestOnSetMethodWithUnclearContext() As Task Dim input = @@ -550,7 +550,7 @@ class A End Function - + Public Async Function TestMethodWithAlphaSuffix1() As Task Dim input = @@ -575,7 +575,7 @@ class A End Function - + Public Async Function TestMethodWithNonAlphaSuffix1() As Task Dim input = @@ -600,7 +600,7 @@ class A End Function - + Public Async Function TestMethodWithNumericSuffix1() As Task Dim input = @@ -625,7 +625,7 @@ class A End Function - + Public Async Function TestMethodWithNonNumericSuffix1() As Task Dim input = diff --git a/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb new file mode 100644 index 0000000000000..3f5ea3e52f544 --- /dev/null +++ b/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb @@ -0,0 +1,109 @@ +' Licensed to the .NET Foundation under one or more agreements. +' The .NET Foundation licenses this file to you under the MIT license. +' See the LICENSE file in the project root for more information. + +Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints + Public Class CSharpInlineTypeHintsTests + Inherits AbstractInlineHintsTests + + + Public Async Function TestNotOnLocalVariableWithType() As Task + Dim input = + + + +class A +{ + void Main() + { + int i = 0; + } +} + + + + + Await VerifyTypeHints(input) + End Function + + + Public Async Function TestOnLocalVariableWithVarType() As Task + Dim input = + + + +class A +{ + void Main() + { + var {|int:|}i = 0; + } +} + + + + + Await VerifyTypeHints(input) + End Function + + + Public Async Function TestOnDeconstruction() As Task + Dim input = + + + +class A +{ + void Main() + { + var ({|int:|}i, {|string:|}j = (0, ""); + } +} + + + + + Await VerifyTypeHints(input) + End Function + + + Public Async Function TestWithForeachVar() As Task + Dim input = + + + +class A +{ + void Main(string[] args) + { + foreach (var {|string:|}j in args) {} + } +} + + + + + Await VerifyTypeHints(input) + End Function + + + Public Async Function TestNotWithForeachType() As Task + Dim input = + + + +class A +{ + void Main(string[] args) + { + foreach (string j in args) {} + } +} + + + + + Await VerifyTypeHints(input) + End Function + End Class +End Namespace diff --git a/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb index 3ca19b506936e..f499754d9c4e0 100644 --- a/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb @@ -6,7 +6,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Public Class VisualBasicInlineParameterNameHintsTests Inherits AbstractInlineHintsTests - + Public Async Function TestNoParameterSimpleCase() As Task Dim input = @@ -28,7 +28,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestOneParameterSimpleCase() As Task Dim input = @@ -50,7 +50,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestTwoParametersSimpleCase() As Task Dim input = @@ -72,7 +72,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestNegativeNumberParametersSimpleCase() As Task Dim input = @@ -94,7 +94,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestCIntCast() As Task Dim input = @@ -116,7 +116,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestCTypeCast() As Task Dim input = @@ -138,7 +138,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestTryCastCase() As Task Dim input = @@ -160,7 +160,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestDirectCastCase() As Task Dim input = @@ -182,7 +182,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestCastingANegativeSimpleCase() As Task Dim input = @@ -204,7 +204,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestObjectCreationParametersSimpleCase() As Task Dim input = @@ -226,7 +226,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestMissingParameterNameSimpleCase() As Task Dim input = @@ -248,7 +248,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestDelegateParameter() As Task Dim input = @@ -268,7 +268,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestParamsArgument() As Task Dim input = @@ -290,7 +290,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestAttributesArgument() As Task Dim input = @@ -309,7 +309,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestIncompleteFunctionCall() As Task Dim input = @@ -331,7 +331,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Await VerifyParamHints(input) End Function - + Public Async Function TestInterpolatedString() As Task Dim input = @@ -354,7 +354,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints End Function - + Public Async Function TestNotOnEnableDisableBoolean1() As Task Dim input = @@ -376,7 +376,7 @@ end class End Function - + Public Async Function TestNotOnEnableDisableBoolean2() As Task Dim input = @@ -398,7 +398,7 @@ end class End Function - + Public Async Function TestOnEnableDisableNonBoolean1() As Task Dim input = @@ -420,7 +420,7 @@ end class End Function - + Public Async Function TestOnEnableDisableNonBoolean2() As Task Dim input = @@ -442,7 +442,7 @@ end class End Function - + Public Async Function TestOnSetMethodWithClearContext() As Task Dim input = @@ -464,7 +464,7 @@ end class End Function - + Public Async Function TestOnSetMethodWithUnclearContext() As Task Dim input = @@ -486,7 +486,7 @@ end class End Function - + Public Async Function TestMethodWithAlphaSuffix1() As Task Dim input = @@ -508,7 +508,7 @@ end class End Function - + Public Async Function TestMethodWithNonAlphaSuffix1() As Task Dim input = @@ -530,7 +530,7 @@ end class End Function - + Public Async Function TestMethodWithNumericSuffix1() As Task Dim input = @@ -552,7 +552,7 @@ end class End Function - + Public Async Function TestMethodWithNonNumericSuffix1() As Task Dim input = diff --git a/src/Test/Utilities/Portable/Traits/Traits.cs b/src/Test/Utilities/Portable/Traits/Traits.cs index d7f63fee3987e..fe5b3a444eb70 100644 --- a/src/Test/Utilities/Portable/Traits/Traits.cs +++ b/src/Test/Utilities/Portable/Traits/Traits.cs @@ -240,7 +240,7 @@ public static class Features public const string GoToBase = nameof(GoToBase); public const string GoToDefinition = nameof(GoToDefinition); public const string GoToImplementation = nameof(GoToImplementation); - public const string InlineParameterNameHints = nameof(InlineParameterNameHints); + public const string InlineHints = nameof(InlineHints); public const string Interactive = nameof(Interactive); public const string InteractiveHost = nameof(InteractiveHost); public const string KeywordHighlighting = nameof(KeywordHighlighting); From b5c0119407f2fb504555a14e7f116726d27adccd Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 11:47:46 -0700 Subject: [PATCH 20/68] Add tests --- .../Test2/InlineHints/CSharpInlineTypeHintsTests.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb index 3f5ea3e52f544..dfbd5ef53f3e1 100644 --- a/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb @@ -56,7 +56,7 @@ class A { void Main() { - var ({|int:|}i, {|string:|}j = (0, ""); + var ({|int:|}i, {|string:|}j) = (0, ""); } } From acfa08073eb6a75053fe411c094055cecfae8001 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 11:54:06 -0700 Subject: [PATCH 21/68] Add tests --- .../InlineHints/CSharpInlineTypeHintsTests.vb | 103 ++++++++++++++++++ .../CSharpInlineTypeHintsService.cs | 13 +-- 2 files changed, 108 insertions(+), 8 deletions(-) diff --git a/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb index dfbd5ef53f3e1..99a6f55896fe8 100644 --- a/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/CSharpInlineTypeHintsTests.vb @@ -105,5 +105,108 @@ class A Await VerifyTypeHints(input) End Function + + + Public Async Function TestWithPatternVar() As Task + Dim input = + + + +class A +{ + void Main(string[] args) + { + if (args is { Length: var {|int:|}goo }) { } + } +} + + + + + Await VerifyTypeHints(input) + End Function + + + Public Async Function TestNotWithPatternType() As Task + Dim input = + + + +class A +{ + void Main(string[] args) + { + if (args is { Length: int goo }) { } + } +} + + + + + Await VerifyTypeHints(input) + End Function + + + Public Async Function TestWithSimpleLambda() As Task + Dim input = + + + +using System.Linq; +class A +{ + void Main(string[] args) + { + args.Where({|string:|}a => a.Length > 0); + } +} + + + + + Await VerifyTypeHints(input) + End Function + + + Public Async Function TestWithParenthesizedLambda() As Task + Dim input = + + + +using System.Linq; +class A +{ + void Main(string[] args) + { + args.Where(({|string:|}a) => a.Length > 0); + } +} + + + + + Await VerifyTypeHints(input) + End Function + + + Public Async Function TestNotWithParenthesizedLambdaWithType() As Task + Dim input = + + + +using System.Linq; +class A +{ + void Main(string[] args) + { + args.Where((string a) => a.Length > 0); + } +} + + + + + Await VerifyTypeHints(input) + End Function End Class End Namespace diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs index 8f169d682654e..11f534bbdc3ba 100644 --- a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs @@ -58,17 +58,14 @@ protected override (ITypeSymbol type, int position)? TryGetTypeHint( if (forLambdaParameterTypes) { - if (node is SimpleLambdaExpressionSyntax simpleLambda) - { - var parameter = semanticModel.GetDeclaredSymbol(simpleLambda.Parameter, cancellationToken); - if (IsValidType(parameter?.Type)) - return (parameter.Type, simpleLambda.Parameter.Identifier.SpanStart); - } - else if (node is ParameterSyntax { Type: null } parameterNode) + if (node is ParameterSyntax { Type: null } parameterNode) { var parameter = semanticModel.GetDeclaredSymbol(parameterNode, cancellationToken); - if (IsValidType(parameter?.Type)) + if (parameter?.ContainingSymbol is IMethodSymbol { MethodKind: MethodKind.AnonymousFunction } && + IsValidType(parameter?.Type)) + { return (parameter.Type, parameterNode.Identifier.SpanStart); + } } } From b5c16495952ced7074fc5c84291b580a6ee5d1a2 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 12:04:50 -0700 Subject: [PATCH 22/68] Simplify --- .../InlineHintsDataTaggerProvider.cs | 10 ++--- .../InlineHints/AbstractInlineHintsTests.vb | 45 ++++++++----------- ...AbstractInlineParameterNameHintsService.cs | 15 ++++--- .../AbstractInlineTypeHintsService.cs | 10 ++--- .../IInlineParameterNameHintsService.cs | 2 +- .../InlineHints/IInlineTypeHintsService.cs | 2 +- .../Portable/InlineHints/InlineTypeHint.cs | 6 +-- 7 files changed, 42 insertions(+), 48 deletions(-) diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs index bc66711a96013..47a4ef5454e30 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs @@ -96,7 +96,7 @@ private static async Task AddTypeHintsAsync(TaggerContext con return; var snapshotSpan = documentSnapshotSpan.SnapshotSpan; - var hints = await service.GetInlineTypeHintsAsync(document, snapshotSpan.Span.ToTextSpan(), cancellationToken).ConfigureAwait(false); + var hints = await service.GetInlineHintsAsync(document, snapshotSpan.Span.ToTextSpan(), cancellationToken).ConfigureAwait(false); foreach (var hint in hints) { context.AddTag(new TagSpan( @@ -113,17 +113,13 @@ private static async Task AddParameterNameHintsAsync(TaggerContext( new SnapshotSpan(snapshotSpan.Snapshot, hint.Position, 0), - new InlineHintDataTag( - ImmutableArray.Create(new SymbolDisplayPart(SymbolDisplayPartKind.Text, hint.Parameter, hint.Parameter.Name + ":")), - hint.Parameter.GetSymbolKey(cancellationToken)))); + new InlineHintDataTag(hint.Parts, hint.SymbolKey))); } } } diff --git a/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb index fc782199e2715..127f51138542a 100644 --- a/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb @@ -22,24 +22,28 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Dim snapshot = hostDocument.GetTextBuffer().CurrentSnapshot Dim document = workspace.CurrentSolution.GetDocument(hostDocument.Id) Dim tagService = document.GetRequiredLanguageService(Of IInlineParameterNameHintsService) - Dim paramNameHintSpans = Await tagService.GetInlineParameterNameHintsAsync(document, New Text.TextSpan(0, snapshot.Length), New CancellationToken()) + Dim inlineHints = Await tagService.GetInlineHintsAsync(document, New Text.TextSpan(0, snapshot.Length), New CancellationToken()) - Dim producedTags = From tag In paramNameHintSpans - Select tag.Parameter.Name + ":" + tag.Position.ToString + Dim producedTags = From hint In inlineHints + Select hint.Parts.GetFullText() + hint.Position.ToString - Dim expectedTags As New List(Of String) + ValidateSpans(hostDocument, producedTags) + End Using + End Function - Dim nameAndSpansList = hostDocument.AnnotatedSpans.SelectMany( - Function(name) name.Value, - Function(name, span) New With {.Name = name.Key, span}) + Private Shared Sub ValidateSpans(hostDocument As TestHostDocument, producedTags As IEnumerable(Of String)) + Dim expectedTags As New List(Of String) - For Each nameAndSpan In nameAndSpansList.OrderBy(Function(x) x.span.Start) - expectedTags.Add(nameAndSpan.Name + ":" + nameAndSpan.span.Start.ToString()) - Next + Dim nameAndSpansList = hostDocument.AnnotatedSpans.SelectMany( + Function(name) name.Value, + Function(name, span) New With {.Name = name.Key, span}) - AssertEx.Equal(expectedTags, producedTags) - End Using - End Function + For Each nameAndSpan In nameAndSpansList.OrderBy(Function(x) x.span.Start) + expectedTags.Add(nameAndSpan.Name + ":" + nameAndSpan.span.Start.ToString()) + Next + + AssertEx.Equal(expectedTags, producedTags) + End Sub Protected Async Function VerifyTypeHints(test As XElement, Optional optionIsEnabled As Boolean = True) As Task Using workspace = TestWorkspace.Create(test) @@ -54,24 +58,13 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Dim snapshot = hostDocument.GetTextBuffer().CurrentSnapshot Dim document = workspace.CurrentSolution.GetDocument(hostDocument.Id) Dim tagService = document.GetRequiredLanguageService(Of IInlineTypeHintsService) - Dim typeHints = Await tagService.GetInlineTypeHintsAsync(document, New Text.TextSpan(0, snapshot.Length), New CancellationToken()) + Dim typeHints = Await tagService.GetInlineHintsAsync(document, New Text.TextSpan(0, snapshot.Length), New CancellationToken()) Dim producedTags = From hint In typeHints Select hint.Parts.GetFullText() + ":" + hint.Position.ToString() - Dim expectedTags As New List(Of String) - - Dim nameAndSpansList = hostDocument.AnnotatedSpans.SelectMany( - Function(name) name.Value, - Function(name, span) New With {.Name = name.Key, span}) - - For Each nameAndSpan In nameAndSpansList.OrderBy(Function(x) x.span.Start) - expectedTags.Add(nameAndSpan.Name + ":" + nameAndSpan.span.Start.ToString()) - Next - - AssertEx.Equal(expectedTags, producedTags) + ValidateSpans(hostDocument, producedTags) End Using End Function - End Class End Namespace diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs index 4e76b6257480d..98cebfb49dec7 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs @@ -21,7 +21,7 @@ protected abstract void AddAllParameterNameHintLocations( ArrayBuilder buffer, CancellationToken cancellationToken); - public async Task> GetInlineParameterNameHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken) + public async Task> GetInlineHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken) { var options = await document.GetOptionsAsync(cancellationToken).ConfigureAwait(false); @@ -29,13 +29,13 @@ public async Task> GetInlineParameterNameHin var enabledForParameters = displayAllOverride || options.GetOption(InlineHintsOptions.EnabledForParameters); if (!enabledForParameters) - return ImmutableArray.Empty; + return ImmutableArray.Empty; var literalParameters = displayAllOverride || options.GetOption(InlineHintsOptions.ForLiteralParameters); var objectCreationParameters = displayAllOverride || options.GetOption(InlineHintsOptions.ForObjectCreationParameters); var otherParameters = displayAllOverride || options.GetOption(InlineHintsOptions.ForOtherParameters); if (!literalParameters && !objectCreationParameters && !otherParameters) - return ImmutableArray.Empty; + return ImmutableArray.Empty; var suppressForParametersThatDifferOnlyBySuffix = !displayAllOverride && options.GetOption(InlineHintsOptions.SuppressForParametersThatDifferOnlyBySuffix); var suppressForParametersThatMatchMethodIntent = !displayAllOverride && options.GetOption(InlineHintsOptions.SuppressForParametersThatMatchMethodIntent); @@ -43,7 +43,7 @@ public async Task> GetInlineParameterNameHin var root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); - using var _1 = ArrayBuilder.GetInstance(out var result); + using var _1 = ArrayBuilder.GetInstance(out var result); using var _2 = ArrayBuilder.GetInstance(out var buffer); foreach (var node in root.DescendantNodes(textSpan, n => n.Span.IntersectsWith(textSpan))) @@ -74,7 +74,12 @@ void AddHintsIfAppropriate() continue; if (HintMatches(hint, literalParameters, objectCreationParameters, otherParameters)) - result.Add(hint); + { + result.Add(new InlineHint( + hint.Position, + ImmutableArray.Create(new SymbolDisplayPart(SymbolDisplayPartKind.Text, hint.Parameter, hint.Parameter.Name + ":")), + hint.Parameter.GetSymbolKey(cancellationToken))); + } } } } diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs index 2e75b46c7e905..6d421a022b9e5 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs @@ -26,7 +26,7 @@ protected abstract (ITypeSymbol type, int position)? TryGetTypeHint( bool forLambdaParameterTypes, CancellationToken cancellationToken); - public async Task> GetInlineTypeHintsAsync( + public async Task> GetInlineHintsAsync( Document document, TextSpan textSpan, CancellationToken cancellationToken) { var options = await document.GetOptionsAsync(cancellationToken).ConfigureAwait(false); @@ -34,18 +34,18 @@ public async Task> GetInlineTypeHintsAsync( var displayAllOverride = options.GetOption(InlineHintsOptions.DisplayAllOverride); var enabledForTypes = displayAllOverride || options.GetOption(InlineHintsOptions.EnabledForTypes); if (!enabledForTypes) - return ImmutableArray.Empty; + return ImmutableArray.Empty; var forImplicitVariableTypes = displayAllOverride || options.GetOption(InlineHintsOptions.ForImplicitVariableTypes); var forLambdaParameterTypes = displayAllOverride || options.GetOption(InlineHintsOptions.ForLambdaParameterTypes); if (!forImplicitVariableTypes && !forLambdaParameterTypes) - return ImmutableArray.Empty; + return ImmutableArray.Empty; var anonymousTypeService = document.GetRequiredLanguageService(); var root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); - using var _1 = ArrayBuilder.GetInstance(out var result); + using var _1 = ArrayBuilder.GetInstance(out var result); foreach (var node in root.DescendantNodes(n => n.Span.IntersectsWith(textSpan))) { @@ -62,7 +62,7 @@ public async Task> GetInlineTypeHintsAsync( var parts = type.ToDisplayParts(s_minimalTypeStyle); AddParts(anonymousTypeService, finalParts, parts, semanticModel, position); - result.Add(new InlineTypeHint(position, finalParts.ToImmutable(), type.GetSymbolKey(cancellationToken))); + result.Add(new InlineHint(position, finalParts.ToImmutable(), type.GetSymbolKey(cancellationToken))); } return result.ToImmutable(); diff --git a/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs b/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs index 58083b276ef4d..b94f7d6e7e5b3 100644 --- a/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs @@ -12,6 +12,6 @@ namespace Microsoft.CodeAnalysis.InlineHints { internal interface IInlineParameterNameHintsService : ILanguageService { - Task> GetInlineParameterNameHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken); + Task> GetInlineHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken); } } diff --git a/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs b/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs index cf43cc1956d60..3860b4dca4ba5 100644 --- a/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs @@ -12,6 +12,6 @@ namespace Microsoft.CodeAnalysis.InlineHints { internal interface IInlineTypeHintsService : ILanguageService { - Task> GetInlineTypeHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken); + Task> GetInlineHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken); } } diff --git a/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs b/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs index 7e37d9ca1640f..1278c945b5229 100644 --- a/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs +++ b/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs @@ -6,13 +6,13 @@ namespace Microsoft.CodeAnalysis.InlineHints { - internal readonly struct InlineTypeHint + internal readonly struct InlineHint { public readonly int Position; public readonly ImmutableArray Parts; - public readonly SymbolKey SymbolKey; + public readonly SymbolKey? SymbolKey; - public InlineTypeHint(int position, ImmutableArray parts, SymbolKey symbolKey) + public InlineHint(int position, ImmutableArray parts, SymbolKey? symbolKey) { Position = position; Parts = parts; From 8232d949a2ac8374e20dc09abc000a77cdaa935a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 12:11:40 -0700 Subject: [PATCH 23/68] Cleanup --- .../CSharpInlineParameterNameHintsService.cs | 32 ++++----- ...AbstractInlineParameterNameHintsService.cs | 65 +++++++++++-------- .../InlineHints/InlineParameterHint.cs | 23 ------- .../InlineHints/InlineParameterHintKind.cs | 13 ---- ...ualBasicInlineParameterNameHintsService.vb | 15 ++--- 5 files changed, 60 insertions(+), 88 deletions(-) delete mode 100644 src/Features/Core/Portable/InlineHints/InlineParameterHint.cs delete mode 100644 src/Features/Core/Portable/InlineHints/InlineParameterHintKind.cs diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineParameterNameHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineParameterNameHintsService.cs index 78d12b863157a..6221036b5fb08 100644 --- a/src/Features/CSharp/Portable/InlineHints/CSharpInlineParameterNameHintsService.cs +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineParameterNameHintsService.cs @@ -29,7 +29,7 @@ public CSharpInlineParameterNameHintsService() protected override void AddAllParameterNameHintLocations( SemanticModel semanticModel, SyntaxNode node, - ArrayBuilder buffer, + ArrayBuilder<(int position, IParameterSymbol? parameter, HintKind kind)> buffer, CancellationToken cancellationToken) { if (node is BaseArgumentListSyntax argumentList) @@ -42,7 +42,11 @@ protected override void AddAllParameterNameHintLocations( } } - private static void AddArguments(SemanticModel semanticModel, ArrayBuilder buffer, AttributeArgumentListSyntax argumentList, CancellationToken cancellationToken) + private static void AddArguments( + SemanticModel semanticModel, + ArrayBuilder<(int position, IParameterSymbol? parameter, HintKind kind)> buffer, + AttributeArgumentListSyntax argumentList, + CancellationToken cancellationToken) { foreach (var argument in argumentList.Arguments) { @@ -50,14 +54,15 @@ private static void AddArguments(SemanticModel semanticModel, ArrayBuilder buffer, BaseArgumentListSyntax argumentList, CancellationToken cancellationToken) + private static void AddArguments( + SemanticModel semanticModel, + ArrayBuilder<(int position, IParameterSymbol? parameter, HintKind kind)> buffer, + BaseArgumentListSyntax argumentList, + CancellationToken cancellationToken) { foreach (var argument in argumentList.Arguments) { @@ -65,21 +70,18 @@ private static void AddArguments(SemanticModel semanticModel, ArrayBuilder arg switch { - LiteralExpressionSyntax or InterpolatedStringExpressionSyntax => InlineParameterHintKind.Literal, - ObjectCreationExpressionSyntax => InlineParameterHintKind.ObjectCreation, + LiteralExpressionSyntax or InterpolatedStringExpressionSyntax => HintKind.Literal, + ObjectCreationExpressionSyntax => HintKind.ObjectCreation, CastExpressionSyntax cast => GetKind(cast.Expression), PrefixUnaryExpressionSyntax prefix => GetKind(prefix.Operand), - _ => InlineParameterHintKind.Other, + _ => HintKind.Other, }; } } diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs index 98cebfb49dec7..95c6e6288a53a 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs @@ -15,10 +15,17 @@ namespace Microsoft.CodeAnalysis.InlineHints { internal abstract class AbstractInlineParameterNameHintsService : IInlineParameterNameHintsService { + protected enum HintKind + { + Literal, + ObjectCreation, + Other + } + protected abstract void AddAllParameterNameHintLocations( SemanticModel semanticModel, SyntaxNode node, - ArrayBuilder buffer, + ArrayBuilder<(int position, IParameterSymbol? parameter, HintKind kind)> buffer, CancellationToken cancellationToken); public async Task> GetInlineHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken) @@ -44,7 +51,7 @@ public async Task> GetInlineHintsAsync(Document docum var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); using var _1 = ArrayBuilder.GetInstance(out var result); - using var _2 = ArrayBuilder.GetInstance(out var buffer); + using var _2 = ArrayBuilder<(int position, IParameterSymbol? parameter, HintKind kind)>.GetInstance(out var buffer); foreach (var node in root.DescendantNodes(textSpan, n => n.Span.IntersectsWith(textSpan))) { @@ -65,26 +72,27 @@ void AddHintsIfAppropriate() if (suppressForParametersThatDifferOnlyBySuffix && ParametersDifferOnlyBySuffix(buffer)) return; - foreach (var hint in buffer) + foreach (var (position, parameter, kind) in buffer) { - if (string.IsNullOrEmpty(hint.Parameter?.Name)) + if (string.IsNullOrEmpty(parameter?.Name)) continue; - if (suppressForParametersThatMatchMethodIntent && MatchesMethodIntent(hint)) + if (suppressForParametersThatMatchMethodIntent && MatchesMethodIntent(parameter)) continue; - if (HintMatches(hint, literalParameters, objectCreationParameters, otherParameters)) + if (HintMatches(kind, literalParameters, objectCreationParameters, otherParameters)) { result.Add(new InlineHint( - hint.Position, - ImmutableArray.Create(new SymbolDisplayPart(SymbolDisplayPartKind.Text, hint.Parameter, hint.Parameter.Name + ":")), - hint.Parameter.GetSymbolKey(cancellationToken))); + position, + ImmutableArray.Create(new SymbolDisplayPart(SymbolDisplayPartKind.Text, parameter, parameter.Name + ":")), + parameter.GetSymbolKey(cancellationToken))); } } } } - private static bool ParametersDifferOnlyBySuffix(ArrayBuilder parameterHints) + private static bool ParametersDifferOnlyBySuffix( + ArrayBuilder<(int position, IParameterSymbol? parameter, HintKind kind)> parameterHints) { // Only relevant if we have two or more parameters. if (parameterHints.Count <= 1) @@ -93,14 +101,15 @@ private static bool ParametersDifferOnlyBySuffix(ArrayBuilder parameterHints) + static bool ParametersDifferOnlyByAlphaSuffix( + ArrayBuilder<(int position, IParameterSymbol? parameter, HintKind kind)> parameterHints) { - if (!HasAlphaSuffix(parameterHints[0], out var firstPrefix)) + if (!HasAlphaSuffix(parameterHints[0].parameter, out var firstPrefix)) return false; for (var i = 1; i < parameterHints.Count; i++) { - if (!HasAlphaSuffix(parameterHints[i], out var nextPrefix)) + if (!HasAlphaSuffix(parameterHints[i].parameter, out var nextPrefix)) return false; if (!firstPrefix.Span.Equals(nextPrefix.Span, StringComparison.Ordinal)) @@ -110,14 +119,15 @@ static bool ParametersDifferOnlyByAlphaSuffix(ArrayBuilder return true; } - static bool ParametersDifferOnlyByNumericSuffix(ArrayBuilder parameterHints) + static bool ParametersDifferOnlyByNumericSuffix( + ArrayBuilder<(int position, IParameterSymbol? parameter, HintKind kind)> parameterHints) { - if (!HasNumericSuffix(parameterHints[0], out var firstPrefix)) + if (!HasNumericSuffix(parameterHints[0].parameter, out var firstPrefix)) return false; for (var i = 1; i < parameterHints.Count; i++) { - if (!HasNumericSuffix(parameterHints[i], out var nextPrefix)) + if (!HasNumericSuffix(parameterHints[i].parameter, out var nextPrefix)) return false; if (!firstPrefix.Span.Equals(nextPrefix.Span, StringComparison.Ordinal)) @@ -127,9 +137,9 @@ static bool ParametersDifferOnlyByNumericSuffix(ArrayBuilder prefix) + static bool HasAlphaSuffix(IParameterSymbol? parameter, out ReadOnlyMemory prefix) { - var name = hint.Parameter?.Name; + var name = parameter?.Name; // Has to end with A-Z // That A-Z can't be following another A-Z (that's just a capitalized word). @@ -145,9 +155,9 @@ static bool HasAlphaSuffix(InlineParameterHint hint, out ReadOnlyMemory pr return false; } - static bool HasNumericSuffix(InlineParameterHint hint, out ReadOnlyMemory prefix) + static bool HasNumericSuffix(IParameterSymbol? parameter, out ReadOnlyMemory prefix) { - var name = hint.Parameter?.Name; + var name = parameter?.Name; // Has to end with 0-9. only handles single-digit numeric suffix for now for simplicity if (name?.Length >= 2 && @@ -168,22 +178,21 @@ static bool IsNumeric(char c) => c is >= '0' and <= '9'; } - private static bool HintMatches(InlineParameterHint hint, bool literalParameters, bool objectCreationParameters, bool otherParameters) - => hint.Kind switch + private static bool HintMatches(HintKind kind, bool literalParameters, bool objectCreationParameters, bool otherParameters) + => kind switch { - InlineParameterHintKind.Literal => literalParameters, - InlineParameterHintKind.ObjectCreation => objectCreationParameters, - InlineParameterHintKind.Other => otherParameters, - _ => throw ExceptionUtilities.UnexpectedValue(hint.Kind), + HintKind.Literal => literalParameters, + HintKind.ObjectCreation => objectCreationParameters, + HintKind.Other => otherParameters, + _ => throw ExceptionUtilities.UnexpectedValue(kind), }; - protected static bool MatchesMethodIntent(InlineParameterHint hint) + protected static bool MatchesMethodIntent(IParameterSymbol? parameter) { // Methods like `SetColor(color: "y")` `FromResult(result: "x")` `Enable/DisablePolling(bool)` don't need // parameter names to improve clarity. The parameter is clear from the context of the method name. // First, this only applies to methods (as we're looking at the method name itself) so filter down to those. - var parameter = hint.Parameter; if (parameter is not { ContainingSymbol: IMethodSymbol { MethodKind: MethodKind.Ordinary } method }) return false; diff --git a/src/Features/Core/Portable/InlineHints/InlineParameterHint.cs b/src/Features/Core/Portable/InlineHints/InlineParameterHint.cs deleted file mode 100644 index 92f9dec88bf06..0000000000000 --- a/src/Features/Core/Portable/InlineHints/InlineParameterHint.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -namespace Microsoft.CodeAnalysis.InlineHints -{ - internal readonly struct InlineParameterHint - { - public readonly IParameterSymbol? Parameter; - public readonly int Position; - public readonly InlineParameterHintKind Kind; - - public InlineParameterHint( - IParameterSymbol? parameter, - int position, - InlineParameterHintKind kind) - { - Parameter = parameter; - Position = position; - Kind = kind; - } - } -} diff --git a/src/Features/Core/Portable/InlineHints/InlineParameterHintKind.cs b/src/Features/Core/Portable/InlineHints/InlineParameterHintKind.cs deleted file mode 100644 index 2c6f5bbadf674..0000000000000 --- a/src/Features/Core/Portable/InlineHints/InlineParameterHintKind.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -namespace Microsoft.CodeAnalysis.InlineHints -{ - internal enum InlineParameterHintKind - { - Literal, - ObjectCreation, - Other - } -} diff --git a/src/Features/VisualBasic/Portable/InlineParameterNameHints/VisualBasicInlineParameterNameHintsService.vb b/src/Features/VisualBasic/Portable/InlineParameterNameHints/VisualBasicInlineParameterNameHintsService.vb index 598773234cb78..890cf1b0e9d03 100644 --- a/src/Features/VisualBasic/Portable/InlineParameterNameHints/VisualBasicInlineParameterNameHintsService.vb +++ b/src/Features/VisualBasic/Portable/InlineParameterNameHints/VisualBasicInlineParameterNameHintsService.vb @@ -22,7 +22,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.InlineParameterNameHints Protected Overrides Sub AddAllParameterNameHintLocations( semanticModel As SemanticModel, node As SyntaxNode, - buffer As ArrayBuilder(Of InlineParameterHint), + buffer As ArrayBuilder(Of (position As Integer, parameter As IParameterSymbol, kind As HintKind)), cancellationToken As CancellationToken) Dim argumentList = TryCast(node, ArgumentListSyntax) @@ -49,21 +49,18 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.InlineParameterNameHints Continue For End If - buffer.Add(New InlineParameterHint( - parameter, - argument.Span.Start, - GetKind(argument.Expression))) + buffer.Add((argument.Span.Start, parameter, GetKind(argument.Expression))) Next End Sub - Private Function GetKind(arg As ExpressionSyntax) As InlineParameterHintKind + Private Function GetKind(arg As ExpressionSyntax) As HintKind If TypeOf arg Is LiteralExpressionSyntax OrElse TypeOf arg Is InterpolatedStringExpressionSyntax Then - Return InlineParameterHintKind.Literal + Return HintKind.Literal End If If TypeOf arg Is ObjectCreationExpressionSyntax Then - Return InlineParameterHintKind.ObjectCreation + Return HintKind.ObjectCreation End If Dim predefinedCast = TryCast(arg, PredefinedCastExpressionSyntax) @@ -87,7 +84,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.InlineParameterNameHints Return GetKind(unary.Operand) End If - Return InlineParameterHintKind.Other + Return HintKind.Other End Function End Class End Namespace From a6bb158994fcffb87dff4a0ab374e78ee7980a0c Mon Sep 17 00:00:00 2001 From: Youssef Victor Date: Thu, 8 Oct 2020 19:22:46 +0000 Subject: [PATCH 24/68] Fix graph query for records --- Roslyn.sln | 4 ++++ .../Impl/Progression/CSharpProgressionLanguageService.cs | 1 + .../Core/Test/Progression/ContainsGraphQueryTests.vb | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/Roslyn.sln b/Roslyn.sln index 7150215f42caf..abe1a82b59ef5 100644 --- a/Roslyn.sln +++ b/Roslyn.sln @@ -1880,8 +1880,12 @@ Global {2801F82B-78CE-4BAE-B06F-537574751E2E}.Release|x86.Build.0 = Release|x86 {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|x86.ActiveCfg = Debug|Any CPU + {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|x86.Build.0 = Debug|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|Any CPU.ActiveCfg = Release|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|Any CPU.Build.0 = Release|Any CPU + {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|x86.ActiveCfg = Release|Any CPU + {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/VisualStudio/CSharp/Impl/Progression/CSharpProgressionLanguageService.cs b/src/VisualStudio/CSharp/Impl/Progression/CSharpProgressionLanguageService.cs index d5118e2c6156f..563dbc5fc85dd 100644 --- a/src/VisualStudio/CSharp/Impl/Progression/CSharpProgressionLanguageService.cs +++ b/src/VisualStudio/CSharp/Impl/Progression/CSharpProgressionLanguageService.cs @@ -67,6 +67,7 @@ public IEnumerable GetTopLevelNodesFromDocument(SyntaxNode root, Can if (!cancellationToken.IsCancellationRequested) { if (node.Kind() == SyntaxKind.ClassDeclaration || + node.Kind() == SyntaxKind.RecordDeclaration || node.Kind() == SyntaxKind.DelegateDeclaration || node.Kind() == SyntaxKind.EnumDeclaration || node.Kind() == SyntaxKind.InterfaceDeclaration || diff --git a/src/VisualStudio/Core/Test/Progression/ContainsGraphQueryTests.vb b/src/VisualStudio/Core/Test/Progression/ContainsGraphQueryTests.vb index 39a8085cb86cc..6c84ddc7fe5c8 100644 --- a/src/VisualStudio/Core/Test/Progression/ContainsGraphQueryTests.vb +++ b/src/VisualStudio/Core/Test/Progression/ContainsGraphQueryTests.vb @@ -21,6 +21,8 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Progression enum E { } interface I { } struct S { } + record R1 { } + record R2; ) @@ -36,12 +38,16 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Progression + + + + From bbf1c0d9cadb4a2bf60575426fd3f06d3a40e1ad Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Thu, 8 Oct 2020 13:50:43 -0700 Subject: [PATCH 25/68] Get the current VS ThemeID without using dynamic --- .../ColorSchemes/ColorSchemeApplier.cs | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/VisualStudio/Core/Def/Implementation/ColorSchemes/ColorSchemeApplier.cs b/src/VisualStudio/Core/Def/Implementation/ColorSchemes/ColorSchemeApplier.cs index 8c2d5dd552f7c..60e44130ce7cd 100644 --- a/src/VisualStudio/Core/Def/Implementation/ColorSchemes/ColorSchemeApplier.cs +++ b/src/VisualStudio/Core/Def/Implementation/ColorSchemes/ColorSchemeApplier.cs @@ -8,6 +8,7 @@ using System.Collections.Immutable; using System.ComponentModel; using System.ComponentModel.Composition; +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.InteropServices; @@ -29,6 +30,9 @@ namespace Microsoft.VisualStudio.LanguageServices.ColorSchemes [Export(typeof(ColorSchemeApplier))] internal sealed partial class ColorSchemeApplier : ForegroundThreadAffinitizedObject, IDisposable { + private const string ColorThemeValueName = "Microsoft.VisualStudio.ColorTheme"; + private const string ColorThemeNewValueName = "Microsoft.VisualStudio.ColorThemeNew"; + private readonly IServiceProvider _serviceProvider; private readonly ColorSchemeSettings _settings; private readonly ClassificationVerifier _classificationVerifier; @@ -168,14 +172,21 @@ public Guid GetThemeId() { AssertIsForeground(); - dynamic colorThemeService = _serviceProvider.GetService(typeof(SVsColorThemeService)); - return (Guid)colorThemeService.CurrentTheme.ThemeId; - } + var settingsManager = (ISettingsManager)_serviceProvider.GetService(typeof(SVsSettingsPersistenceManager)); - // NOTE: This service is not public or intended for use by teams/individuals outside of Microsoft. Any data stored is subject to deletion without warning. - [Guid("0d915b59-2ed7-472a-9de8-9161737ea1c5")] - private interface SVsColorThemeService - { + // Look up the value from the new roamed theme property first + // Fallback to the original roamed theme property if that fails + var currentThemeString = settingsManager.GetValueOrDefault(ColorThemeNewValueName, defaultValue: null) ?? + settingsManager.GetValueOrDefault(ColorThemeValueName, defaultValue: null); + + if (currentThemeString is null) + { + // The ColorTheme setting is unpopulated when it has never been changed from its default. + // The default VS ColorTheme is Blue + return KnownColorThemes.Blue; + } + + return Guid.Parse(currentThemeString); } // NOTE: This service is not public or intended for use by teams/individuals outside of Microsoft. Any data stored is subject to deletion without warning. From 07a0268e550012306fc8c4a2c1228c20cddaf74a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 14:09:30 -0700 Subject: [PATCH 26/68] Fixup colors --- src/VisualStudio/CSharp/Impl/VSPackage.resx | 2 +- src/VisualStudio/CSharp/Impl/xlf/VSPackage.cs.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.de.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.es.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.fr.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.it.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.ja.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.ko.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.pl.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.pt-BR.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.ru.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.tr.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.zh-Hans.xlf | 4 ++-- src/VisualStudio/CSharp/Impl/xlf/VSPackage.zh-Hant.xlf | 4 ++-- .../Core/Def/ColorSchemes/VisualStudio2017.xml | 10 +++++----- src/VisualStudio/VisualBasic/Impl/VSPackage.resx | 2 +- src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.cs.xlf | 4 ++-- src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.de.xlf | 4 ++-- src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.es.xlf | 4 ++-- src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.fr.xlf | 4 ++-- src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.it.xlf | 4 ++-- src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ja.xlf | 4 ++-- src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ko.xlf | 4 ++-- src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.pl.xlf | 4 ++-- .../VisualBasic/Impl/xlf/VSPackage.pt-BR.xlf | 4 ++-- src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ru.xlf | 4 ++-- src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.tr.xlf | 4 ++-- .../VisualBasic/Impl/xlf/VSPackage.zh-Hans.xlf | 4 ++-- .../VisualBasic/Impl/xlf/VSPackage.zh-Hant.xlf | 4 ++-- 29 files changed, 59 insertions(+), 59 deletions(-) diff --git a/src/VisualStudio/CSharp/Impl/VSPackage.resx b/src/VisualStudio/CSharp/Impl/VSPackage.resx index 767f94073b7db..0bb32ed9bbe78 100644 --- a/src/VisualStudio/CSharp/Impl/VSPackage.resx +++ b/src/VisualStudio/CSharp/Impl/VSPackage.resx @@ -142,7 +142,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.cs.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.cs.xlf index 74ce3633e9e8c..83163b35b7f88 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.cs.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.cs.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Zobrazovat nápovědy k názvům vložených parametrů; + Zobrazovat nápovědy k názvům vložených parametrů; Zobrazit diagnostiku pro zavřené soubory; Vybarvit regulární výraz; Zvýrazňovat související komponenty pod kurzorem; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.de.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.de.xlf index 7f9178b71e27c..9d0849c20149b 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.de.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.de.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.es.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.es.xlf index 8371ae8aef1ef..e6ea6e5edbd9a 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.es.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.es.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.fr.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.fr.xlf index c9c101eb44b46..8c5d2a7686a42 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.fr.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.fr.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.it.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.it.xlf index bf77c0bf61970..37870cd22824e 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.it.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.it.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ja.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ja.xlf index 6c8ecb99018ee..7d6a85e7ada9f 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ja.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ja.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ko.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ko.xlf index b4bf57da9b48f..6cc8a8443bfa1 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ko.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ko.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.pl.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.pl.xlf index 1af6e24183bda..4ec9e1473f742 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.pl.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.pl.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.pt-BR.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.pt-BR.xlf index 02dadfacae528..ef6768e3c6900 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.pt-BR.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.pt-BR.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ru.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ru.xlf index ce94ad6bf4864..c4e1d0e8930b3 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ru.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.ru.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.tr.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.tr.xlf index 99dd88e2d332b..98f51608bf14b 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.tr.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.tr.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.zh-Hans.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.zh-Hans.xlf index 1ff009d5a91f1..cdef2b2edd32c 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.zh-Hans.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.zh-Hans.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - 显示内联参数名称提示; + 显示内联参数名称提示; 显示对已关闭文件的诊断; 对正则表达式着色; 突出显示游标下的相关组件; diff --git a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.zh-Hant.xlf b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.zh-Hant.xlf index b230082a731cf..82fe530845fde 100644 --- a/src/VisualStudio/CSharp/Impl/xlf/VSPackage.zh-Hant.xlf +++ b/src/VisualStudio/CSharp/Impl/xlf/VSPackage.zh-Hant.xlf @@ -33,7 +33,7 @@ "C#" node help text in profile Import/Export. - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; @@ -81,7 +81,7 @@ regex; regular expression; Use enhanced colors; Editor Color Scheme; - Display inline parameter name hints; + Display inline hints; Show diagnostics for closed files; Colorize regular expression; Highlight related components under cursor; diff --git a/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml b/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml index a0b2568e93983..2945143d58c88 100644 --- a/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml +++ b/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml @@ -63,7 +63,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -373,7 +373,7 @@ - + @@ -528,7 +528,7 @@ - + @@ -697,7 +697,7 @@ - + diff --git a/src/VisualStudio/VisualBasic/Impl/VSPackage.resx b/src/VisualStudio/VisualBasic/Impl/VSPackage.resx index cbe26d88d7cca..fcb7042ca007c 100644 --- a/src/VisualStudio/VisualBasic/Impl/VSPackage.resx +++ b/src/VisualStudio/VisualBasic/Impl/VSPackage.resx @@ -128,7 +128,7 @@ Visual Basic Editor - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.cs.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.cs.xlf index a7f9fc11aba01..8fa341ccfeaf9 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.cs.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.cs.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Zobrazovat nápovědy k názvům vložených parametrů;Automatické vložení koncových konstruktorů;Změnit nastavení přehledného výpisu;Změnit režim sbalení;Automatické vkládání členů Interface a MustOverride;Zobrazit nebo skrýt oddělovače řádků procedur;Zapnout nebo vypnout návrhy oprav;Zapnout nebo vypnout zvýrazňování odkazů a klíčových slov;Regex;Obarvit regulární výrazy;Zvýrazňovat související komponenty pod kurzorem;Nahlásit neplatné regulární výrazy;reg. výr.;regulární výraz;Používat rozšířené barvy;Barevné schéma editoru; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Zobrazovat nápovědy k názvům vložených parametrů;Automatické vložení koncových konstruktorů;Změnit nastavení přehledného výpisu;Změnit režim sbalení;Automatické vkládání členů Interface a MustOverride;Zobrazit nebo skrýt oddělovače řádků procedur;Zapnout nebo vypnout návrhy oprav;Zapnout nebo vypnout zvýrazňování odkazů a klíčových slov;Regex;Obarvit regulární výrazy;Zvýrazňovat související komponenty pod kurzorem;Nahlásit neplatné regulární výrazy;reg. výr.;regulární výraz;Používat rozšířené barvy;Barevné schéma editoru; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.de.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.de.xlf index ba869a31cd9aa..4f5b1f92cf7ab 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.de.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.de.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.es.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.es.xlf index 6a1f9d27d820b..0710c804d622e 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.es.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.es.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.fr.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.fr.xlf index 9eb69b129f2e5..eec726572e906 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.fr.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.fr.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.it.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.it.xlf index e35382f914f14..39ace602d6674 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.it.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.it.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ja.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ja.xlf index 29744b9181139..ee623db1f5ba1 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ja.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ja.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ko.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ko.xlf index 401af72647b04..27718e45189f3 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ko.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ko.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.pl.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.pl.xlf index dc251dd07694b..e4867ebc0ec0b 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.pl.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.pl.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.pt-BR.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.pt-BR.xlf index a1444e19554fe..fe122bfcf8c84 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.pt-BR.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.pt-BR.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ru.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ru.xlf index d70f2d52f0cc6..93f35c9239f93 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ru.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.ru.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.tr.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.tr.xlf index 80554fdd07888..41ac1587168d3 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.tr.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.tr.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.zh-Hans.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.zh-Hans.xlf index f61fcc1477cdb..8666a8099d652 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.zh-Hans.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.zh-Hans.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - 显示内联参数名称提示;自动插入 End 构造;更改整齐排列设置;更改大纲模式;自动插入 Interface 和 MustOverride 成员;显示或隐藏过程行分隔符;打开或关闭错误纠正建议;打开或关闭引用和关键字的突出显示;正则表达式;对正则表达式着色;突出显示光标下的相关部分;报告无效正则表达式;regex;正则表达式;使用增强色;编辑器配色方案; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + 显示内联参数名称提示;自动插入 End 构造;更改整齐排列设置;更改大纲模式;自动插入 Interface 和 MustOverride 成员;显示或隐藏过程行分隔符;打开或关闭错误纠正建议;打开或关闭引用和关键字的突出显示;正则表达式;对正则表达式着色;突出显示光标下的相关部分;报告无效正则表达式;regex;正则表达式;使用增强色;编辑器配色方案; Advanced options page keywords diff --git a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.zh-Hant.xlf b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.zh-Hant.xlf index f26086ccac5cb..8aa6fe3ca5148 100644 --- a/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.zh-Hant.xlf +++ b/src/VisualStudio/VisualBasic/Impl/xlf/VSPackage.zh-Hant.xlf @@ -18,8 +18,8 @@ - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; - Display inline parameter name hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; + Display inline hints;Automatic insertion of end constructs;Change pretty listing settings;Change outlining mode;Automatic insertion of Interface and MustOverride members;Show or hide procedure line separators;Turn error correction suggestions on or off;Turn highlighting of references and keywords on or off;Regex;Colorize regular expressions;Highlight related components under cursor;Report invalid regular expressions;regex;regular expression;Use enhanced colors;Editor Color Scheme; Advanced options page keywords From ce3d8505afd5c78dbc1b1ee4c314e4742c766e02 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 14:21:40 -0700 Subject: [PATCH 27/68] Tweak display --- .../Core.Wpf/InlineHints/InlineHintsTag.cs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs index bc9ca2294bbad..e0bab58ac76ea 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs @@ -161,8 +161,6 @@ private static FrameworkElement CreateElement( // to make the text seem more balanced in the border Padding = new Thickness(left: 1, top: 0, right: right, bottom: 0), VerticalAlignment = VerticalAlignment.Center, - - // Text = parts.ToTaggedText().ToVisibleDisplayString(includeLeftToRightMarker: true), }; var taggedTexts = parts.ToTaggedText(); @@ -173,11 +171,9 @@ private static FrameworkElement CreateElement( if (classify && taggedText.Tag != TextTags.Text) { var properties = formatMap.GetTextProperties(typeMap.GetClassificationType(taggedText.Tag.ToClassificationTypeName())); - run.Foreground = properties.ForegroundBrush; - } - else - { - run.Foreground = format.ForegroundBrush; + var brush = properties.ForegroundBrush.Clone(); + brush.Opacity = 0.8; + run.Foreground = brush; } block.Inlines.Add(run); From 0698634371565965e4b6bdbb3cc2339461ae3d7c Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 14:40:13 -0700 Subject: [PATCH 28/68] Replace var in place --- .../Core.Wpf/InlineHints/InlineHintsTagger.cs | 3 +-- .../InlineHints/InlineHintsDataTaggerProvider.cs | 5 +++-- .../InlineHints/CSharpInlineTypeHintsService.cs | 16 +++++++++++----- .../AbstractInlineParameterNameHintsService.cs | 2 +- .../AbstractInlineTypeHintsService.cs | 13 ++++++++----- .../Core/Portable/InlineHints/InlineTypeHint.cs | 7 ++++--- 6 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs index 4bff3c6e8eb41..998031077ae7c 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs @@ -133,11 +133,10 @@ public IEnumerable> GetTags(NormalizedSnapshotSp if (dataTagSpans.Count == 1) { var dataTagSpan = dataTagSpans[0]; - var parameterHintSnapshotSpan = new SnapshotSpan(dataTagSpan.Start, 0); var parameterHintUITag = InlineHintsTag.Create( textTag.Parts, Format, _textView, dataTagSpan, textTag.SymbolKey, _taggerProvider, _formatMap, classify); - _cache.Add(new TagSpan(parameterHintSnapshotSpan, parameterHintUITag)); + _cache.Add(new TagSpan(dataTagSpan, parameterHintUITag)); } } } diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs index 47a4ef5454e30..acea7da202f09 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs @@ -16,6 +16,7 @@ using Microsoft.CodeAnalysis.InlineHints; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Shared.TestHooks; +using Microsoft.CodeAnalysis.Text.Shared.Extensions; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Editor; using Microsoft.VisualStudio.Text.Tagging; @@ -100,7 +101,7 @@ private static async Task AddTypeHintsAsync(TaggerContext con foreach (var hint in hints) { context.AddTag(new TagSpan( - new SnapshotSpan(snapshotSpan.Snapshot, hint.Position, 0), + new SnapshotSpan(snapshotSpan.Snapshot, hint.Span.ToSpan()), new InlineHintDataTag(hint.Parts, hint.SymbolKey))); } } @@ -118,7 +119,7 @@ private static async Task AddParameterNameHintsAsync(TaggerContext( - new SnapshotSpan(snapshotSpan.Snapshot, hint.Position, 0), + new SnapshotSpan(snapshotSpan.Snapshot, hint.Span.ToSpan()), new InlineHintDataTag(hint.Parts, hint.SymbolKey))); } } diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs index 11f534bbdc3ba..f308b6f44bef5 100644 --- a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs @@ -9,6 +9,7 @@ using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Host.Mef; using Microsoft.CodeAnalysis.InlineHints; +using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.CSharp.InlineHints { @@ -21,9 +22,10 @@ public CSharpInlineTypeHintsService() { } - protected override (ITypeSymbol type, int position)? TryGetTypeHint( + protected override (ITypeSymbol type, TextSpan span)? TryGetTypeHint( SemanticModel semanticModel, SyntaxNode node, + bool displayAllOverride, bool forImplicitVariableTypes, bool forLambdaParameterTypes, CancellationToken cancellationToken) @@ -37,14 +39,18 @@ protected override (ITypeSymbol type, int position)? TryGetTypeHint( { var type = semanticModel.GetTypeInfo(variableDeclaration.Type, cancellationToken).Type; if (IsValidType(type)) - return (type, variableDeclaration.Variables[0].Identifier.SpanStart); + return (type, displayAllOverride ? variableDeclaration.Type.Span : new TextSpan(variableDeclaration.Variables[0].Identifier.SpanStart, 0)); } else if (node is SingleVariableDesignationSyntax { Parent: not DeclarationPatternSyntax } variableDesignation) { var local = semanticModel.GetDeclaredSymbol(variableDesignation, cancellationToken) as ILocalSymbol; var type = local?.Type; if (IsValidType(type)) - return (type, variableDesignation.Identifier.SpanStart); + { + return node.Parent is VarPatternSyntax varPattern && displayAllOverride + ? (type, varPattern.VarKeyword.Span) + : (type, new TextSpan(variableDesignation.Identifier.SpanStart, 0)); + } } else if (node is ForEachStatementSyntax forEachStatement && forEachStatement.Type.IsVar) @@ -52,7 +58,7 @@ protected override (ITypeSymbol type, int position)? TryGetTypeHint( var info = semanticModel.GetForEachStatementInfo(forEachStatement); var type = info.ElementType; if (IsValidType(type)) - return (type, forEachStatement.Identifier.SpanStart); + return (type, displayAllOverride ? forEachStatement.Type.Span : new TextSpan(forEachStatement.Identifier.SpanStart, 0)); } } @@ -64,7 +70,7 @@ protected override (ITypeSymbol type, int position)? TryGetTypeHint( if (parameter?.ContainingSymbol is IMethodSymbol { MethodKind: MethodKind.AnonymousFunction } && IsValidType(parameter?.Type)) { - return (parameter.Type, parameterNode.Identifier.SpanStart); + return (parameter.Type, new TextSpan(parameterNode.Identifier.SpanStart, 0)); } } } diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs index 95c6e6288a53a..0befce3b479f5 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs @@ -83,7 +83,7 @@ void AddHintsIfAppropriate() if (HintMatches(kind, literalParameters, objectCreationParameters, otherParameters)) { result.Add(new InlineHint( - position, + new TextSpan(position, 0), ImmutableArray.Create(new SymbolDisplayPart(SymbolDisplayPartKind.Text, parameter, parameter.Name + ":")), parameter.GetSymbolKey(cancellationToken))); } diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs index 6d421a022b9e5..0b578bfdcb31d 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs @@ -20,8 +20,9 @@ internal abstract class AbstractInlineTypeHintsService : IInlineTypeHintsService genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters, miscellaneousOptions: SymbolDisplayMiscellaneousOptions.AllowDefaultLiteral | SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier | SymbolDisplayMiscellaneousOptions.UseSpecialTypes); - protected abstract (ITypeSymbol type, int position)? TryGetTypeHint( + protected abstract (ITypeSymbol type, TextSpan span)? TryGetTypeHint( SemanticModel semanticModel, SyntaxNode node, + bool displayAllOverride, bool forImplicitVariableTypes, bool forLambdaParameterTypes, CancellationToken cancellationToken); @@ -51,18 +52,20 @@ public async Task> GetInlineHintsAsync( { var hintOpt = TryGetTypeHint( semanticModel, node, + displayAllOverride, forImplicitVariableTypes, - forLambdaParameterTypes, cancellationToken); + forLambdaParameterTypes, + cancellationToken); if (hintOpt == null) continue; - var (type, position) = hintOpt.Value; + var (type, span) = hintOpt.Value; using var _2 = ArrayBuilder.GetInstance(out var finalParts); var parts = type.ToDisplayParts(s_minimalTypeStyle); - AddParts(anonymousTypeService, finalParts, parts, semanticModel, position); - result.Add(new InlineHint(position, finalParts.ToImmutable(), type.GetSymbolKey(cancellationToken))); + AddParts(anonymousTypeService, finalParts, parts, semanticModel, span.Start); + result.Add(new InlineHint(span, finalParts.ToImmutable(), type.GetSymbolKey(cancellationToken))); } return result.ToImmutable(); diff --git a/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs b/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs index 1278c945b5229..c903d49e84d79 100644 --- a/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs +++ b/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs @@ -3,18 +3,19 @@ // See the LICENSE file in the project root for more information. using System.Collections.Immutable; +using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.InlineHints { internal readonly struct InlineHint { - public readonly int Position; + public readonly TextSpan Span; public readonly ImmutableArray Parts; public readonly SymbolKey? SymbolKey; - public InlineHint(int position, ImmutableArray parts, SymbolKey? symbolKey) + public InlineHint(TextSpan span, ImmutableArray parts, SymbolKey? symbolKey) { - Position = position; + Span = span; Parts = parts; SymbolKey = symbolKey; } From ca4a5e69ae17d36bb374becdf3f8d280dfead8ae Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 15:37:19 -0700 Subject: [PATCH 29/68] Replace var in place --- Roslyn.sln | 4 +++ .../Core.Wpf/InlineHints/InlineHintsTag.cs | 10 ++++--- .../CSharpInlineTypeHintsService.cs | 30 +++++++++++++++---- .../AbstractInlineTypeHintsService.cs | 10 +++---- 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/Roslyn.sln b/Roslyn.sln index 7150215f42caf..abe1a82b59ef5 100644 --- a/Roslyn.sln +++ b/Roslyn.sln @@ -1880,8 +1880,12 @@ Global {2801F82B-78CE-4BAE-B06F-537574751E2E}.Release|x86.Build.0 = Release|x86 {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|x86.ActiveCfg = Debug|Any CPU + {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|x86.Build.0 = Debug|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|Any CPU.ActiveCfg = Release|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|Any CPU.Build.0 = Release|Any CPU + {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|x86.ActiveCfg = Release|Any CPU + {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs index e0bab58ac76ea..6287ab10cdc35 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs @@ -83,7 +83,7 @@ public static InlineHintsTag Create( bool classify) { return new InlineHintsTag( - CreateElement(parts, textView, format, formatMap, taggerProvider.TypeMap, classify), + CreateElement(parts, textView, span, format, formatMap, taggerProvider.TypeMap, classify), textView, span, key, taggerProvider); } @@ -142,6 +142,7 @@ public async Task> CreateDescriptionAsync(Cancellati private static FrameworkElement CreateElement( ImmutableArray parts, IWpfTextView textView, + SnapshotSpan span, TextFormattingRunProperties format, IClassificationFormatMap formatMap, ClassificationTypeMap typeMap, @@ -149,7 +150,6 @@ private static FrameworkElement CreateElement( { // Constructs the hint block which gets assigned parameter name and fontstyles according to the options // page. Calculates a font size 1/4 smaller than the font size of the rest of the editor - var right = parts.Last().ToString().EndsWith(":") ? 0 : 1; var block = new TextBlock { FontFamily = format.Typeface.FontFamily, @@ -159,7 +159,7 @@ private static FrameworkElement CreateElement( // Adds a little bit of padding to the left of the text relative to the border // to make the text seem more balanced in the border - Padding = new Thickness(left: 1, top: 0, right: right, bottom: 0), + Padding = new Thickness(left: 1, top: 0, right: 1, bottom: 0), VerticalAlignment = VerticalAlignment.Center, }; @@ -182,6 +182,8 @@ private static FrameworkElement CreateElement( // Encapsulates the textblock within a border. Sets the height of the border to be 3/4 of the original // height. Gets foreground/background colors from the options menu. The margin is the distance from the // adornment to the text and pushing the adornment upwards to create a separation when on a specific line + var right = span.End < span.Snapshot.Length && char.IsWhiteSpace(span.End.GetChar()) ? 0 : 5; + var border = new Border { Background = format.BackgroundBrush, @@ -189,7 +191,7 @@ private static FrameworkElement CreateElement( CornerRadius = new CornerRadius(2), Height = textView.LineHeight - (0.25 * textView.LineHeight), HorizontalAlignment = HorizontalAlignment.Center, - Margin = new Thickness(left: 0, top: -0.20 * textView.LineHeight, right: 5, bottom: 0), + Margin = new Thickness(left: 0, top: -0.20 * textView.LineHeight, right, bottom: 0), Padding = new Thickness(1), // Need to set SnapsToDevicePixels and UseLayoutRounding to avoid unnecessary reformatting diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs index f308b6f44bef5..2c9624ee4915c 100644 --- a/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineTypeHintsService.cs @@ -10,6 +10,7 @@ using Microsoft.CodeAnalysis.Host.Mef; using Microsoft.CodeAnalysis.InlineHints; using Microsoft.CodeAnalysis.Text; +using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.CSharp.InlineHints { @@ -30,7 +31,7 @@ protected override (ITypeSymbol type, TextSpan span)? TryGetTypeHint( bool forLambdaParameterTypes, CancellationToken cancellationToken) { - if (forImplicitVariableTypes) + if (forImplicitVariableTypes || displayAllOverride) { if (node is VariableDeclarationSyntax variableDeclaration && variableDeclaration.Type.IsVar && @@ -39,7 +40,7 @@ protected override (ITypeSymbol type, TextSpan span)? TryGetTypeHint( { var type = semanticModel.GetTypeInfo(variableDeclaration.Type, cancellationToken).Type; if (IsValidType(type)) - return (type, displayAllOverride ? variableDeclaration.Type.Span : new TextSpan(variableDeclaration.Variables[0].Identifier.SpanStart, 0)); + return (type, GetSpan(displayAllOverride, forImplicitVariableTypes, variableDeclaration.Type, variableDeclaration.Variables[0].Identifier)); } else if (node is SingleVariableDesignationSyntax { Parent: not DeclarationPatternSyntax } variableDesignation) { @@ -47,8 +48,8 @@ protected override (ITypeSymbol type, TextSpan span)? TryGetTypeHint( var type = local?.Type; if (IsValidType(type)) { - return node.Parent is VarPatternSyntax varPattern && displayAllOverride - ? (type, varPattern.VarKeyword.Span) + return node.Parent is VarPatternSyntax varPattern + ? (type, GetSpan(displayAllOverride, forImplicitVariableTypes, varPattern.VarKeyword, variableDesignation.Identifier)) : (type, new TextSpan(variableDesignation.Identifier.SpanStart, 0)); } } @@ -58,11 +59,11 @@ protected override (ITypeSymbol type, TextSpan span)? TryGetTypeHint( var info = semanticModel.GetForEachStatementInfo(forEachStatement); var type = info.ElementType; if (IsValidType(type)) - return (type, displayAllOverride ? forEachStatement.Type.Span : new TextSpan(forEachStatement.Identifier.SpanStart, 0)); + return (type, GetSpan(displayAllOverride, forImplicitVariableTypes, forEachStatement.Type, forEachStatement.Identifier)); } } - if (forLambdaParameterTypes) + if (forLambdaParameterTypes || displayAllOverride) { if (node is ParameterSyntax { Type: null } parameterNode) { @@ -78,6 +79,23 @@ protected override (ITypeSymbol type, TextSpan span)? TryGetTypeHint( return null; } + private static TextSpan GetSpan( + bool displayAllOverride, + bool normalOption, + SyntaxNodeOrToken displayAllSpan, + SyntaxNodeOrToken normalSpan) + { + // If we're showing this because the normal option is on, then place the hint prior to the node being marked. + if (normalOption) + return new TextSpan(normalSpan.SpanStart, 0); + + // Otherwise, we're showing because the user explicitly asked to see all hints. In that case, overwrite the + // provided span (i.e. overwrite 'var' with 'int') as this provides a cleaner view while the user is in this + // mode. + Contract.ThrowIfFalse(displayAllOverride); + return displayAllSpan.Span; + } + private static bool IsValidType([NotNullWhen(true)] ITypeSymbol? type) { return type is not null or IErrorTypeSymbol && type.Name != "var"; diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs index 0b578bfdcb31d..4020934e1c4b5 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs @@ -33,13 +33,13 @@ public async Task> GetInlineHintsAsync( var options = await document.GetOptionsAsync(cancellationToken).ConfigureAwait(false); var displayAllOverride = options.GetOption(InlineHintsOptions.DisplayAllOverride); - var enabledForTypes = displayAllOverride || options.GetOption(InlineHintsOptions.EnabledForTypes); - if (!enabledForTypes) + var enabledForTypes = options.GetOption(InlineHintsOptions.EnabledForTypes); + if (!enabledForTypes && !displayAllOverride) return ImmutableArray.Empty; - var forImplicitVariableTypes = displayAllOverride || options.GetOption(InlineHintsOptions.ForImplicitVariableTypes); - var forLambdaParameterTypes = displayAllOverride || options.GetOption(InlineHintsOptions.ForLambdaParameterTypes); - if (!forImplicitVariableTypes && !forLambdaParameterTypes) + var forImplicitVariableTypes = enabledForTypes && options.GetOption(InlineHintsOptions.ForImplicitVariableTypes); + var forLambdaParameterTypes = enabledForTypes && options.GetOption(InlineHintsOptions.ForLambdaParameterTypes); + if (!forImplicitVariableTypes && !forLambdaParameterTypes && !displayAllOverride) return ImmutableArray.Empty; var anonymousTypeService = document.GetRequiredLanguageService(); From a8dd4eb0cf38a3e84458b5fc0624305959f7efb9 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 15:49:46 -0700 Subject: [PATCH 30/68] Update vlaues --- .../Core/Def/ColorSchemes/VisualStudio2017.xml | 2 +- .../Core/Def/ColorSchemes/VisualStudio2019.xml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml b/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml index 2945143d58c88..7b48076a54ba1 100644 --- a/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml +++ b/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml @@ -529,7 +529,7 @@ - + diff --git a/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2019.xml b/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2019.xml index f8cace4c701bf..4bfbd3e9893bb 100644 --- a/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2019.xml +++ b/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2019.xml @@ -69,7 +69,7 @@ - + @@ -230,7 +230,7 @@ - + @@ -391,7 +391,7 @@ - + @@ -552,8 +552,8 @@ - - + + From df953b368cb018dd511bc601f2d6b90c8d25c1b5 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 16:00:05 -0700 Subject: [PATCH 31/68] Don't touch --- src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs index 6287ab10cdc35..34bf85ab3bf6c 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs @@ -172,7 +172,6 @@ private static FrameworkElement CreateElement( { var properties = formatMap.GetTextProperties(typeMap.GetClassificationType(taggedText.Tag.ToClassificationTypeName())); var brush = properties.ForegroundBrush.Clone(); - brush.Opacity = 0.8; run.Foreground = brush; } From ea13ee69fa5caac0ac80dbb29245a4f7c52972c8 Mon Sep 17 00:00:00 2001 From: Youssef Victor <31348972+Youssef1313@users.noreply.github.com> Date: Fri, 9 Oct 2020 01:46:16 +0200 Subject: [PATCH 32/68] Revert Roslyn.sln change --- Roslyn.sln | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Roslyn.sln b/Roslyn.sln index abe1a82b59ef5..7150215f42caf 100644 --- a/Roslyn.sln +++ b/Roslyn.sln @@ -1880,12 +1880,8 @@ Global {2801F82B-78CE-4BAE-B06F-537574751E2E}.Release|x86.Build.0 = Release|x86 {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|x86.ActiveCfg = Debug|Any CPU - {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Debug|x86.Build.0 = Debug|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|Any CPU.ActiveCfg = Release|Any CPU {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|Any CPU.Build.0 = Release|Any CPU - {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|x86.ActiveCfg = Release|Any CPU - {9B25E472-DF94-4E24-9F5D-E487CE5A91FB}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 40c57617307347a77cf6f85b4324b389f7bb046d Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 8 Oct 2020 20:09:16 -0700 Subject: [PATCH 33/68] Update colors --- .../Core.Wpf/InlineHints/InlineHintsFormatDefinition.cs | 4 ++-- src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml | 4 ++-- src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2019.xml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsFormatDefinition.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsFormatDefinition.cs index de151b1710d38..f3e8d3cde7568 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsFormatDefinition.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsFormatDefinition.cs @@ -32,8 +32,8 @@ internal sealed class InlineHintsFormatDefinition : EditorFormatDefinition public InlineHintsFormatDefinition() { this.DisplayName = EditorFeaturesResources.Inline_Hints; - this.ForegroundBrush = Brushes.Black; - this.BackgroundBrush = Brushes.LightGray; + this.ForegroundBrush = new SolidColorBrush(Color.FromRgb(104, 104, 104)); + this.BackgroundBrush = new SolidColorBrush(Color.FromRgb(230, 230, 230)); } } } diff --git a/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml b/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml index 7b48076a54ba1..18e8bd5139c29 100644 --- a/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml +++ b/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2017.xml @@ -529,8 +529,8 @@ - - + + diff --git a/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2019.xml b/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2019.xml index 4bfbd3e9893bb..7525c9bf68ee4 100644 --- a/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2019.xml +++ b/src/VisualStudio/Core/Def/ColorSchemes/VisualStudio2019.xml @@ -553,8 +553,8 @@ - - + + From fd0e161f46d3bdceb26cfab8f49d47174e4e6f5d Mon Sep 17 00:00:00 2001 From: Manish Vasani Date: Fri, 9 Oct 2020 08:30:25 -0700 Subject: [PATCH 34/68] Hook up doc links to IDExxxx rules Fixes #41324 I have also done some additional refactoring to combine `AbstractBuiltInCodeStyleDiagnosticAnalyzer` and `AbstractCodeStyleDiagnosticAnalyzer` into a single type. --- ...eConfusingSuppressionDiagnosticAnalyzer.cs | 5 +++- ...tractBuiltInCodeStyleDiagnosticAnalyzer.cs | 24 +++++++------------ ...uiltInCodeStyleDiagnosticAnalyzer_Core.cs} | 0 .../AbstractCodeStyleDiagnosticAnalyzer.cs | 16 ++++++++----- .../AbstractParenthesesDiagnosticAnalyzer.cs | 11 ++++----- .../Core/Analyzers/Analyzers.projitems | 4 ++-- ...nnecessaryParenthesesDiagnosticAnalyzer.cs | 17 ++++--------- .../Analyzers/AbstractFormattingAnalyzer.cs | 3 ++- 8 files changed, 35 insertions(+), 45 deletions(-) rename src/Analyzers/Core/Analyzers/{AbstractCodeQualityDiagnosticAnalyzer.cs => AbstractBuiltInCodeStyleDiagnosticAnalyzer_Core.cs} (100%) diff --git a/src/Analyzers/CSharp/Analyzers/RemoveConfusingSuppression/CSharpRemoveConfusingSuppressionDiagnosticAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/RemoveConfusingSuppression/CSharpRemoveConfusingSuppressionDiagnosticAnalyzer.cs index e79f777a2d475..0b2c2793c14da 100644 --- a/src/Analyzers/CSharp/Analyzers/RemoveConfusingSuppression/CSharpRemoveConfusingSuppressionDiagnosticAnalyzer.cs +++ b/src/Analyzers/CSharp/Analyzers/RemoveConfusingSuppression/CSharpRemoveConfusingSuppressionDiagnosticAnalyzer.cs @@ -11,15 +11,18 @@ namespace Microsoft.CodeAnalysis.CSharp.RemoveConfusingSuppression { [DiagnosticAnalyzer(LanguageNames.CSharp)] - internal class CSharpRemoveConfusingSuppressionDiagnosticAnalyzer : AbstractCodeStyleDiagnosticAnalyzer + internal sealed class CSharpRemoveConfusingSuppressionDiagnosticAnalyzer : AbstractBuiltInCodeStyleDiagnosticAnalyzer { public CSharpRemoveConfusingSuppressionDiagnosticAnalyzer() : base(IDEDiagnosticIds.RemoveConfusingSuppressionForIsExpressionDiagnosticId, + option: null, new LocalizableResourceString(nameof(CSharpAnalyzersResources.Remove_unnecessary_suppression_operator), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources)), new LocalizableResourceString(nameof(CSharpAnalyzersResources.Suppression_operator_has_no_effect_and_can_be_misinterpreted), CSharpAnalyzersResources.ResourceManager, typeof(CSharpAnalyzersResources))) { } + public override DiagnosticAnalyzerCategory GetAnalyzerCategory() => DiagnosticAnalyzerCategory.SemanticSpanAnalysis; + protected override void InitializeWorker(AnalysisContext context) => context.RegisterSyntaxNodeAction(AnalyzeSyntax, SyntaxKind.IsExpression, SyntaxKind.IsPatternExpression); diff --git a/src/Analyzers/Core/Analyzers/AbstractBuiltInCodeStyleDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/AbstractBuiltInCodeStyleDiagnosticAnalyzer.cs index cbe365ad790b3..aca20279aa343 100644 --- a/src/Analyzers/Core/Analyzers/AbstractBuiltInCodeStyleDiagnosticAnalyzer.cs +++ b/src/Analyzers/Core/Analyzers/AbstractBuiltInCodeStyleDiagnosticAnalyzer.cs @@ -15,7 +15,7 @@ namespace Microsoft.CodeAnalysis.CodeStyle { - internal abstract class AbstractBuiltInCodeStyleDiagnosticAnalyzer : AbstractCodeStyleDiagnosticAnalyzer, IBuiltInAnalyzer + internal abstract partial class AbstractBuiltInCodeStyleDiagnosticAnalyzer { /// /// Constructor for a code style analyzer with a single diagnostic descriptor and @@ -40,7 +40,7 @@ protected AbstractBuiltInCodeStyleDiagnosticAnalyzer( LocalizableString? messageFormat = null, bool isUnnecessary = false, bool configurable = true) - : base(diagnosticId, title, messageFormat, isUnnecessary, configurable) + : this(diagnosticId, title, messageFormat, isUnnecessary, configurable) { AddDiagnosticIdToOptionMapping(diagnosticId, option); } @@ -70,7 +70,7 @@ protected AbstractBuiltInCodeStyleDiagnosticAnalyzer( LocalizableString? messageFormat = null, bool isUnnecessary = false, bool configurable = true) - : base(diagnosticId, title, messageFormat, isUnnecessary, configurable) + : this(diagnosticId, title, messageFormat, isUnnecessary, configurable) { AddDiagnosticIdToOptionMapping(diagnosticId, option, language); } @@ -97,7 +97,7 @@ protected AbstractBuiltInCodeStyleDiagnosticAnalyzer( LocalizableString? messageFormat = null, bool isUnnecessary = false, bool configurable = true) - : base(diagnosticId, title, messageFormat, isUnnecessary, configurable) + : this(diagnosticId, title, messageFormat, isUnnecessary, configurable) { RoslynDebug.Assert(options != null); Debug.Assert(options.Count > 1); @@ -128,7 +128,7 @@ protected AbstractBuiltInCodeStyleDiagnosticAnalyzer( LocalizableString? messageFormat = null, bool isUnnecessary = false, bool configurable = true) - : base(diagnosticId, title, messageFormat, isUnnecessary, configurable) + : this(diagnosticId, title, messageFormat, isUnnecessary, configurable) { RoslynDebug.Assert(options != null); Debug.Assert(options.Count > 1); @@ -139,7 +139,7 @@ protected AbstractBuiltInCodeStyleDiagnosticAnalyzer( /// Constructor for a code style analyzer with a multiple diagnostic descriptors with per-language options that can be used to configure each descriptor. /// protected AbstractBuiltInCodeStyleDiagnosticAnalyzer(ImmutableDictionary supportedDiagnosticsWithOptions) - : base(supportedDiagnosticsWithOptions.Keys.ToImmutableArray()) + : this(supportedDiagnosticsWithOptions.Keys.ToImmutableArray()) { foreach (var kvp in supportedDiagnosticsWithOptions) { @@ -153,7 +153,7 @@ protected AbstractBuiltInCodeStyleDiagnosticAnalyzer(ImmutableDictionary supportedDiagnosticsWithOptions, string language) - : base(supportedDiagnosticsWithOptions.Keys.ToImmutableArray()) + : this(supportedDiagnosticsWithOptions.Keys.ToImmutableArray()) { foreach (var kvp in supportedDiagnosticsWithOptions) { @@ -168,7 +168,7 @@ protected AbstractBuiltInCodeStyleDiagnosticAnalyzer( ImmutableDictionary supportedDiagnosticsWithLangaugeSpecificOptions, ImmutableDictionary supportedDiagnosticsWithPerLanguageOptions, string language) - : base(supportedDiagnosticsWithLangaugeSpecificOptions.Keys.Concat(supportedDiagnosticsWithPerLanguageOptions.Keys).ToImmutableArray()) + : this(supportedDiagnosticsWithLangaugeSpecificOptions.Keys.Concat(supportedDiagnosticsWithPerLanguageOptions.Keys).ToImmutableArray()) { foreach (var kvp in supportedDiagnosticsWithLangaugeSpecificOptions) { @@ -181,14 +181,6 @@ protected AbstractBuiltInCodeStyleDiagnosticAnalyzer( } } - /// - /// Constructor for a code style analyzer with a multiple diagnostic descriptors such that all the descriptors have no unique code style option to configure the descriptors. - /// - protected AbstractBuiltInCodeStyleDiagnosticAnalyzer(ImmutableArray supportedDiagnosticsWithoutOptions) - : base(supportedDiagnosticsWithoutOptions) - { - } - private static void AddDiagnosticIdToOptionMapping(string diagnosticId, IPerLanguageOption? option) { if (option != null) diff --git a/src/Analyzers/Core/Analyzers/AbstractCodeQualityDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/AbstractBuiltInCodeStyleDiagnosticAnalyzer_Core.cs similarity index 100% rename from src/Analyzers/Core/Analyzers/AbstractCodeQualityDiagnosticAnalyzer.cs rename to src/Analyzers/Core/Analyzers/AbstractBuiltInCodeStyleDiagnosticAnalyzer_Core.cs diff --git a/src/Analyzers/Core/Analyzers/AbstractCodeStyleDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/AbstractCodeStyleDiagnosticAnalyzer.cs index 80f3ba8379510..61c0ac7217a2b 100644 --- a/src/Analyzers/Core/Analyzers/AbstractCodeStyleDiagnosticAnalyzer.cs +++ b/src/Analyzers/Core/Analyzers/AbstractCodeStyleDiagnosticAnalyzer.cs @@ -7,7 +7,7 @@ namespace Microsoft.CodeAnalysis.CodeStyle { - internal abstract class AbstractCodeStyleDiagnosticAnalyzer : DiagnosticAnalyzer + internal abstract partial class AbstractBuiltInCodeStyleDiagnosticAnalyzer : DiagnosticAnalyzer, IBuiltInAnalyzer { protected readonly string? DescriptorId; @@ -16,11 +16,11 @@ internal abstract class AbstractCodeStyleDiagnosticAnalyzer : DiagnosticAnalyzer protected readonly LocalizableString _localizableTitle; protected readonly LocalizableString _localizableMessageFormat; - protected AbstractCodeStyleDiagnosticAnalyzer( + private AbstractBuiltInCodeStyleDiagnosticAnalyzer( string descriptorId, LocalizableString title, - LocalizableString? messageFormat = null, - bool isUnnecessary = false, - bool configurable = true) + LocalizableString? messageFormat, + bool isUnnecessary, + bool configurable) { DescriptorId = descriptorId; _localizableTitle = title; @@ -30,7 +30,10 @@ protected AbstractCodeStyleDiagnosticAnalyzer( SupportedDiagnostics = ImmutableArray.Create(Descriptor); } - protected AbstractCodeStyleDiagnosticAnalyzer(ImmutableArray supportedDiagnostics) + /// + /// Constructor for a code style analyzer with a multiple diagnostic descriptors such that all the descriptors have no unique code style option to configure the descriptors. + /// + protected AbstractBuiltInCodeStyleDiagnosticAnalyzer(ImmutableArray supportedDiagnostics) { SupportedDiagnostics = supportedDiagnostics; @@ -55,6 +58,7 @@ protected static DiagnosticDescriptor CreateDescriptorWithId( DiagnosticSeverity.Hidden, isEnabledByDefault: true, description: description, + helpLinkUri: $"https://docs.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/{id}", customTags: DiagnosticCustomTags.Create(isUnnecessary, isConfigurable, customTags)); public sealed override void Initialize(AnalysisContext context) diff --git a/src/Analyzers/Core/Analyzers/AbstractParenthesesDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/AbstractParenthesesDiagnosticAnalyzer.cs index f09595484554d..b5c45b509595b 100644 --- a/src/Analyzers/Core/Analyzers/AbstractParenthesesDiagnosticAnalyzer.cs +++ b/src/Analyzers/Core/Analyzers/AbstractParenthesesDiagnosticAnalyzer.cs @@ -15,15 +15,12 @@ namespace Microsoft.CodeAnalysis.RemoveUnnecessaryParentheses internal abstract class AbstractParenthesesDiagnosticAnalyzer : AbstractBuiltInCodeStyleDiagnosticAnalyzer { protected AbstractParenthesesDiagnosticAnalyzer( - string descriptorId, LocalizableString title, LocalizableString message) + string descriptorId, LocalizableString title, LocalizableString message, bool isUnnecessary = false) : base(descriptorId, options: ImmutableHashSet.Create(CodeStyleOptions2.ArithmeticBinaryParentheses, CodeStyleOptions2.RelationalBinaryParentheses, CodeStyleOptions2.OtherBinaryParentheses, CodeStyleOptions2.OtherParentheses), - title, message) - { - } - - protected AbstractParenthesesDiagnosticAnalyzer(ImmutableArray diagnosticDescriptors) - : base(diagnosticDescriptors) + title, + message, + isUnnecessary: isUnnecessary) { } diff --git a/src/Analyzers/Core/Analyzers/Analyzers.projitems b/src/Analyzers/Core/Analyzers/Analyzers.projitems index 4bdc2d70b5a2f..b6df19785c0da 100644 --- a/src/Analyzers/Core/Analyzers/Analyzers.projitems +++ b/src/Analyzers/Core/Analyzers/Analyzers.projitems @@ -14,7 +14,7 @@ - + @@ -91,4 +91,4 @@ - + \ No newline at end of file diff --git a/src/Analyzers/Core/Analyzers/RemoveUnnecessaryParentheses/AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/RemoveUnnecessaryParentheses/AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer.cs index 4924a35467277..8725b7caa3b0c 100644 --- a/src/Analyzers/Core/Analyzers/RemoveUnnecessaryParentheses/AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer.cs +++ b/src/Analyzers/Core/Analyzers/RemoveUnnecessaryParentheses/AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer.cs @@ -21,18 +21,11 @@ internal abstract class AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer< where TLanguageKindEnum : struct where TParenthesizedExpressionSyntax : SyntaxNode { - - /// - /// A diagnostic descriptor used to squiggle and message the span. - /// - private static readonly DiagnosticDescriptor s_diagnosticDescriptor = CreateDescriptorWithId( - IDEDiagnosticIds.RemoveUnnecessaryParenthesesDiagnosticId, - new LocalizableResourceString(nameof(AnalyzersResources.Remove_unnecessary_parentheses), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)), - new LocalizableResourceString(nameof(AnalyzersResources.Parentheses_can_be_removed), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)), - isUnnecessary: true); - protected AbstractRemoveUnnecessaryParenthesesDiagnosticAnalyzer() - : base(ImmutableArray.Create(s_diagnosticDescriptor)) + : base(IDEDiagnosticIds.RemoveUnnecessaryParenthesesDiagnosticId, + new LocalizableResourceString(nameof(AnalyzersResources.Remove_unnecessary_parentheses), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)), + new LocalizableResourceString(nameof(AnalyzersResources.Parentheses_can_be_removed), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)), + isUnnecessary: true) { } @@ -117,7 +110,7 @@ private void AnalyzeSyntax(SyntaxNodeAnalysisContext context) parenthesizedExpression.GetLastToken().GetLocation()); context.ReportDiagnostic(DiagnosticHelper.CreateWithLocationTags( - s_diagnosticDescriptor, + Descriptor, GetDiagnosticSquiggleLocation(parenthesizedExpression, context.CancellationToken), severity, additionalLocations, diff --git a/src/CodeStyle/Core/Analyzers/AbstractFormattingAnalyzer.cs b/src/CodeStyle/Core/Analyzers/AbstractFormattingAnalyzer.cs index dfbdc27beb796..00d7a7121f5c5 100644 --- a/src/CodeStyle/Core/Analyzers/AbstractFormattingAnalyzer.cs +++ b/src/CodeStyle/Core/Analyzers/AbstractFormattingAnalyzer.cs @@ -11,11 +11,12 @@ namespace Microsoft.CodeAnalysis.CodeStyle { internal abstract class AbstractFormattingAnalyzer - : AbstractCodeStyleDiagnosticAnalyzer + : AbstractBuiltInCodeStyleDiagnosticAnalyzer { protected AbstractFormattingAnalyzer() : base( IDEDiagnosticIds.FormattingDiagnosticId, + option: null, new LocalizableResourceString(nameof(CodeStyleResources.Fix_formatting), CodeStyleResources.ResourceManager, typeof(CodeStyleResources)), new LocalizableResourceString(nameof(CodeStyleResources.Fix_formatting), CodeStyleResources.ResourceManager, typeof(CodeStyleResources))) { From 21af0cb32d1670c3676b2be054888ac8e2bb9c72 Mon Sep 17 00:00:00 2001 From: Manish Vasani Date: Fri, 9 Oct 2020 09:44:28 -0700 Subject: [PATCH 35/68] Fix build --- src/CodeStyle/Core/Analyzers/AbstractFormattingAnalyzer.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/CodeStyle/Core/Analyzers/AbstractFormattingAnalyzer.cs b/src/CodeStyle/Core/Analyzers/AbstractFormattingAnalyzer.cs index 00d7a7121f5c5..5100ebd0c6b8c 100644 --- a/src/CodeStyle/Core/Analyzers/AbstractFormattingAnalyzer.cs +++ b/src/CodeStyle/Core/Analyzers/AbstractFormattingAnalyzer.cs @@ -22,12 +22,15 @@ protected AbstractFormattingAnalyzer() { } - public override ImmutableArray SupportedDiagnostics + public sealed override ImmutableArray SupportedDiagnostics => ImmutableArray.Create(Descriptor); + public sealed override DiagnosticAnalyzerCategory GetAnalyzerCategory() + => DiagnosticAnalyzerCategory.SyntaxTreeWithoutSemanticsAnalysis; + protected abstract ISyntaxFormattingService SyntaxFormattingService { get; } - protected override void InitializeWorker(AnalysisContext context) + protected sealed override void InitializeWorker(AnalysisContext context) => context.RegisterSyntaxTreeAction(AnalyzeSyntaxTree); private void AnalyzeSyntaxTree(SyntaxTreeAnalysisContext context) From 582a7607fbaefe971ecaae9749e469eac03fcca7 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 9 Oct 2020 11:42:15 -0700 Subject: [PATCH 36/68] Remove C#/VB dependency on inline hints. --- .../Core.Wpf/InlineHints/InlineHintsTag.cs | 66 ++++--------------- .../Core.Wpf/InlineHints/InlineHintsTagger.cs | 9 ++- .../Core/InlineHints/InlineHintDataTag.cs | 14 ++-- .../InlineHintsDataTaggerProvider.cs | 4 +- ...AbstractInlineParameterNameHintsService.cs | 5 +- .../AbstractInlineTypeHintsService.cs | 4 +- .../Core/Portable/InlineHints/InlineHint.cs | 40 +++++++++++ .../Portable/InlineHints/InlineHintHelpers.cs | 64 ++++++++++++++++++ .../Portable/InlineHints/InlineTypeHint.cs | 23 ------- 9 files changed, 134 insertions(+), 95 deletions(-) create mode 100644 src/Features/Core/Portable/InlineHints/InlineHint.cs create mode 100644 src/Features/Core/Portable/InlineHints/InlineHintHelpers.cs delete mode 100644 src/Features/Core/Portable/InlineHints/InlineTypeHint.cs diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs index 34bf85ab3bf6c..e6cab305df58b 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTag.cs @@ -17,6 +17,7 @@ using Microsoft.CodeAnalysis.Editor.Host; using Microsoft.CodeAnalysis.Editor.Shared.Extensions; using Microsoft.CodeAnalysis.Editor.Shared.Utilities; +using Microsoft.CodeAnalysis.InlineHints; using Microsoft.CodeAnalysis.LanguageServices; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Text; @@ -39,7 +40,7 @@ internal class InlineHintsTag : IntraTextAdornmentTag private readonly IToolTipService _toolTipService; private readonly ITextView _textView; private readonly SnapshotSpan _span; - private readonly SymbolKey? _key; + private readonly InlineHint _hint; private readonly IThreadingContext _threadingContext; private readonly Lazy _streamingPresenter; @@ -47,13 +48,13 @@ private InlineHintsTag( FrameworkElement adornment, ITextView textView, SnapshotSpan span, - SymbolKey? key, + InlineHint hint, InlineHintsTaggerProvider taggerProvider) : base(adornment, removalCallback: null, PositionAffinity.Predecessor) { _textView = textView; _span = span; - _key = key; + _hint = hint; _streamingPresenter = taggerProvider.StreamingFindUsagesPresenter; _threadingContext = taggerProvider.ThreadingContext; _toolTipService = taggerProvider.ToolTipService; @@ -71,68 +72,30 @@ private InlineHintsTag( /// /// The view of the editor /// The span that has the location of the hint - /// The symbolkey associated with each parameter public static InlineHintsTag Create( - ImmutableArray parts, + InlineHint hint, TextFormattingRunProperties format, IWpfTextView textView, SnapshotSpan span, - SymbolKey? key, InlineHintsTaggerProvider taggerProvider, IClassificationFormatMap formatMap, bool classify) { return new InlineHintsTag( - CreateElement(parts, textView, span, format, formatMap, taggerProvider.TypeMap, classify), - textView, span, key, taggerProvider); + CreateElement(hint.DisplayParts, textView, span, format, formatMap, taggerProvider.TypeMap, classify), + textView, span, hint, taggerProvider); } public async Task> CreateDescriptionAsync(CancellationToken cancellationToken) { - if (_key != null) + var document = _span.Snapshot.GetOpenDocumentInCurrentContextWithChanges(); + if (document != null) { - var document = _span.Snapshot.TextBuffer.CurrentSnapshot.GetOpenDocumentInCurrentContextWithChanges(); - - if (document != null) + var taggedText = await _hint.GetDescriptionAsync(document, cancellationToken).ConfigureAwait(false); + if (!taggedText.IsDefaultOrEmpty) { - var compilation = await document.Project.GetRequiredCompilationAsync(cancellationToken).ConfigureAwait(false); - var symbol = _key.Value.Resolve(compilation, cancellationToken: cancellationToken).Symbol; - - if (symbol != null) - { - var textContentBuilder = new List(); - - var workspace = document.Project.Solution.Workspace; - var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); - var symbolDisplayService = document.GetRequiredLanguageService(); - var formatter = document.GetRequiredLanguageService(); - var sections = await symbolDisplayService.ToDescriptionGroupsAsync(workspace, semanticModel, _span.Start, ImmutableArray.Create(symbol), cancellationToken).ConfigureAwait(false); - textContentBuilder.AddRange(sections[SymbolDescriptionGroups.MainDescription]); - if (formatter != null) - { - var documentation = symbol.GetDocumentationParts(semanticModel, _span.Start, formatter, cancellationToken); - - if (documentation.Any()) - { - textContentBuilder.AddLineBreak(); - textContentBuilder.AddRange(documentation); - } - } - - if (sections.TryGetValue(SymbolDescriptionGroups.AnonymousTypes, out var parts)) - { - if (!parts.IsDefaultOrEmpty) - { - textContentBuilder.AddLineBreak(); - textContentBuilder.AddLineBreak(); - textContentBuilder.AddRange(parts); - } - } - - var uiCollection = Implementation.IntelliSense.Helpers.BuildInteractiveTextElements(textContentBuilder.ToImmutableArray(), - document, _threadingContext, _streamingPresenter); - return uiCollection; - } + return Implementation.IntelliSense.Helpers.BuildInteractiveTextElements( + taggedText, document, _threadingContext, _streamingPresenter); } } @@ -140,7 +103,7 @@ public async Task> CreateDescriptionAsync(Cancellati } private static FrameworkElement CreateElement( - ImmutableArray parts, + ImmutableArray taggedTexts, IWpfTextView textView, SnapshotSpan span, TextFormattingRunProperties format, @@ -163,7 +126,6 @@ private static FrameworkElement CreateElement( VerticalAlignment = VerticalAlignment.Center, }; - var taggedTexts = parts.ToTaggedText(); foreach (var taggedText in taggedTexts) { var run = new Run(taggedText.ToVisibleDisplayString(includeLeftToRightMarker: true)); diff --git a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs index 998031077ae7c..8bcf4daf765f1 100644 --- a/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs +++ b/src/EditorFeatures/Core.Wpf/InlineHints/InlineHintsTagger.cs @@ -122,19 +122,18 @@ public IEnumerable> GetTags(NormalizedSnapshotSp // Calling into the InlineParameterNameHintsDataTaggerProvider which only responds with the current // active view and disregards and requests for tags not in that view var fullSpan = new SnapshotSpan(snapshot, 0, snapshot.Length); - var dataTags = _tagAggregator.GetTags(new NormalizedSnapshotSpanCollection(fullSpan)); - foreach (var dataTag in dataTags) + var tags = _tagAggregator.GetTags(new NormalizedSnapshotSpanCollection(fullSpan)); + foreach (var tag in tags) { // Gets the associated span from the snapshot span and creates the IntraTextAdornmentTag from the data // tags. Only dealing with the dataTagSpans if the count is 1 because we do not see a multi-buffer case // occuring - var dataTagSpans = dataTag.Span.GetSpans(snapshot); - var textTag = dataTag.Tag; + var dataTagSpans = tag.Span.GetSpans(snapshot); if (dataTagSpans.Count == 1) { var dataTagSpan = dataTagSpans[0]; var parameterHintUITag = InlineHintsTag.Create( - textTag.Parts, Format, _textView, dataTagSpan, textTag.SymbolKey, _taggerProvider, _formatMap, classify); + tag.Tag.Hint, Format, _textView, dataTagSpan, _taggerProvider, _formatMap, classify); _cache.Add(new TagSpan(dataTagSpan, parameterHintUITag)); } diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs b/src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs index 0324d32bb28c7..33a2ee3c0bf1c 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintDataTag.cs @@ -2,8 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System; -using System.Collections.Immutable; +using Microsoft.CodeAnalysis.InlineHints; using Microsoft.VisualStudio.Text.Tagging; namespace Microsoft.CodeAnalysis.Editor.InlineHints @@ -14,16 +13,11 @@ namespace Microsoft.CodeAnalysis.Editor.InlineHints /// internal class InlineHintDataTag : ITag { - public readonly ImmutableArray Parts; - public readonly SymbolKey? SymbolKey; + public readonly InlineHint Hint; - public InlineHintDataTag(ImmutableArray parts, SymbolKey? symbolKey) + public InlineHintDataTag(InlineHint hint) { - if (parts.Length == 0) - throw new ArgumentException("Must have a length greater than 0", nameof(parts)); - - Parts = parts; - SymbolKey = symbolKey; + Hint = hint; } } } diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs index acea7da202f09..0b302afd6c85f 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs @@ -102,7 +102,7 @@ private static async Task AddTypeHintsAsync(TaggerContext con { context.AddTag(new TagSpan( new SnapshotSpan(snapshotSpan.Snapshot, hint.Span.ToSpan()), - new InlineHintDataTag(hint.Parts, hint.SymbolKey))); + new InlineHintDataTag(hint))); } } @@ -120,7 +120,7 @@ private static async Task AddParameterNameHintsAsync(TaggerContext( new SnapshotSpan(snapshotSpan.Snapshot, hint.Span.ToSpan()), - new InlineHintDataTag(hint.Parts, hint.SymbolKey))); + new InlineHintDataTag(hint))); } } } diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs index 0befce3b479f5..e9e2bf7c71bd2 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs @@ -6,6 +6,7 @@ using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; +using Microsoft.CodeAnalysis.LanguageServices; using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Text; @@ -84,8 +85,8 @@ void AddHintsIfAppropriate() { result.Add(new InlineHint( new TextSpan(position, 0), - ImmutableArray.Create(new SymbolDisplayPart(SymbolDisplayPartKind.Text, parameter, parameter.Name + ":")), - parameter.GetSymbolKey(cancellationToken))); + ImmutableArray.Create(new TaggedText(TextTags.Text, parameter.Name + ":")), + InlineHintHelpers.GetDescriptionFunction(position, parameter.GetSymbolKey()))); } } } diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs index 4020934e1c4b5..13dd151c752d7 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineTypeHintsService.cs @@ -65,7 +65,9 @@ public async Task> GetInlineHintsAsync( var parts = type.ToDisplayParts(s_minimalTypeStyle); AddParts(anonymousTypeService, finalParts, parts, semanticModel, span.Start); - result.Add(new InlineHint(span, finalParts.ToImmutable(), type.GetSymbolKey(cancellationToken))); + result.Add(new InlineHint( + span, finalParts.ToTaggedText(), + InlineHintHelpers.GetDescriptionFunction(span.Start, type.GetSymbolKey()))); } return result.ToImmutable(); diff --git a/src/Features/Core/Portable/InlineHints/InlineHint.cs b/src/Features/Core/Portable/InlineHints/InlineHint.cs new file mode 100644 index 0000000000000..ae68b3553ec1c --- /dev/null +++ b/src/Features/Core/Portable/InlineHints/InlineHint.cs @@ -0,0 +1,40 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Immutable; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.Text; +using Roslyn.Utilities; + +namespace Microsoft.CodeAnalysis.InlineHints +{ + internal readonly struct InlineHint + { + public readonly TextSpan Span; + public readonly ImmutableArray DisplayParts; + private readonly Func>>? _getDescriptionAsync; + + public InlineHint( + TextSpan span, + ImmutableArray displayParts, + Func>>? getDescriptionAsync = null) + { + if (displayParts.Length == 0) + throw new ArgumentException($"{nameof(displayParts)} must be non-empty"); + + Span = span; + DisplayParts = displayParts; + _getDescriptionAsync = getDescriptionAsync; + } + + /// + /// Gets a description for the inline hint, suitable to show when a user hovers over the editor adornment. The + /// will represent the file at the time this hint was created. + /// + public Task> GetDescriptionAsync(Document document, CancellationToken cancellationToken) + => _getDescriptionAsync?.Invoke(document, cancellationToken) ?? SpecializedTasks.EmptyImmutableArray(); + } +} diff --git a/src/Features/Core/Portable/InlineHints/InlineHintHelpers.cs b/src/Features/Core/Portable/InlineHints/InlineHintHelpers.cs new file mode 100644 index 0000000000000..d384e413cfdb8 --- /dev/null +++ b/src/Features/Core/Portable/InlineHints/InlineHintHelpers.cs @@ -0,0 +1,64 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.DocumentationComments; +using Microsoft.CodeAnalysis.LanguageServices; +using Microsoft.CodeAnalysis.Shared.Extensions; + +namespace Microsoft.CodeAnalysis.InlineHints +{ + internal static class InlineHintHelpers + { + public static Func>>? GetDescriptionFunction(int position, SymbolKey symbolKey) + => (document, cancellationToken) => GetDescriptionAsync(document, position, symbolKey, cancellationToken); + + private static async Task> GetDescriptionAsync(Document document, int position, SymbolKey symbolKey, CancellationToken cancellationToken) + { + var semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false); + + var symbol = symbolKey.Resolve(semanticModel.Compilation, cancellationToken: cancellationToken).Symbol; + if (symbol != null) + { + var workspace = document.Project.Solution.Workspace; + var symbolDisplayService = document.GetRequiredLanguageService(); + + var parts = new List(); + + var groups = await symbolDisplayService.ToDescriptionGroupsAsync( + workspace, semanticModel, position, ImmutableArray.Create(symbol), cancellationToken).ConfigureAwait(false); + + parts.AddRange(groups[SymbolDescriptionGroups.MainDescription]); + + var formatter = document.GetRequiredLanguageService(); + var documentation = symbol.GetDocumentationParts(semanticModel, position, formatter, cancellationToken); + + if (documentation.Any()) + { + parts.AddLineBreak(); + parts.AddRange(documentation); + } + + if (groups.TryGetValue(SymbolDescriptionGroups.AnonymousTypes, out var anonymousTypes)) + { + if (!anonymousTypes.IsDefaultOrEmpty) + { + parts.AddLineBreak(); + parts.AddLineBreak(); + parts.AddRange(anonymousTypes); + } + } + + return parts.ToImmutableArray(); + } + + return default; + } + } +} diff --git a/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs b/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs deleted file mode 100644 index c903d49e84d79..0000000000000 --- a/src/Features/Core/Portable/InlineHints/InlineTypeHint.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Collections.Immutable; -using Microsoft.CodeAnalysis.Text; - -namespace Microsoft.CodeAnalysis.InlineHints -{ - internal readonly struct InlineHint - { - public readonly TextSpan Span; - public readonly ImmutableArray Parts; - public readonly SymbolKey? SymbolKey; - - public InlineHint(TextSpan span, ImmutableArray parts, SymbolKey? symbolKey) - { - Span = span; - Parts = parts; - SymbolKey = symbolKey; - } - } -} From 4088137c89f1bd63f3c39cd6be8bdc01336f8b08 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 9 Oct 2020 11:52:23 -0700 Subject: [PATCH 37/68] Update tests --- .../Test2/InlineHints/AbstractInlineHintsTests.vb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb index 127f51138542a..6e4b3af834a4e 100644 --- a/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb @@ -25,7 +25,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Dim inlineHints = Await tagService.GetInlineHintsAsync(document, New Text.TextSpan(0, snapshot.Length), New CancellationToken()) Dim producedTags = From hint In inlineHints - Select hint.Parts.GetFullText() + hint.Position.ToString + Select hint.DisplayParts.GetFullText() + hint.Span.Start.ToString ValidateSpans(hostDocument, producedTags) End Using @@ -39,7 +39,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Function(name, span) New With {.Name = name.Key, span}) For Each nameAndSpan In nameAndSpansList.OrderBy(Function(x) x.span.Start) - expectedTags.Add(nameAndSpan.Name + ":" + nameAndSpan.span.Start.ToString()) + expectedTags.Add(nameAndSpan.Name + ":" + nameAndSpan.ToString()) Next AssertEx.Equal(expectedTags, producedTags) @@ -61,7 +61,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Dim typeHints = Await tagService.GetInlineHintsAsync(document, New Text.TextSpan(0, snapshot.Length), New CancellationToken()) Dim producedTags = From hint In typeHints - Select hint.Parts.GetFullText() + ":" + hint.Position.ToString() + Select hint.DisplayParts.GetFullText() + ":" + hint.Span.ToString() ValidateSpans(hostDocument, producedTags) End Using From a41ed35b06f986899baa0a73d368fd914eac31bf Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 9 Oct 2020 12:06:09 -0700 Subject: [PATCH 38/68] Expose a single service for other languages to plug into. --- .../InlineHintsDataTaggerProvider.cs | 30 ++--------------- .../InlineHints/CSharpInlineHintsService.cs | 24 ++++++++++++++ .../CSharpInlineParameterNameHintsService.cs | 1 + .../InlineHints/AbstractInlineHintsService.cs | 33 +++++++++++++++++++ ...AbstractInlineParameterNameHintsService.cs | 1 - .../InlineHints/IInlineHintsService.cs | 18 ++++++++++ .../IInlineParameterNameHintsService.cs | 4 +++ .../InlineHints/IInlineTypeHintsService.cs | 4 +++ .../VisualBasicInlineHintsService.vb | 22 +++++++++++++ ...ualBasicInlineParameterNameHintsService.vb | 2 +- 10 files changed, 109 insertions(+), 30 deletions(-) create mode 100644 src/Features/CSharp/Portable/InlineHints/CSharpInlineHintsService.cs create mode 100644 src/Features/Core/Portable/InlineHints/AbstractInlineHintsService.cs create mode 100644 src/Features/Core/Portable/InlineHints/IInlineHintsService.cs create mode 100644 src/Features/VisualBasic/Portable/InlineHints/VisualBasicInlineHintsService.vb rename src/Features/VisualBasic/Portable/{InlineParameterNameHints => InlineHints}/VisualBasicInlineParameterNameHintsService.vb (98%) diff --git a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs index 0b302afd6c85f..d1e4ca9ba81b0 100644 --- a/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs +++ b/src/EditorFeatures/Core/InlineHints/InlineHintsDataTaggerProvider.cs @@ -4,9 +4,7 @@ using System; using System.Collections.Generic; -using System.Collections.Immutable; using System.ComponentModel.Composition; -using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.Editor.Shared.Extensions; using Microsoft.CodeAnalysis.Editor.Shared.Tagging; @@ -85,31 +83,8 @@ protected override IEnumerable GetSpansToTag(ITextView textView, I protected override async Task ProduceTagsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, int? caretPosition) { var cancellationToken = context.CancellationToken; - await AddTypeHintsAsync(context, documentSnapshotSpan, cancellationToken).ConfigureAwait(false); - await AddParameterNameHintsAsync(context, documentSnapshotSpan, cancellationToken).ConfigureAwait(false); - } - - private static async Task AddTypeHintsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, CancellationToken cancellationToken) - { - var document = documentSnapshotSpan.Document; - var service = document.GetLanguageService(); - if (service == null) - return; - - var snapshotSpan = documentSnapshotSpan.SnapshotSpan; - var hints = await service.GetInlineHintsAsync(document, snapshotSpan.Span.ToTextSpan(), cancellationToken).ConfigureAwait(false); - foreach (var hint in hints) - { - context.AddTag(new TagSpan( - new SnapshotSpan(snapshotSpan.Snapshot, hint.Span.ToSpan()), - new InlineHintDataTag(hint))); - } - } - - private static async Task AddParameterNameHintsAsync(TaggerContext context, DocumentSnapshotSpan documentSnapshotSpan, CancellationToken cancellationToken) - { var document = documentSnapshotSpan.Document; - var service = document.GetLanguageService(); + var service = document.GetLanguageService(); if (service == null) return; @@ -117,9 +92,8 @@ private static async Task AddParameterNameHintsAsync(TaggerContext( - new SnapshotSpan(snapshotSpan.Snapshot, hint.Span.ToSpan()), + hint.Span.ToSnapshotSpan(snapshotSpan.Snapshot), new InlineHintDataTag(hint))); } } diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineHintsService.cs new file mode 100644 index 0000000000000..27d1eefde90bb --- /dev/null +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineHintsService.cs @@ -0,0 +1,24 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Composition; +using Microsoft.CodeAnalysis.Host.Mef; +using Microsoft.CodeAnalysis.InlineHints; + +namespace Microsoft.CodeAnalysis.CSharp.InlineHints +{ + /// + /// The service to locate all positions where inline hints should be placed. + /// + [ExportLanguageService(typeof(IInlineHintsService), LanguageNames.CSharp), Shared] + internal class CSharpInlineHintsService : AbstractInlineHintsService + { + [ImportingConstructor] + [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] + public CSharpInlineHintsService() + { + } + } +} diff --git a/src/Features/CSharp/Portable/InlineHints/CSharpInlineParameterNameHintsService.cs b/src/Features/CSharp/Portable/InlineHints/CSharpInlineParameterNameHintsService.cs index 6221036b5fb08..898e982bf8697 100644 --- a/src/Features/CSharp/Portable/InlineHints/CSharpInlineParameterNameHintsService.cs +++ b/src/Features/CSharp/Portable/InlineHints/CSharpInlineParameterNameHintsService.cs @@ -13,6 +13,7 @@ namespace Microsoft.CodeAnalysis.CSharp.InlineHints { + /// /// The service to locate the positions in which the adornments should appear /// as well as associate the adornments back to the parameter name diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineHintsService.cs new file mode 100644 index 0000000000000..ae8ecbaff3699 --- /dev/null +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineHintsService.cs @@ -0,0 +1,33 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Immutable; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.Host; +using Microsoft.CodeAnalysis.Shared.Extensions; +using Microsoft.CodeAnalysis.Text; + +namespace Microsoft.CodeAnalysis.InlineHints +{ + internal abstract class AbstractInlineHintsService : IInlineHintsService + { + public async Task> GetInlineHintsAsync( + Document document, TextSpan textSpan, CancellationToken cancellationToken) + { + var inlineParameterService = document.GetLanguageService(); + var inlineTypeService = document.GetLanguageService(); + + var parameters = inlineParameterService == null + ? ImmutableArray.Empty + : await inlineParameterService.GetInlineHintsAsync(document, textSpan, cancellationToken).ConfigureAwait(false); + + var types = inlineTypeService == null + ? ImmutableArray.Empty + : await inlineTypeService.GetInlineHintsAsync(document, textSpan, cancellationToken).ConfigureAwait(false); + + return parameters.Concat(types); + } + } +} diff --git a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs index e9e2bf7c71bd2..862027e8e0800 100644 --- a/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/AbstractInlineParameterNameHintsService.cs @@ -6,7 +6,6 @@ using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; -using Microsoft.CodeAnalysis.LanguageServices; using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Text; diff --git a/src/Features/Core/Portable/InlineHints/IInlineHintsService.cs b/src/Features/Core/Portable/InlineHints/IInlineHintsService.cs new file mode 100644 index 0000000000000..4952e0d0e0c4f --- /dev/null +++ b/src/Features/Core/Portable/InlineHints/IInlineHintsService.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Immutable; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.Host; +using Microsoft.CodeAnalysis.Shared.Extensions; +using Microsoft.CodeAnalysis.Text; + +namespace Microsoft.CodeAnalysis.InlineHints +{ + internal interface IInlineHintsService : ILanguageService + { + Task> GetInlineHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken); + } +} diff --git a/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs b/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs index b94f7d6e7e5b3..63cb8906d01f3 100644 --- a/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/IInlineParameterNameHintsService.cs @@ -10,6 +10,10 @@ namespace Microsoft.CodeAnalysis.InlineHints { + /// + /// Gets inline hints for type locations. This is an internal service only for C# and VB. Use for other languages. + /// internal interface IInlineParameterNameHintsService : ILanguageService { Task> GetInlineHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken); diff --git a/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs b/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs index 3860b4dca4ba5..87f6b64be5f13 100644 --- a/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs +++ b/src/Features/Core/Portable/InlineHints/IInlineTypeHintsService.cs @@ -10,6 +10,10 @@ namespace Microsoft.CodeAnalysis.InlineHints { + /// + /// Gets inline hints for type locations. This is an internal service only for C# and VB. Use for other languages. + /// internal interface IInlineTypeHintsService : ILanguageService { Task> GetInlineHintsAsync(Document document, TextSpan textSpan, CancellationToken cancellationToken); diff --git a/src/Features/VisualBasic/Portable/InlineHints/VisualBasicInlineHintsService.vb b/src/Features/VisualBasic/Portable/InlineHints/VisualBasicInlineHintsService.vb new file mode 100644 index 0000000000000..642cb370019ee --- /dev/null +++ b/src/Features/VisualBasic/Portable/InlineHints/VisualBasicInlineHintsService.vb @@ -0,0 +1,22 @@ +' Licensed to the .NET Foundation under one or more agreements. +' The .NET Foundation licenses this file to you under the MIT license. +' See the LICENSE file in the project root for more information. + +Imports System.Composition +Imports Microsoft.CodeAnalysis.Host.Mef +Imports Microsoft.CodeAnalysis.InlineHints + +Namespace Microsoft.CodeAnalysis.VisualBasic.InlineHints + ''' + ''' The service to locate all positions where inline hints should be placed. + ''' + + Friend Class VisualBasicInlineHintsService + Inherits AbstractInlineHintsService + + + + Public Sub New() + End Sub + End Class +End Namespace diff --git a/src/Features/VisualBasic/Portable/InlineParameterNameHints/VisualBasicInlineParameterNameHintsService.vb b/src/Features/VisualBasic/Portable/InlineHints/VisualBasicInlineParameterNameHintsService.vb similarity index 98% rename from src/Features/VisualBasic/Portable/InlineParameterNameHints/VisualBasicInlineParameterNameHintsService.vb rename to src/Features/VisualBasic/Portable/InlineHints/VisualBasicInlineParameterNameHintsService.vb index 890cf1b0e9d03..f0a52f3e7853b 100644 --- a/src/Features/VisualBasic/Portable/InlineParameterNameHints/VisualBasicInlineParameterNameHintsService.vb +++ b/src/Features/VisualBasic/Portable/InlineHints/VisualBasicInlineParameterNameHintsService.vb @@ -9,7 +9,7 @@ Imports Microsoft.CodeAnalysis.InlineHints Imports Microsoft.CodeAnalysis.PooledObjects Imports Microsoft.CodeAnalysis.VisualBasic.Syntax -Namespace Microsoft.CodeAnalysis.VisualBasic.InlineParameterNameHints +Namespace Microsoft.CodeAnalysis.VisualBasic.InlineHints Friend Class VisualBasicInlineParameterNameHintsService Inherits AbstractInlineParameterNameHintsService From 6ad4b00b2c1f07caedbff5d5212709069bcabbe8 Mon Sep 17 00:00:00 2001 From: AlekseyTs Date: Fri, 9 Oct 2020 12:28:55 -0700 Subject: [PATCH 39/68] Ensure that tokens are re-fetched to the position in the reset point in SyntaxParser.Reset (#48393) * Ensure that tokens are refetched to the position in the reset point in SyntaxParser.Reset Fixes https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1179569. * Fix spacing * Change number for ERR_UnexpectedVarianceStaticMember --- .../CSharp/Portable/Errors/ErrorCode.cs | 4 +- .../CSharp/Portable/Parser/SyntaxParser.cs | 13 +++- .../Semantics/TopLevelStatementsTests.cs | 73 +++++++++++++++++++ .../DefaultInterfaceImplementationTests.cs | 12 +-- .../UpgradeProject/UpgradeProjectTests.cs | 2 +- .../CSharpUpgradeProjectCodeFixProvider.cs | 2 +- 6 files changed, 95 insertions(+), 11 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs b/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs index 13eca3594545e..7a75337c206c3 100644 --- a/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs +++ b/src/Compilers/CSharp/Portable/Errors/ErrorCode.cs @@ -1916,9 +1916,9 @@ internal enum ErrorCode ERR_InitCannotBeReadonly = 8903, - #endregion diagnostics introduced for C# 9.0 + ERR_UnexpectedVarianceStaticMember = 8904, - ERR_UnexpectedVarianceStaticMember = 9100, + #endregion diagnostics introduced for C# 9.0 // Note: you will need to re-generate compiler code after adding warnings (eng\generate-compiler-code.cmd) } diff --git a/src/Compilers/CSharp/Portable/Parser/SyntaxParser.cs b/src/Compilers/CSharp/Portable/Parser/SyntaxParser.cs index 880b80566efec..2a7d5593540a8 100644 --- a/src/Compilers/CSharp/Portable/Parser/SyntaxParser.cs +++ b/src/Compilers/CSharp/Portable/Parser/SyntaxParser.cs @@ -150,8 +150,19 @@ protected ResetPoint GetResetPoint() protected void Reset(ref ResetPoint point) { - _mode = point.Mode; var offset = point.Position - _firstToken; + Debug.Assert(offset >= 0); + + if (offset >= _tokenCount) + { + // Re-fetch tokens to the position in the reset point + PeekToken(offset - _tokenOffset); + + // Re-calculate new offset in case tokens got shifted to the left while we were peeking. + offset = point.Position - _firstToken; + } + + _mode = point.Mode; Debug.Assert(offset >= 0 && offset < _tokenCount); _tokenOffset = offset; _currentToken = null; diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/TopLevelStatementsTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/TopLevelStatementsTests.cs index 69891681339ac..b95668ae95125 100644 --- a/src/Compilers/CSharp/Test/Semantic/Semantics/TopLevelStatementsTests.cs +++ b/src/Compilers/CSharp/Test/Semantic/Semantics/TopLevelStatementsTests.cs @@ -8602,5 +8602,78 @@ public void Span_02() Diagnostic(ErrorCode.ERR_EscapeLocal, "inner").WithArguments("inner").WithLocation(7, 13) ); } + + [Fact] + [WorkItem(1179569, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1179569")] + public void Issue1179569() + { + var text1 = +@"Task v0123456789012345678901234567() +{ + Console.Write(""start v0123456789012345678901234567""); + await Task.Delay(2 * 1000); + Console.Write(""end v0123456789012345678901234567""); +} + +Task On01234567890123456() +{ + return v0123456789012345678901234567(); +} + +string + +return Task.WhenAll( + Task.WhenAll(this.c01234567890123456789012345678.Select(v01234567 => On01234567890123456(v01234567))), + Task.WhenAll(this.c01234567890123456789.Select(v01234567 => v01234567.U0123456789012345678901234()))); +"; + + var oldTree = Parse(text: text1, options: TestOptions.RegularDefault); + + var text2 = +@"Task v0123456789012345678901234567() +{ + Console.Write(""start v0123456789012345678901234567""); + await Task.Delay(2 * 1000); + Console.Write(""end v0123456789012345678901234567""); +} + +Task On01234567890123456() +{ + return v0123456789012345678901234567(); +} + +string[ + +return Task.WhenAll( + Task.WhenAll(this.c01234567890123456789012345678.Select(v01234567 => On01234567890123456(v01234567))), + Task.WhenAll(this.c01234567890123456789.Select(v01234567 => v01234567.U0123456789012345678901234()))); +"; + + var newText = Microsoft.CodeAnalysis.Text.StringText.From(text2, System.Text.Encoding.UTF8); + using var lexer = new Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer(newText, TestOptions.RegularDefault); + using var parser = new Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser(lexer, + (CSharpSyntaxNode)oldTree.GetRoot(), new[] { new Microsoft.CodeAnalysis.Text.TextChangeRange(new Microsoft.CodeAnalysis.Text.TextSpan(282, 0), 1) }); + + var compilationUnit = (CompilationUnitSyntax)parser.ParseCompilationUnit().CreateRed(); + var tree = CSharpSyntaxTree.Create(compilationUnit, TestOptions.RegularDefault, encoding: System.Text.Encoding.UTF8); + Assert.Equal(text2, tree.GetText().ToString()); + tree.VerifySource(); + + var fullParseTree = Parse(text: text2, options: TestOptions.RegularDefault); + var nodes1 = tree.GetRoot().DescendantNodesAndTokensAndSelf(descendIntoTrivia: true).ToArray(); + var nodes2 = fullParseTree.GetRoot().DescendantNodesAndTokensAndSelf(descendIntoTrivia: true).ToArray(); + Assert.Equal(nodes1.Length, nodes2.Length); + + for (int i = 0; i < nodes1.Length; i++) + { + var node1 = nodes1[i]; + var node2 = nodes2[i]; + Assert.Equal(node1.RawKind, node2.RawKind); + Assert.Equal(node1.Span, node2.Span); + Assert.Equal(node1.FullSpan, node2.FullSpan); + Assert.Equal(node1.ToString(), node2.ToString()); + Assert.Equal(node1.ToFullString(), node2.ToFullString()); + } + } } } diff --git a/src/Compilers/CSharp/Test/Symbol/Symbols/DefaultInterfaceImplementationTests.cs b/src/Compilers/CSharp/Test/Symbol/Symbols/DefaultInterfaceImplementationTests.cs index 21f4c3e71d015..c52bb7983c56e 100644 --- a/src/Compilers/CSharp/Test/Symbol/Symbols/DefaultInterfaceImplementationTests.cs +++ b/src/Compilers/CSharp/Test/Symbol/Symbols/DefaultInterfaceImplementationTests.cs @@ -59275,10 +59275,10 @@ interface I2 parseOptions: TestOptions.Regular8, targetFramework: TargetFramework.NetStandardLatest); compilation1.VerifyDiagnostics( - // (15,12): error CS9100: Invalid variance: The type parameter 'T1' must be invariantly valid on 'I2.P1' unless language version 'preview' or greater is used. 'T1' is covariant. + // (15,12): error CS8904: Invalid variance: The type parameter 'T1' must be invariantly valid on 'I2.P1' unless language version 'preview' or greater is used. 'T1' is covariant. // static T1 P1 { get; set; } Diagnostic(ErrorCode.ERR_UnexpectedVarianceStaticMember, "T1").WithArguments("I2.P1", "T1", "covariant", "invariantly", "preview").WithLocation(15, 12), - // (16,12): error CS9100: Invalid variance: The type parameter 'T2' must be invariantly valid on 'I2.P2' unless language version 'preview' or greater is used. 'T2' is contravariant. + // (16,12): error CS8904: Invalid variance: The type parameter 'T2' must be invariantly valid on 'I2.P2' unless language version 'preview' or greater is used. 'T2' is contravariant. // static T2 P2 { get; set; } Diagnostic(ErrorCode.ERR_UnexpectedVarianceStaticMember, "T2").WithArguments("I2.P2", "T2", "contravariant", "invariantly", "preview").WithLocation(16, 12) ); @@ -59321,10 +59321,10 @@ interface I2 parseOptions: TestOptions.Regular8, targetFramework: TargetFramework.NetStandardLatest); compilation1.VerifyDiagnostics( - // (13,18): error CS9100: Invalid variance: The type parameter 'T1' must be contravariantly valid on 'I2.M1(T1)' unless language version 'preview' or greater is used. 'T1' is covariant. + // (13,18): error CS8904: Invalid variance: The type parameter 'T1' must be contravariantly valid on 'I2.M1(T1)' unless language version 'preview' or greater is used. 'T1' is covariant. // static T1 M1(T1 x) => x; Diagnostic(ErrorCode.ERR_UnexpectedVarianceStaticMember, "T1").WithArguments("I2.M1(T1)", "T1", "covariant", "contravariantly", "preview").WithLocation(13, 18), - // (14,12): error CS9100: Invalid variance: The type parameter 'T2' must be covariantly valid on 'I2.M2(T2)' unless language version 'preview' or greater is used. 'T2' is contravariant. + // (14,12): error CS8904: Invalid variance: The type parameter 'T2' must be covariantly valid on 'I2.M2(T2)' unless language version 'preview' or greater is used. 'T2' is contravariant. // static T2 M2(T2 x) => x; Diagnostic(ErrorCode.ERR_UnexpectedVarianceStaticMember, "T2").WithArguments("I2.M2(T2)", "T2", "contravariant", "covariantly", "preview").WithLocation(14, 12) ); @@ -59389,10 +59389,10 @@ static T3 Print(T3 x) parseOptions: TestOptions.Regular8, targetFramework: TargetFramework.NetStandardLatest); compilation1.VerifyDiagnostics( - // (24,53): error CS9100: Invalid variance: The type parameter 'T1' must be contravariantly valid on 'I2.E1' unless language version 'preview' or greater is used. 'T1' is covariant. + // (24,53): error CS8904: Invalid variance: The type parameter 'T1' must be contravariantly valid on 'I2.E1' unless language version 'preview' or greater is used. 'T1' is covariant. // static event System.Action> E1; Diagnostic(ErrorCode.ERR_UnexpectedVarianceStaticMember, "E1").WithArguments("I2.E1", "T1", "covariant", "contravariantly", "preview").WithLocation(24, 53), - // (25,53): error CS9100: Invalid variance: The type parameter 'T2' must be covariantly valid on 'I2.E2' unless language version 'preview' or greater is used. 'T2' is contravariant. + // (25,53): error CS8904: Invalid variance: The type parameter 'T2' must be covariantly valid on 'I2.E2' unless language version 'preview' or greater is used. 'T2' is contravariant. // static event System.Action> E2; Diagnostic(ErrorCode.ERR_UnexpectedVarianceStaticMember, "E2").WithArguments("I2.E2", "T2", "contravariant", "covariantly", "preview").WithLocation(25, 53) ); diff --git a/src/EditorFeatures/CSharpTest/Diagnostics/UpgradeProject/UpgradeProjectTests.cs b/src/EditorFeatures/CSharpTest/Diagnostics/UpgradeProject/UpgradeProjectTests.cs index cdee72e43129e..fa2c9ec1e8f6d 100644 --- a/src/EditorFeatures/CSharpTest/Diagnostics/UpgradeProject/UpgradeProjectTests.cs +++ b/src/EditorFeatures/CSharpTest/Diagnostics/UpgradeProject/UpgradeProjectTests.cs @@ -989,7 +989,7 @@ public void N() } [Fact] - public async Task UpgradeProjectForVarianceSafetyForStaticInterfaceMembers_CS9100() + public async Task UpgradeProjectForVarianceSafetyForStaticInterfaceMembers_CS8904() { await TestLanguageVersionUpgradedAsync( @" diff --git a/src/Features/CSharp/Portable/UpgradeProject/CSharpUpgradeProjectCodeFixProvider.cs b/src/Features/CSharp/Portable/UpgradeProject/CSharpUpgradeProjectCodeFixProvider.cs index 7fc1d13077aa4..f15b89a345f4f 100644 --- a/src/Features/CSharp/Portable/UpgradeProject/CSharpUpgradeProjectCodeFixProvider.cs +++ b/src/Features/CSharp/Portable/UpgradeProject/CSharpUpgradeProjectCodeFixProvider.cs @@ -47,7 +47,7 @@ public CSharpUpgradeProjectCodeFixProvider() "CS8652", // error CS8652: The feature '' is currently in Preview and *unsupported*. To use Preview features, use the 'preview' language version. "CS8703", // error CS8703: The modifier '{0}' is not valid for this item in C# {1}. Please use language version '{2}' or greater. "CS8706", // error CS8706: '{0}' cannot implement interface member '{1}' in type '{2}' because feature '{3}' is not available in C# {4}. Please use language version '{5}' or greater. - "CS9100", // error CS9100: Invalid variance: The type parameter 'T1' must be contravariantly valid on 'I2.M1(T1)' unless language version 'preview' or greater is used. 'T1' is covariant. + "CS8904", // error CS8904: Invalid variance: The type parameter 'T1' must be contravariantly valid on 'I2.M1(T1)' unless language version 'preview' or greater is used. 'T1' is covariant. }); public override string UpgradeThisProjectResource => CSharpFeaturesResources.Upgrade_this_project_to_csharp_language_version_0; From 35cda3853b2d78aedf5b73965aac6467bd4ac2e4 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 9 Oct 2020 12:46:45 -0700 Subject: [PATCH 40/68] Fix --- .../Test2/InlineHints/AbstractInlineHintsTests.vb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb index 127f51138542a..7fca9ce729a89 100644 --- a/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/AbstractInlineHintsTests.vb @@ -25,7 +25,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Dim inlineHints = Await tagService.GetInlineHintsAsync(document, New Text.TextSpan(0, snapshot.Length), New CancellationToken()) Dim producedTags = From hint In inlineHints - Select hint.Parts.GetFullText() + hint.Position.ToString + Select hint.Parts.GetFullText() + hint.Span.ToString ValidateSpans(hostDocument, producedTags) End Using @@ -39,7 +39,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Function(name, span) New With {.Name = name.Key, span}) For Each nameAndSpan In nameAndSpansList.OrderBy(Function(x) x.span.Start) - expectedTags.Add(nameAndSpan.Name + ":" + nameAndSpan.span.Start.ToString()) + expectedTags.Add(nameAndSpan.Name + ":" + nameAndSpan.span.ToString()) Next AssertEx.Equal(expectedTags, producedTags) @@ -61,7 +61,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Dim typeHints = Await tagService.GetInlineHintsAsync(document, New Text.TextSpan(0, snapshot.Length), New CancellationToken()) Dim producedTags = From hint In typeHints - Select hint.Parts.GetFullText() + ":" + hint.Position.ToString() + Select hint.Parts.GetFullText() + ":" + hint.Span.ToString() ValidateSpans(hostDocument, producedTags) End Using From c6b16e1431c42b7b4f1da80409cf1d463a3caed6 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 9 Oct 2020 12:54:09 -0700 Subject: [PATCH 41/68] Fix tests --- .../CSharpInlineParameterNameHintsTests.vb | 38 +++++++++---------- ...isualBasicInlineParameterNameHintsTests.vb | 38 +++++++++---------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb index d54da8061cdd1..340a7e821f067 100644 --- a/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/CSharpInlineParameterNameHintsTests.vb @@ -44,7 +44,7 @@ class A } void Main() { - testMethod({|x:5|}); + testMethod({|x:|}5); } } @@ -68,7 +68,7 @@ class A } void Main() { - testMethod({|x:5|}, {|y:2|}); + testMethod({|x:|}5, {|y:|}2); } } @@ -92,7 +92,7 @@ class A } void Main() { - testMethod({|x:-5|}, {|y:2|}); + testMethod({|x:|}-5, {|y:|}2); } } @@ -116,7 +116,7 @@ class A } void Main() { - testMethod({|x:(int)(double)(int)5.5|}, {|y:2|}); + testMethod({|x:|}(int)(double)(int)5.5, {|y:|}2); } } @@ -140,7 +140,7 @@ class A } void Main() { - testMethod({|x:(int)5.5|}, {|y:new object()|}); + testMethod({|x:|}(int)5.5, {|y:|}new object()); } } @@ -164,7 +164,7 @@ class A } void Main() { - testMethod({|x:(int)-5.5|}, {|y:new object()|}); + testMethod({|x:|}(int)-5.5, {|y:|}new object()); } } @@ -188,7 +188,7 @@ class A } void Main() { - testMethod({|x:-(int)5.5|}, {|y:new object()|}); + testMethod({|x:|}-(int)5.5, {|y:|}new object()); } } @@ -240,7 +240,7 @@ class Test static void Main() { D cd1 = new D(C.M1); - cd1({|x:-1|}); + cd1({|x:|}-1); } } @@ -282,7 +282,7 @@ class A public void Main(string[] args) { - UseParams({|list:1|}, 2, 3, 4, 5, 6); + UseParams({|list:|}1, 2, 3, 4, 5, 6); } } @@ -300,7 +300,7 @@ class A using System; -[Obsolete({|message:"test"|})] +[Obsolete({|message:|}"test")] class Foo { @@ -327,7 +327,7 @@ class A } void Main() { - testMethod({|x:-(int)5.5|},); + testMethod({|x:|}-(int)5.5,); } } @@ -351,7 +351,7 @@ class A } void Main() { - testMethod({|x:$""|}); + testMethod({|x:|}$""); } } @@ -369,7 +369,7 @@ class A record Base(int Alice, int Bob); -record Derived(int Other) : Base({|Alice:2|}, {|Bob:2|}); +record Derived(int Other) : Base({|Alice:|}2, {|Bob:|}2); @@ -390,7 +390,7 @@ class Base } class Derived : Base { - public Derived() : base({|paramName:20|}) {} + public Derived() : base({|paramName:|}20) {} } @@ -464,7 +464,7 @@ class A void Main() { - EnableLogging({|value:"IO"|}); + EnableLogging({|value:|}"IO"); } } @@ -489,7 +489,7 @@ class A void Main() { - DisableLogging({|value:"IO"|}); + DisableLogging({|value:|}"IO"); } } @@ -539,7 +539,7 @@ class A void Main() { - SetClassification({|values:"IO"|}); + SetClassification({|values:|}"IO"); } } @@ -589,7 +589,7 @@ class A void Main() { - Goo({|objA:1|}, {|objB:2|}, {|nonobjC:3|}); + Goo({|objA:|}1, {|objB:|}2, {|nonobjC:|}3); } } @@ -639,7 +639,7 @@ class A void Main() { - Goo({|obj1:1|}, {|obj2:2|}, {|nonobj3:3|}); + Goo({|obj1:|}1, {|obj2:|}2, {|nonobj3:|}3); } } diff --git a/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb b/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb index f499754d9c4e0..2bc85485d97ec 100644 --- a/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb +++ b/src/EditorFeatures/Test2/InlineHints/VisualBasicInlineParameterNameHintsTests.vb @@ -36,7 +36,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Class Foo Sub Main(args As String()) - TestMethod({|x:5|}) + TestMethod({|x:|}5) End Sub Sub TestMethod(x As Integer) @@ -58,7 +58,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Class Foo Sub Main(args As String()) - TestMethod({|x:5|}, {|y:2.2|}) + TestMethod({|x:|}5, {|y:|}2.2) End Sub Sub TestMethod(x As Integer, y As Double) @@ -80,7 +80,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Class Foo Sub Main(args As String()) - TestMethod({|x:-5|}, {|y:2.2|}) + TestMethod({|x:|}-5, {|y:|}2.2) End Sub Sub TestMethod(x As Integer, y As Double) @@ -102,7 +102,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Class Foo Sub Main(args As String()) - TestMethod({|x:CInt(5.5)|}, {|y:2.2|}) + TestMethod({|x:|}CInt(5.5), {|y:|}2.2) End Sub Sub TestMethod(x As Integer, y As Double) @@ -124,7 +124,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Class Foo Sub Main(args As String()) - TestMethod({|x:CType(5.5, Integer)|}, {|y:2.2|}) + TestMethod({|x:|}CType(5.5, Integer), {|y:|}2.2) End Sub Sub TestMethod(x As Integer, y As Double) @@ -150,7 +150,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints End Sub Public Sub Main() - test({|x:TryCast(New Object(), String)|}) + test({|x:|}TryCast(New Object(), String)) End Sub End Class @@ -172,7 +172,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints End Sub Public Sub Main() - test({|x:DirectCast(New Object(), String)|}) + test({|x:|}DirectCast(New Object(), String)) End Sub End Class @@ -190,7 +190,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Class Foo Sub Main(args As String()) - TestMethod({|x:CInt(-5.5)|}, {|y:2.2|}) + TestMethod({|x:|}CInt(-5.5), {|y:|}2.2) End Sub Sub TestMethod(x As Integer, y As Double) @@ -212,7 +212,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Class Foo Sub Main(args As String()) - TestMethod({|x:CInt(-5.5)|}, {|y:2.2|}, {|obj:New Object()|}) + TestMethod({|x:|}CInt(-5.5), {|y:|}2.2, {|obj:|}New Object()) End Sub Sub TestMethod(x As Integer, y As Double, obj As Object) @@ -258,7 +258,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Public Delegate Sub TestDelegate(ByVal str As String) Public Sub TestTheDelegate(ByVal test As TestDelegate) - test({|str:"Test"|}) + test({|str:|}"Test") End Sub End Class @@ -280,7 +280,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints End Sub Public Sub Main() - UseParams({|args:1|}, 2, 3, 4, 5) + UseParams({|args:|}1, 2, 3, 4, 5) End Sub End Class @@ -296,7 +296,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints - <Obsolete({|message:"test"|})> + <Obsolete({|message:|}"test")> Public Class Foo Sub TestMethod() @@ -317,7 +317,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Class Foo Sub Main(args As String()) - TestMethod({|x:5|},) + TestMethod({|x:|}5,) End Sub Sub TestMethod(x As Integer, y As Double) @@ -339,7 +339,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.InlineHints Class Foo Sub Main(args As String()) - TestMethod({|x:$""|}) + TestMethod({|x:|}$"") End Sub Sub TestMethod(x As String) @@ -409,7 +409,7 @@ class A end sub sub Main() - EnableLogging({|value:"IO"|}) + EnableLogging({|value:|}"IO") end sub end class @@ -431,7 +431,7 @@ class A end sub sub Main() - DisableLogging({|value:"IO"|}) + DisableLogging({|value:|}"IO") end sub end class @@ -475,7 +475,7 @@ class A end sub sub Main() - SetClassification({|values:"IO"|}) + SetClassification({|values:|}"IO") end sub end class @@ -519,7 +519,7 @@ class A end sub sub Main() - Goo({|objA:1|}, {|objB:2|}, {|nonobjC:3|}) + Goo({|objA:|}1, {|objB:|}2, {|nonobjC:|}3) end sub end class @@ -563,7 +563,7 @@ class A end sub sub Main() - Goo({|obj1:1|}, {|obj2:2|}, {|nonobj3:3|}) + Goo({|obj1:|}1, {|obj2:|}2, {|nonobj3:|}3) end sub end class From 428d82f9d86fcece5289195b6fb8f9f982a34636 Mon Sep 17 00:00:00 2001 From: Manish Vasani Date: Fri, 9 Oct 2020 13:00:03 -0700 Subject: [PATCH 42/68] Fix tests --- .../IDEDiagnosticIDConfigurationTests.cs | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/EditorFeatures/Test/Diagnostics/IDEDiagnosticIDConfigurationTests.cs b/src/EditorFeatures/Test/Diagnostics/IDEDiagnosticIDConfigurationTests.cs index ae25354ec66bb..ee3e1a24a96bd 100644 --- a/src/EditorFeatures/Test/Diagnostics/IDEDiagnosticIDConfigurationTests.cs +++ b/src/EditorFeatures/Test/Diagnostics/IDEDiagnosticIDConfigurationTests.cs @@ -833,8 +833,17 @@ No editorconfig based code style option # IDE0046, PreferConditionalExpressionOverReturn dotnet_style_prefer_conditional_expression_over_return = true:silent -# IDE0047 -No editorconfig based code style option +# IDE0047, ArithmeticBinaryParentheses +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent + +# IDE0047, OtherBinaryParentheses +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent + +# IDE0047, OtherParentheses +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent + +# IDE0047, RelationalBinaryParentheses +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent # IDE0048, ArithmeticBinaryParentheses dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent @@ -1066,8 +1075,17 @@ No editorconfig based code style option # IDE0046, PreferConditionalExpressionOverReturn dotnet_style_prefer_conditional_expression_over_return = true:silent -# IDE0047 -No editorconfig based code style option +# IDE0047, ArithmeticBinaryParentheses +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent + +# IDE0047, OtherBinaryParentheses +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent + +# IDE0047, OtherParentheses +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent + +# IDE0047, RelationalBinaryParentheses +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent # IDE0048, ArithmeticBinaryParentheses dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent From dc7b96524dd6ba6d110dd6e26b75b29eb6a26754 Mon Sep 17 00:00:00 2001 From: Sam Harwell Date: Fri, 9 Oct 2020 15:51:24 -0700 Subject: [PATCH 43/68] Suppress assertion failures coming from ChangedText.Merge See #47234 --- .../ServiceHub/Services/Host/ThrowingTraceListener.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Workspaces/Remote/ServiceHub/Services/Host/ThrowingTraceListener.cs b/src/Workspaces/Remote/ServiceHub/Services/Host/ThrowingTraceListener.cs index 3df706365872a..33ccb37e77a88 100644 --- a/src/Workspaces/Remote/ServiceHub/Services/Host/ThrowingTraceListener.cs +++ b/src/Workspaces/Remote/ServiceHub/Services/Host/ThrowingTraceListener.cs @@ -11,6 +11,16 @@ internal sealed class ThrowingTraceListener : TraceListener { public override void Fail(string message, string detailMessage) { + var stackTrace = new StackTrace(); + foreach (var frame in stackTrace.GetFrames()) + { + if (frame.GetMethod()?.DeclaringType?.FullName?.Contains("ChangedText") ?? false) + { + // 😢 https://github.com/dotnet/roslyn/issues/47234 + return; + } + } + throw new InvalidOperationException(message + Environment.NewLine + detailMessage); } From a6c6908d70413a43be9b29e53531faced216edc4 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 9 Oct 2020 15:57:01 -0700 Subject: [PATCH 44/68] Update PreRelease version for Preview 5 --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index 9a535d4a8f89f..d32f03963551b 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -8,7 +8,7 @@ 3 8 0 - 4 + 5 $(MajorVersion).$(MinorVersion).$(PatchVersion) @@ -57,7 +57,6 @@ 5.7.0 16.7.50 -