Skip to content

Commit 49cacb3

Browse files
committed
Fix condition to use default member case in IndexDefaultBinding
1 parent 80948b8 commit 49cacb3

File tree

2 files changed

+53
-8
lines changed

2 files changed

+53
-8
lines changed

Rubberduck.Parsing/Binding/Bindings/IndexDefaultBinding.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,16 @@ private IBoundExpression Resolve(IBoundExpression lExpression, ArgumentList argu
102102

103103
break;
104104
}
105-
}
106105

107-
if (IsVariablePropertyFunctionWithoutParameters(lExpression))
108-
{
109-
var parameterlessLExpressionAccess = ResolveLExpressionIsVariablePropertyFunctionNoParameters(lExpression, argumentList, expression, defaultMemberResolutionRecursionDepth, containedExpression);
110-
if (parameterlessLExpressionAccess != null)
106+
if (IsVariablePropertyFunctionWithoutParameters(lExpression))
111107
{
112-
return parameterlessLExpressionAccess;
108+
var parameterlessLExpressionAccess = ResolveLExpressionIsVariablePropertyFunctionNoParameters(lExpression, argumentList, expression, defaultMemberResolutionRecursionDepth, containedExpression);
109+
if (parameterlessLExpressionAccess != null)
110+
{
111+
return parameterlessLExpressionAccess;
112+
}
113113
}
114-
}
114+
}
115115
}
116116

117117
if (lExpression.Classification == ExpressionClassification.Property

RubberduckTests/Grammar/ResolverTests.cs

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4161,7 +4161,6 @@ End Function
41614161
{
41624162
var module = state.DeclarationFinder.AllModules.First(qmn => qmn.ComponentName == "Module1");
41634163
var qualifiedSelection = new QualifiedSelection(module, selection);
4164-
var references = state.DeclarationFinder.IdentifierReferences(qualifiedSelection).ToList();
41654164
var reference = state.DeclarationFinder.IdentifierReferences(qualifiedSelection).Last();
41664165
var referencedDeclaration = reference.Declaration;
41674166

@@ -4174,6 +4173,52 @@ End Function
41744173
}
41754174
}
41764175

4176+
[Category("Grammar")]
4177+
[Category("Resolver")]
4178+
[Test]
4179+
public void IndexExpressionWithoutArgumentsOnFunctionReturningClassWithParameterlessDefaultMemberReferencesFunction()
4180+
{
4181+
var classCode = @"
4182+
Public Function Foo() As String
4183+
Attribute Foo.VB_UserMemId = 0
4184+
End Function
4185+
";
4186+
4187+
var moduleCode = @"
4188+
Private Sub Bar()
4189+
Dim baz As Class1
4190+
Set baz = Foo()
4191+
End Sub
4192+
4193+
Private Function Foo() As Class1
4194+
End Function
4195+
";
4196+
4197+
var vbe = MockVbeBuilder.BuildFromModules(
4198+
("Class1", classCode, ComponentType.ClassModule),
4199+
("Module1", moduleCode, ComponentType.StandardModule));
4200+
4201+
var selection = new Selection(4, 15, 4, 18);
4202+
4203+
using (var state = Resolve(vbe.Object))
4204+
{
4205+
var module = state.DeclarationFinder.AllModules.First(qmn => qmn.ComponentName == "Module1");
4206+
var qualifiedSelection = new QualifiedSelection(module, selection);
4207+
var reference = state.DeclarationFinder.IdentifierReferences(qualifiedSelection).Last();
4208+
var referencedDeclaration = reference.Declaration;
4209+
4210+
var expectedReferencedDeclarationName = "Module1.Foo";
4211+
var actualReferencedDeclarationName = $"{referencedDeclaration.ComponentName}.{referencedDeclaration.IdentifierName}";
4212+
4213+
var expectedAsTypeName = "Class1";
4214+
var actualAsTypeName = referencedDeclaration.AsTypeName;
4215+
4216+
Assert.AreEqual(expectedReferencedDeclarationName, actualReferencedDeclarationName);
4217+
Assert.AreEqual(expectedAsTypeName, actualAsTypeName);
4218+
Assert.AreEqual(0, reference.DefaultMemberRecursionDepth);
4219+
}
4220+
}
4221+
41774222
[Category("Grammar")]
41784223
[Category("Resolver")]
41794224
[Test]

0 commit comments

Comments
 (0)