Skip to content

Commit 05036b0

Browse files
committed
Stop simple name expressions from resolving to Debug.Assert
This special handling is required as we changed Debug from a class to a standard module.
1 parent 9fd37a1 commit 05036b0

File tree

2 files changed

+76
-3
lines changed

2 files changed

+76
-3
lines changed

Rubberduck.Parsing/VBA/DeclarationCaching/DeclarationFinder.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1159,7 +1159,8 @@ public Declaration FindMemberReferencedProjectInModule(Declaration callingProjec
11591159
(Declaration.GetModuleParent(p) == null ||
11601160
Declaration.GetModuleParent(p).DeclarationType == moduleType));
11611161
var accessibleMembers = memberMatches.Where(m => AccessibilityCheck.IsMemberAccessible(callingProject, callingModule, callingParent, m));
1162-
var match = accessibleMembers.FirstOrDefault();
1162+
var match = accessibleMembers.FirstOrDefault(member => !(member.IdentifierName.Equals("Assert")
1163+
&& member.QualifiedModuleName.ComponentName.Equals("Debug")));
11631164
return match;
11641165
}
11651166

RubberduckTests/Grammar/ResolverTests.cs

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Threading;
5-
using System.Windows.Controls;
65
using NUnit.Framework;
76
using Rubberduck.Parsing.Symbols;
87
using Rubberduck.Parsing.VBA;
98
using RubberduckTests.Mocks;
109
using Rubberduck.Parsing.Annotations;
11-
using Rubberduck.Parsing.VBA.Extensions;
1210
using Rubberduck.VBEditor;
1311
using Rubberduck.VBEditor.SafeComWrappers;
1412
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
@@ -6713,5 +6711,79 @@ End Function
67136711
Assert.IsFalse(failedAccesses.Any());
67146712
}
67156713
}
6714+
6715+
[Category("Grammar")]
6716+
[Category("Resolver")]
6717+
[Test]
6718+
public void AssertWithoutDebug_NoReferenceToDebugAssert()
6719+
{
6720+
var classCode = @"
6721+
Public Function Foo(index As Variant) As Class1
6722+
Assert
6723+
End Function
6724+
";
6725+
6726+
var moduleCode = $@"
6727+
Private Function Test() As Variant
6728+
Assert
6729+
End Function
6730+
";
6731+
6732+
var vbe = new MockVbeBuilder()
6733+
.ProjectBuilder("TestProject", ProjectProtection.Unprotected)
6734+
.AddComponent("Class1", ComponentType.ClassModule, classCode)
6735+
.AddComponent("Module1", ComponentType.StandardModule, moduleCode)
6736+
.AddReference("VBA", MockVbeBuilder.LibraryPathVBA, 4, 2, true)
6737+
.AddProjectToVbeBuilder()
6738+
.Build();
6739+
6740+
using (var state = Resolve(vbe.Object))
6741+
{
6742+
var debugAssertDeclaration = state.DeclarationFinder
6743+
.BuiltInDeclarations(DeclarationType.Procedure)
6744+
.Single(declaration => declaration.IdentifierName.Equals("Assert")
6745+
&& declaration.QualifiedModuleName.ComponentName.Equals("Debug"));
6746+
var debugAssertReferences = debugAssertDeclaration.References;
6747+
6748+
Assert.IsFalse(debugAssertReferences.Any());
6749+
}
6750+
}
6751+
6752+
[Category("Grammar")]
6753+
[Category("Resolver")]
6754+
[Test]
6755+
public void AssertWithDebug_ReferenceToDebugAssert()
6756+
{
6757+
var classCode = @"
6758+
Public Function Foo(index As Variant) As Class1
6759+
Debug.Assert False
6760+
End Function
6761+
";
6762+
6763+
var moduleCode = $@"
6764+
Private Function Test() As Variant
6765+
Debug.Assert False
6766+
End Function
6767+
";
6768+
6769+
var vbe = new MockVbeBuilder()
6770+
.ProjectBuilder("TestProject", ProjectProtection.Unprotected)
6771+
.AddComponent("Class1", ComponentType.ClassModule, classCode)
6772+
.AddComponent("Module1", ComponentType.StandardModule, moduleCode)
6773+
.AddReference("VBA", MockVbeBuilder.LibraryPathVBA, 4, 2, true)
6774+
.AddProjectToVbeBuilder()
6775+
.Build();
6776+
6777+
using (var state = Resolve(vbe.Object))
6778+
{
6779+
var debugAssertDeclaration = state.DeclarationFinder
6780+
.BuiltInDeclarations(DeclarationType.Procedure)
6781+
.Single(declaration => declaration.IdentifierName.Equals("Assert")
6782+
&& declaration.QualifiedModuleName.ComponentName.Equals("Debug"));
6783+
var debugAssertReferences = debugAssertDeclaration.References;
6784+
6785+
Assert.AreEqual(2, debugAssertReferences.Count());
6786+
}
6787+
}
67166788
}
67176789
}

0 commit comments

Comments
 (0)