diff --git a/src/Compilers/CSharp/Portable/Binder/Binder_Lookup.cs b/src/Compilers/CSharp/Portable/Binder/Binder_Lookup.cs
index e9cede1b4a55e89828051933ed97d4218fd7ecc0..60b142ed0305faca08448cb3f93aa7100ac6c9f7 100644
--- a/src/Compilers/CSharp/Portable/Binder/Binder_Lookup.cs
+++ b/src/Compilers/CSharp/Portable/Binder/Binder_Lookup.cs
@@ -1240,12 +1240,19 @@ private CSDiagnosticInfo MakeCallMethodsDirectlyDiagnostic(Symbol symbol)
///
/// Does not consider - that is left to the caller.
///
- internal bool CanAddLookupSymbolInfo(Symbol symbol, LookupOptions options, TypeSymbol accessThroughType)
+ internal bool CanAddLookupSymbolInfo(Symbol symbol, LookupOptions options, LookupSymbolsInfo info, TypeSymbol accessThroughType, AliasSymbol aliasSymbol = null)
{
Debug.Assert(symbol.Kind != SymbolKind.Alias, "It is the caller's responsibility to unwrap aliased symbols.");
+ Debug.Assert(aliasSymbol == null || aliasSymbol.GetAliasTarget(basesBeingResolved: null) == symbol);
Debug.Assert(options.AreValid());
HashSet useSiteDiagnostics = null;
+ var name = aliasSymbol != null ? aliasSymbol.Name : symbol.Name;
+ if (!info.CanBeAdded(name))
+ {
+ return false;
+ }
+
if ((options & LookupOptions.NamespacesOrTypesOnly) != 0 && !(symbol is NamespaceOrTypeSymbol))
{
return false;
@@ -1559,7 +1566,7 @@ private static void AddMemberLookupSymbolsInfoInNamespace(LookupSymbolsInfo resu
{
foreach (var symbol in GetCandidateMembers(ns, options, originalBinder))
{
- if (originalBinder.CanAddLookupSymbolInfo(symbol, options, null))
+ if (originalBinder.CanAddLookupSymbolInfo(symbol, options, result, null))
{
result.AddSymbol(symbol, symbol.Name, symbol.GetArity());
}
@@ -1570,7 +1577,7 @@ private static void AddMemberLookupSymbolsInfoWithoutInheritance(LookupSymbolsIn
{
foreach (var symbol in GetCandidateMembers(type, options, originalBinder))
{
- if (originalBinder.CanAddLookupSymbolInfo(symbol, options, accessThroughType))
+ if (originalBinder.CanAddLookupSymbolInfo(symbol, options, result, accessThroughType))
{
result.AddSymbol(symbol, symbol.Name, symbol.GetArity());
}
diff --git a/src/Compilers/CSharp/Portable/Binder/Imports.cs b/src/Compilers/CSharp/Portable/Binder/Imports.cs
index f618a4ab2ff0364d0abc32979be32e102b0be184..c28c1b2626ed0d09b5b6707bba7c4672228e88b4 100644
--- a/src/Compilers/CSharp/Portable/Binder/Imports.cs
+++ b/src/Compilers/CSharp/Portable/Binder/Imports.cs
@@ -838,7 +838,7 @@ internal void AddLookupSymbolsInfoInAliases(LookupSymbolsInfo result, LookupOpti
private static void AddAliasSymbolToResult(LookupSymbolsInfo result, AliasSymbol aliasSymbol, LookupOptions options, Binder originalBinder)
{
var targetSymbol = aliasSymbol.GetAliasTarget(basesBeingResolved: null);
- if (originalBinder.CanAddLookupSymbolInfo(targetSymbol, options, null))
+ if (originalBinder.CanAddLookupSymbolInfo(targetSymbol, options, result, accessThroughType: null, aliasSymbol: aliasSymbol))
{
result.AddSymbol(aliasSymbol, aliasSymbol.Name, 0);
}
@@ -859,7 +859,7 @@ private static void AddAliasSymbolToResult(LookupSymbolsInfo result, AliasSymbol
{
foreach (var member in namespaceSymbol.NamespaceOrType.GetMembersUnordered())
{
- if (IsValidLookupCandidateInUsings(member) && originalBinder.CanAddLookupSymbolInfo(member, options, null))
+ if (IsValidLookupCandidateInUsings(member) && originalBinder.CanAddLookupSymbolInfo(member, options, result, null))
{
result.AddSymbol(member, member.Name, member.GetArity());
}
diff --git a/src/Compilers/CSharp/Portable/Binder/InMethodBinder.cs b/src/Compilers/CSharp/Portable/Binder/InMethodBinder.cs
index 65163cc2674174815b6256af3893948d44ee7127..d623a7d5d55b02d3d61694c5ba86938207edd836 100644
--- a/src/Compilers/CSharp/Portable/Binder/InMethodBinder.cs
+++ b/src/Compilers/CSharp/Portable/Binder/InMethodBinder.cs
@@ -224,7 +224,7 @@ protected override void AddLookupSymbolsInfoInSingleBinder(LookupSymbolsInfo res
{
foreach (var parameter in _methodSymbol.Parameters)
{
- if (originalBinder.CanAddLookupSymbolInfo(parameter, options, null))
+ if (originalBinder.CanAddLookupSymbolInfo(parameter, options, result, null))
{
result.AddSymbol(parameter, parameter.Name, 0);
}
diff --git a/src/Compilers/CSharp/Portable/Binder/LocalScopeBinder.cs b/src/Compilers/CSharp/Portable/Binder/LocalScopeBinder.cs
index 8f9ba2efa90a1c3c5aed9679a7dcd8b525672ea9..09af2badc358eb20ab8693678e7f001857973018 100644
--- a/src/Compilers/CSharp/Portable/Binder/LocalScopeBinder.cs
+++ b/src/Compilers/CSharp/Portable/Binder/LocalScopeBinder.cs
@@ -399,7 +399,7 @@ protected override void AddLookupSymbolsInfoInSingleBinder(LookupSymbolsInfo res
{
foreach (var local in this.LocalsMap)
{
- if (originalBinder.CanAddLookupSymbolInfo(local.Value, options, null))
+ if (originalBinder.CanAddLookupSymbolInfo(local.Value, options, result, null))
{
result.AddSymbol(local.Value, local.Key, 0);
}
@@ -409,7 +409,7 @@ protected override void AddLookupSymbolsInfoInSingleBinder(LookupSymbolsInfo res
{
foreach (var local in this.LocalFunctionsMap)
{
- if (originalBinder.CanAddLookupSymbolInfo(local.Value, options, null))
+ if (originalBinder.CanAddLookupSymbolInfo(local.Value, options, result, null))
{
result.AddSymbol(local.Value, local.Key, 0);
}
diff --git a/src/Compilers/CSharp/Portable/Binder/WithClassTypeParametersBinder.cs b/src/Compilers/CSharp/Portable/Binder/WithClassTypeParametersBinder.cs
index 4dc51f56e438f073d66eadb94ebfcc5535c3d4e3..6e6ffb845d0faa436e19512973079ef0153afa0b 100644
--- a/src/Compilers/CSharp/Portable/Binder/WithClassTypeParametersBinder.cs
+++ b/src/Compilers/CSharp/Portable/Binder/WithClassTypeParametersBinder.cs
@@ -51,7 +51,7 @@ protected override void AddLookupSymbolsInfoInSingleBinder(LookupSymbolsInfo res
{
foreach (var parameter in _namedType.TypeParameters)
{
- if (originalBinder.CanAddLookupSymbolInfo(parameter, options, null))
+ if (originalBinder.CanAddLookupSymbolInfo(parameter, options, result, null))
{
result.AddSymbol(parameter, parameter.Name, 0);
}
diff --git a/src/Compilers/CSharp/Portable/Binder/WithCrefTypeParametersBinder.cs b/src/Compilers/CSharp/Portable/Binder/WithCrefTypeParametersBinder.cs
index 047b097dd5d986fab9ef15476a1f6368081d7355..a2e2343e5704771bcbb641cbc86a35f582a36c56 100644
--- a/src/Compilers/CSharp/Portable/Binder/WithCrefTypeParametersBinder.cs
+++ b/src/Compilers/CSharp/Portable/Binder/WithCrefTypeParametersBinder.cs
@@ -141,7 +141,7 @@ protected override void AddLookupSymbolsInfoInSingleBinder(LookupSymbolsInfo res
foreach (TypeParameterSymbol typeParameter in kvp.Value)
{
// In any context where this binder applies, the type parameters are always viable/speakable.
- Debug.Assert(originalBinder.CanAddLookupSymbolInfo(typeParameter, options, null));
+ Debug.Assert(!result.CanBeAdded(typeParameter.Name) || originalBinder.CanAddLookupSymbolInfo(typeParameter, options, result, null));
result.AddSymbol(typeParameter, kvp.Key, 0);
}
diff --git a/src/Compilers/CSharp/Portable/Binder/WithLambdaParametersBinder.cs b/src/Compilers/CSharp/Portable/Binder/WithLambdaParametersBinder.cs
index 657b51f6585bb325aacb23c503fa101cd3f14406..791fa0f9c8475d5d9ee50e4a554451a51e3c3c83 100644
--- a/src/Compilers/CSharp/Portable/Binder/WithLambdaParametersBinder.cs
+++ b/src/Compilers/CSharp/Portable/Binder/WithLambdaParametersBinder.cs
@@ -100,7 +100,7 @@ protected override void AddLookupSymbolsInfoInSingleBinder(LookupSymbolsInfo res
{
foreach (var parameter in lambdaSymbol.Parameters)
{
- if (originalBinder.CanAddLookupSymbolInfo(parameter, options, null))
+ if (originalBinder.CanAddLookupSymbolInfo(parameter, options, result, null))
{
result.AddSymbol(parameter, parameter.Name, 0);
}
diff --git a/src/Compilers/CSharp/Portable/Binder/WithMethodTypeParametersBinder.cs b/src/Compilers/CSharp/Portable/Binder/WithMethodTypeParametersBinder.cs
index e27701c5935f02dbceb062aa780b07dec8aaff66..279522d8a17c200b386a206c60331937e5e876cb 100644
--- a/src/Compilers/CSharp/Portable/Binder/WithMethodTypeParametersBinder.cs
+++ b/src/Compilers/CSharp/Portable/Binder/WithMethodTypeParametersBinder.cs
@@ -61,7 +61,7 @@ protected override void AddLookupSymbolsInfoInSingleBinder(LookupSymbolsInfo res
{
foreach (var parameter in _methodSymbol.TypeParameters)
{
- if (originalBinder.CanAddLookupSymbolInfo(parameter, options, null))
+ if (originalBinder.CanAddLookupSymbolInfo(parameter, options, result, null))
{
result.AddSymbol(parameter, parameter.Name, 0);
}
diff --git a/src/Compilers/CSharp/Portable/Binder/WithParametersBinder.cs b/src/Compilers/CSharp/Portable/Binder/WithParametersBinder.cs
index 7729d7d57a6ec9fce8cf97d78373a2beaad86f8f..adacebbddbf1b455f5692cba034d17a456575d36 100644
--- a/src/Compilers/CSharp/Portable/Binder/WithParametersBinder.cs
+++ b/src/Compilers/CSharp/Portable/Binder/WithParametersBinder.cs
@@ -29,7 +29,7 @@ protected override void AddLookupSymbolsInfoInSingleBinder(LookupSymbolsInfo res
{
foreach (var parameter in _parameters)
{
- if (originalBinder.CanAddLookupSymbolInfo(parameter, options, null))
+ if (originalBinder.CanAddLookupSymbolInfo(parameter, options, result, null))
{
result.AddSymbol(parameter, parameter.Name, 0);
}
diff --git a/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs b/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs
index d634bd24e49cdc58ab9895d39905706d7a883740..f6d114daaffc2cfbbd5d0ee5c602865f20ae0f86 100644
--- a/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs
+++ b/src/Compilers/CSharp/Portable/Compilation/CSharpSemanticModel.cs
@@ -1510,6 +1510,7 @@ private void CheckModelAndSyntaxNodeToSpeculate(CSharpSyntaxNode syntax)
}
var info = LookupSymbolsInfo.GetInstance();
+ info.FilterName = name;
if ((object)container == null)
{
diff --git a/src/Compilers/Core/Portable/Binding/AbstractLookupSymbolsInfo.cs b/src/Compilers/Core/Portable/Binding/AbstractLookupSymbolsInfo.cs
index cea3e086efe6989f4fa221a962d27f9cbf594e86..59dedf2f108e88cbdacc381d83a77dee6e4711a7 100644
--- a/src/Compilers/Core/Portable/Binding/AbstractLookupSymbolsInfo.cs
+++ b/src/Compilers/Core/Portable/Binding/AbstractLookupSymbolsInfo.cs
@@ -222,13 +222,18 @@ public int Count
#endif
}
+ private readonly IEqualityComparer _comparer;
private readonly Dictionary _nameMap;
+ internal string FilterName { private get; set; }
protected AbstractLookupSymbolsInfo(IEqualityComparer comparer)
{
+ _comparer = comparer;
_nameMap = new Dictionary(comparer);
}
+ public bool CanBeAdded(string name) => FilterName == null || _comparer.Equals(name, FilterName);
+
public void AddSymbol(TSymbol symbol, string name, int arity)
{
UniqueSymbolOrArities pair;
@@ -273,6 +278,8 @@ public void AddSymbol(TSymbol symbol, string name, int arity)
out IArityEnumerable arities,
out TSymbol uniqueSymbol)
{
+ Debug.Assert(CanBeAdded(name));
+
UniqueSymbolOrArities pair;
if (!_nameMap.TryGetValue(name, out pair))
{
@@ -287,6 +294,10 @@ public void AddSymbol(TSymbol symbol, string name, int arity)
return true;
}
- public void Clear() => _nameMap.Clear();
+ public void Clear()
+ {
+ _nameMap.Clear();
+ FilterName = null;
+ }
}
}
diff --git a/src/Compilers/VisualBasic/Portable/Binding/Binder_Lookup.vb b/src/Compilers/VisualBasic/Portable/Binding/Binder_Lookup.vb
index ffce0cae9a64108e5fe84ea9502f84747af31f1f..44f0dffc273f20ee20cdeb29a7c9a4e9d8dc22a1 100644
--- a/src/Compilers/VisualBasic/Portable/Binding/Binder_Lookup.vb
+++ b/src/Compilers/VisualBasic/Portable/Binding/Binder_Lookup.vb
@@ -274,11 +274,17 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
'''
Friend Function CanAddLookupSymbolInfo(sym As Symbol,
options As LookupOptions,
+ nameSet As LookupSymbolsInfo,
accessThroughType As TypeSymbol) As Boolean
+ Debug.Assert(sym IsNot Nothing)
+
+ If Not nameSet.CanBeAdded(sym.Name) Then
+ Return False
+ End If
+
Dim singleResult = CheckViability(sym, -1, options, accessThroughType, useSiteDiagnostics:=Nothing)
- If sym IsNot Nothing AndAlso
- (options And LookupOptions.MethodsOnly) <> 0 AndAlso
+ If (options And LookupOptions.MethodsOnly) <> 0 AndAlso
sym.Kind <> SymbolKind.Method Then
Return False
End If
@@ -524,7 +530,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' Add names from the namespace
For Each sym In container.GetMembersUnordered()
' UNDONE: filter by options
- If binder.CanAddLookupSymbolInfo(sym, options, Nothing) Then
+ If binder.CanAddLookupSymbolInfo(sym, options, nameSet, Nothing) Then
nameSet.AddSymbol(sym, sym.Name, sym.GetArity())
End If
Next
@@ -2081,7 +2087,7 @@ ExitForFor:
' validate them.
If TypeOf container Is NamedTypeSymbol Then
For Each sym In container.GetTypeMembersUnordered()
- If binder.CanAddLookupSymbolInfo(sym, options, accessThroughType) Then
+ If binder.CanAddLookupSymbolInfo(sym, options, nameSet, accessThroughType) Then
nameSet.AddSymbol(sym, sym.Name, sym.Arity)
End If
Next
@@ -2089,7 +2095,7 @@ ExitForFor:
ElseIf (options And LookupOptions.LabelsOnly) = 0 Then
' Go through each member of the type.
For Each sym In container.GetMembersUnordered()
- If binder.CanAddLookupSymbolInfo(sym, options, accessThroughType) Then
+ If binder.CanAddLookupSymbolInfo(sym, options, nameSet, accessThroughType) Then
nameSet.AddSymbol(sym, sym.Name, sym.GetArity())
End If
Next
diff --git a/src/Compilers/VisualBasic/Portable/Binding/BlockBaseBinder.vb b/src/Compilers/VisualBasic/Portable/Binding/BlockBaseBinder.vb
index 4272e1a31d903c7ed8cf414a2a3355749c6f82aa..10b1437f7d5d55ac05df5bfda8f0c44a3f6cdd8e 100644
--- a/src/Compilers/VisualBasic/Portable/Binding/BlockBaseBinder.vb
+++ b/src/Compilers/VisualBasic/Portable/Binding/BlockBaseBinder.vb
@@ -89,7 +89,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Dim locals = Me.Locals
If Not locals.IsEmpty AndAlso (options And (LookupOptions.NamespacesOrTypesOnly Or LookupOptions.LabelsOnly)) = 0 Then
For Each localSymbol In locals
- If originalBinder.CanAddLookupSymbolInfo(localSymbol, options, Nothing) Then
+ If originalBinder.CanAddLookupSymbolInfo(localSymbol, options, nameSet, Nothing) Then
nameSet.AddSymbol(localSymbol, localSymbol.Name, 0)
End If
Next
diff --git a/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentCrefBinder_TypeParameters.vb b/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentCrefBinder_TypeParameters.vb
index cbf55653f9887a34cdd2caffa05d4d330c3baae0..18e69775732f07437eb60489f5e9326ab6aed6d2 100644
--- a/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentCrefBinder_TypeParameters.vb
+++ b/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentCrefBinder_TypeParameters.vb
@@ -43,7 +43,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
originalBinder As Binder)
For Each typeParameter In _typeParameters.Values
- If originalBinder.CanAddLookupSymbolInfo(typeParameter, options, Nothing) Then
+ If originalBinder.CanAddLookupSymbolInfo(typeParameter, options, nameSet, Nothing) Then
nameSet.AddSymbol(typeParameter, typeParameter.Name, 0)
End If
Next
diff --git a/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentParamBinder.vb b/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentParamBinder.vb
index 1cf47d25aff088f9e07efb681eadb694f45572a8..028d81dac30ad02ff0aeb7b45c1e009af3e24eab 100644
--- a/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentParamBinder.vb
+++ b/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentParamBinder.vb
@@ -78,7 +78,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End If
For Each parameter In Me.Parameters
- If originalBinder.CanAddLookupSymbolInfo(parameter, options, Nothing) Then
+ If originalBinder.CanAddLookupSymbolInfo(parameter, options, nameSet, Nothing) Then
nameSet.AddSymbol(parameter, parameter.Name, 0)
End If
Next
diff --git a/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentTypeParamBinder.vb b/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentTypeParamBinder.vb
index 4e53b0b5090f9c9d981d541c8c747df230784374..37cfb883c57204f7b3bd7b924b813ff26b2d978f 100644
--- a/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentTypeParamBinder.vb
+++ b/src/Compilers/VisualBasic/Portable/Binding/DocumentationCommentTypeParamBinder.vb
@@ -60,7 +60,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
If Not typeParameters.IsEmpty Then
For Each typeParameter In typeParameters
- If originalBinder.CanAddLookupSymbolInfo(typeParameter, options, Nothing) Then
+ If originalBinder.CanAddLookupSymbolInfo(typeParameter, options, nameSet, Nothing) Then
nameSet.AddSymbol(typeParameter, typeParameter.Name, 0)
End If
Next
diff --git a/src/Compilers/VisualBasic/Portable/Binding/ImplicitVariableBinder.vb b/src/Compilers/VisualBasic/Portable/Binding/ImplicitVariableBinder.vb
index cb08fe896ea8108b167f67105543919adb187ef5..4a5caf29c8c0c6b5511e5ac9c43795454135ca3f 100644
--- a/src/Compilers/VisualBasic/Portable/Binding/ImplicitVariableBinder.vb
+++ b/src/Compilers/VisualBasic/Portable/Binding/ImplicitVariableBinder.vb
@@ -231,7 +231,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
(options And (LookupOptions.NamespacesOrTypesOnly Or LookupOptions.LabelsOnly)) = 0 Then
For Each localSymbol In _implicitLocals.Values
- If originalBinder.CanAddLookupSymbolInfo(localSymbol, options, Nothing) Then
+ If originalBinder.CanAddLookupSymbolInfo(localSymbol, options, nameSet, Nothing) Then
nameSet.AddSymbol(localSymbol, localSymbol.Name, 0)
End If
Next
diff --git a/src/Compilers/VisualBasic/Portable/Binding/MethodTypeParametersBinder.vb b/src/Compilers/VisualBasic/Portable/Binding/MethodTypeParametersBinder.vb
index f87f9bb59119fdba12d0c220d3445a0c7617767c..d5444cf413394a5de51e7a932df774361db9ea1d 100644
--- a/src/Compilers/VisualBasic/Portable/Binding/MethodTypeParametersBinder.vb
+++ b/src/Compilers/VisualBasic/Portable/Binding/MethodTypeParametersBinder.vb
@@ -57,7 +57,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
originalBinder As Binder)
' UNDONE: check options to see if type parameters should be found.
For Each typeParameter In _typeParameters
- If originalBinder.CanAddLookupSymbolInfo(typeParameter, options, Nothing) Then
+ If originalBinder.CanAddLookupSymbolInfo(typeParameter, options, nameSet, Nothing) Then
nameSet.AddSymbol(typeParameter, typeParameter.Name, 0)
End If
Next
diff --git a/src/Compilers/VisualBasic/Portable/Binding/NamedTypeBinder.vb b/src/Compilers/VisualBasic/Portable/Binding/NamedTypeBinder.vb
index 2e19a1217ae3eec0424b34d0d4295752d0c79475..46cb23473b7ba5b69c153064338954df6e77bc7e 100644
--- a/src/Compilers/VisualBasic/Portable/Binding/NamedTypeBinder.vb
+++ b/src/Compilers/VisualBasic/Portable/Binding/NamedTypeBinder.vb
@@ -113,7 +113,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' UNDONE: filter using options.
If _typeSymbol.Arity > 0 Then
For Each tp In _typeSymbol.TypeParameters
- If originalBinder.CanAddLookupSymbolInfo(tp, options, Nothing) Then
+ If originalBinder.CanAddLookupSymbolInfo(tp, options, nameSet, Nothing) Then
nameSet.AddSymbol(tp, tp.Name, 0)
End If
Next
diff --git a/src/Compilers/VisualBasic/Portable/Binding/SubOrFunctionBodyBinder.vb b/src/Compilers/VisualBasic/Portable/Binding/SubOrFunctionBodyBinder.vb
index 5d8f86e48f54bf57e5700fba9e90d9f818530eec..99e1e45aedbebde903bf7f9a4c32d9a6a65fe09a 100644
--- a/src/Compilers/VisualBasic/Portable/Binding/SubOrFunctionBodyBinder.vb
+++ b/src/Compilers/VisualBasic/Portable/Binding/SubOrFunctionBodyBinder.vb
@@ -75,7 +75,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' UNDONE: additional filtering based on options?
If (options And (LookupOptions.NamespacesOrTypesOnly Or LookupOptions.LabelsOnly)) = 0 Then
For Each param In _parameterMap.Values
- If originalBinder.CanAddLookupSymbolInfo(param, options, Nothing) Then
+ If originalBinder.CanAddLookupSymbolInfo(param, options, nameSet, Nothing) Then
nameSet.AddSymbol(param, param.Name, 0)
End If
Next
diff --git a/src/Compilers/VisualBasic/Portable/Compilation/SemanticModel.vb b/src/Compilers/VisualBasic/Portable/Compilation/SemanticModel.vb
index 7cfcb5ae1d16de35c3fa09ec2423579b3d06f106..f9454ad56964d0c2dd118680f5bc90effbf6aaf8 100644
--- a/src/Compilers/VisualBasic/Portable/Compilation/SemanticModel.vb
+++ b/src/Compilers/VisualBasic/Portable/Compilation/SemanticModel.vb
@@ -1890,6 +1890,8 @@ _Default:
Else
' They provided a name. Find all the arities for that name, and then look all of those up.
Dim info = LookupSymbolsInfo.GetInstance()
+ info.FilterName = name
+
Me.AddLookupSymbolsInfo(position, info, container, options)
Dim results = ArrayBuilder(Of Symbol).GetInstance(info.Count)
diff --git a/src/Compilers/VisualBasic/Portable/Symbols/NamespaceOrTypeSymbol.vb b/src/Compilers/VisualBasic/Portable/Symbols/NamespaceOrTypeSymbol.vb
index bdcea2ffa3d3914ba5dda4e857f8a6f37723eb90..a9d096f4181bddb0333088168bfd0a77941dfb8b 100644
--- a/src/Compilers/VisualBasic/Portable/Symbols/NamespaceOrTypeSymbol.vb
+++ b/src/Compilers/VisualBasic/Portable/Symbols/NamespaceOrTypeSymbol.vb
@@ -215,7 +215,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols
If method.MayBeReducibleExtensionMethod Then
haveSeenExtensionMethod = True
- If AddExtensionMethodLookupSymbolsInfoViabilityCheck(method, options, originalBinder) Then
+ If AddExtensionMethodLookupSymbolsInfoViabilityCheck(method, options, nameSet, originalBinder) Then
nameSet.AddSymbol(member, member.Name, member.GetArity())
' Move to the next name.
@@ -239,9 +239,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols
Friend Overridable Function AddExtensionMethodLookupSymbolsInfoViabilityCheck(
method As MethodSymbol,
options As LookupOptions,
+ nameSet As LookupSymbolsInfo,
originalBinder As Binder
) As Boolean
- Return originalBinder.CanAddLookupSymbolInfo(method, options, accessThroughType:=method.ContainingType)
+ Return originalBinder.CanAddLookupSymbolInfo(method, options, nameSet, accessThroughType:=method.ContainingType)
End Function
'''
diff --git a/src/Compilers/VisualBasic/Portable/Symbols/Retargeting/RetargetingNamedTypeSymbol.vb b/src/Compilers/VisualBasic/Portable/Symbols/Retargeting/RetargetingNamedTypeSymbol.vb
index 4aacd55f7896e2f29ca5cd6101314048b0ee04e3..4dcc0c53cf406a55ddcfe70e95011dd5ce722df6 100644
--- a/src/Compilers/VisualBasic/Portable/Symbols/Retargeting/RetargetingNamedTypeSymbol.vb
+++ b/src/Compilers/VisualBasic/Portable/Symbols/Retargeting/RetargetingNamedTypeSymbol.vb
@@ -214,8 +214,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols.Retargeting
'''
''' Make sure we retarget methods when underlying type checks their viability.
'''
- Friend Overrides Function AddExtensionMethodLookupSymbolsInfoViabilityCheck(method As MethodSymbol, options As LookupOptions, originalBinder As Binder) As Boolean
- Return MyBase.AddExtensionMethodLookupSymbolsInfoViabilityCheck(RetargetingTranslator.Retarget(method), options, originalBinder)
+ Friend Overrides Function AddExtensionMethodLookupSymbolsInfoViabilityCheck(method As MethodSymbol, options As LookupOptions, nameSet As LookupSymbolsInfo, originalBinder As Binder) As Boolean
+ Return MyBase.AddExtensionMethodLookupSymbolsInfoViabilityCheck(RetargetingTranslator.Retarget(method), options, nameSet, originalBinder)
End Function
Friend Overrides Sub AddExtensionMethodLookupSymbolsInfo(nameSet As LookupSymbolsInfo,
diff --git a/src/Compilers/VisualBasic/Portable/Symbols/Retargeting/RetargetingNamespaceSymbol.vb b/src/Compilers/VisualBasic/Portable/Symbols/Retargeting/RetargetingNamespaceSymbol.vb
index ea51d3cec0492330c186260749fadcf931e5d420..a8b092b4690f5aeeee8d92f6c07ec374a88a8b7e 100644
--- a/src/Compilers/VisualBasic/Portable/Symbols/Retargeting/RetargetingNamespaceSymbol.vb
+++ b/src/Compilers/VisualBasic/Portable/Symbols/Retargeting/RetargetingNamespaceSymbol.vb
@@ -270,8 +270,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols.Retargeting
'''
''' Make sure we retarget methods when underlying namespace checks their viability.
'''
- Friend Overrides Function AddExtensionMethodLookupSymbolsInfoViabilityCheck(method As MethodSymbol, options As LookupOptions, originalBinder As Binder) As Boolean
- Return MyBase.AddExtensionMethodLookupSymbolsInfoViabilityCheck(RetargetingTranslator.Retarget(method), options, originalBinder)
+ Friend Overrides Function AddExtensionMethodLookupSymbolsInfoViabilityCheck(method As MethodSymbol, options As LookupOptions, nameSet As LookupSymbolsInfo, originalBinder As Binder) As Boolean
+ Return MyBase.AddExtensionMethodLookupSymbolsInfoViabilityCheck(RetargetingTranslator.Retarget(method), options, nameSet, originalBinder)
End Function
Friend Overrides Sub AddExtensionMethodLookupSymbolsInfo(nameSet As LookupSymbolsInfo,
diff --git a/src/ExpressionEvaluator/CSharp/Source/ExpressionCompiler/Binders/WithTypeArgumentsBinder.cs b/src/ExpressionEvaluator/CSharp/Source/ExpressionCompiler/Binders/WithTypeArgumentsBinder.cs
index 6a7eb4ee5f87ad5357ed63c687b5f1fe8fb242d6..ca4239d3795b5511bd1f762ab138c91d77c323f5 100644
--- a/src/ExpressionEvaluator/CSharp/Source/ExpressionCompiler/Binders/WithTypeArgumentsBinder.cs
+++ b/src/ExpressionEvaluator/CSharp/Source/ExpressionCompiler/Binders/WithTypeArgumentsBinder.cs
@@ -45,7 +45,7 @@ protected override void AddLookupSymbolsInfoInSingleBinder(LookupSymbolsInfo res
{
foreach (var parameter in _typeArguments)
{
- if (originalBinder.CanAddLookupSymbolInfo(parameter, options, null))
+ if (originalBinder.CanAddLookupSymbolInfo(parameter, options, result, null))
{
result.AddSymbol(parameter, parameter.Name, 0);
}
diff --git a/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/Binders/ParametersAndLocalsBinder.vb b/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/Binders/ParametersAndLocalsBinder.vb
index 92a94ebe30ab6f26e04b8690b047c7634a541338..63c9b38f8e2f53200fe878de7c2ae33076de6529 100644
--- a/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/Binders/ParametersAndLocalsBinder.vb
+++ b/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/Binders/ParametersAndLocalsBinder.vb
@@ -91,7 +91,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator
' UNDONE: additional filtering based on options?
If (options And (LookupOptions.NamespacesOrTypesOnly Or LookupOptions.LabelsOnly Or LookupOptions.MustNotBeLocalOrParameter)) = 0 Then
For Each symbol In _nameToSymbolMap.Values
- If originalBinder.CanAddLookupSymbolInfo(symbol, options, Nothing) Then
+ If originalBinder.CanAddLookupSymbolInfo(symbol, options, nameSet, Nothing) Then
nameSet.AddSymbol(symbol, symbol.Name, 0)
End If
Next