From 6a3e73e289e2ba1123c7b9d472e52c062fbcc43b Mon Sep 17 00:00:00 2001 From: Youssef Victor Date: Sun, 23 Apr 2023 13:28:27 +0200 Subject: [PATCH 1/2] Use discarded use site info for LookupSymbols scenario --- .../CSharp/Portable/Compilation/CSharpSemanticModel.cs | 2 +- src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs | 4 ++-- .../CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs | 6 ++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs b/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs index 2ca4150db5114..35b2bc58b3301 100644 --- a/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs +++ b/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs @@ -1667,7 +1667,7 @@ private ImmutableArray LookupSymbolsInternal( TypeSymbol containingType = (TypeSymbol)container; foreach (MethodSymbol extensionMethod in lookupResult.Symbols) { - var reduced = extensionMethod.ReduceExtensionMethod(containingType, Compilation); + var reduced = extensionMethod.ReduceExtensionMethod(containingType, Compilation, discardUseSiteInfo: true); if ((object)reduced != null) { results.Add(reduced.GetPublicSymbol()); diff --git a/src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs b/src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs index e359a98d68fa7..0db6182230402 100644 --- a/src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs @@ -738,7 +738,7 @@ public override TResult Accept(CSharpSymbolVisitor visitor) /// The compilation in which constraints should be checked. /// Should not be null, but if it is null we treat constraints as we would in the latest /// language version. - public MethodSymbol ReduceExtensionMethod(TypeSymbol receiverType, CSharpCompilation compilation) + public MethodSymbol ReduceExtensionMethod(TypeSymbol receiverType, CSharpCompilation compilation, bool discardUseSiteInfo = false) { if ((object)receiverType == null) { @@ -750,7 +750,7 @@ public MethodSymbol ReduceExtensionMethod(TypeSymbol receiverType, CSharpCompila return null; } - return ReducedExtensionMethodSymbol.Create(this, receiverType, compilation); + return ReducedExtensionMethodSymbol.Create(this, receiverType, compilation, discardUseSiteInfo); } /// diff --git a/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs b/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs index c59e90fd57611..03ac48a2061cc 100644 --- a/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs @@ -34,13 +34,15 @@ internal sealed class ReducedExtensionMethodSymbol : MethodSymbol /// /// Compilation used to check constraints. /// The latest language version is assumed if this is null. - public static MethodSymbol Create(MethodSymbol method, TypeSymbol receiverType, CSharpCompilation compilation) + public static MethodSymbol Create(MethodSymbol method, TypeSymbol receiverType, CSharpCompilation compilation, bool discardUseSiteInfo = false) { Debug.Assert(method.IsExtensionMethod && method.MethodKind != MethodKind.ReducedExtension); Debug.Assert(method.ParameterCount > 0); Debug.Assert((object)receiverType != null); - var useSiteInfo = CompoundUseSiteInfo.DiscardedDependencies; + var useSiteInfo = discardUseSiteInfo + ? CompoundUseSiteInfo.Discarded + : CompoundUseSiteInfo.DiscardedDependencies; method = InferExtensionMethodTypeArguments(method, receiverType, compilation, ref useSiteInfo); if ((object)method == null) From dfab812062ea06fc26c7a391d976469e828c67b8 Mon Sep 17 00:00:00 2001 From: Youssef Victor Date: Sun, 23 Apr 2023 15:06:58 +0200 Subject: [PATCH 2/2] chore: Fix assertion --- .../CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs b/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs index 03ac48a2061cc..ee6faafc48719 100644 --- a/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs +++ b/src/Compilers/CSharp/Portable/Symbols/ReducedExtensionMethodSymbol.cs @@ -57,7 +57,7 @@ public static MethodSymbol Create(MethodSymbol method, TypeSymbol receiverType, return null; } - if (useSiteInfo.Diagnostics != null) + if (!discardUseSiteInfo && useSiteInfo.Diagnostics != null) { foreach (var diag in useSiteInfo.Diagnostics) {