Skip to content

Commit 5384836

Browse files
committed
Only discover ProjectDisplayName when absolutely necessary.
1 parent c5481ff commit 5384836

File tree

22 files changed

+134
-121
lines changed

22 files changed

+134
-121
lines changed

RetailCoder.VBE/Inspections/Abstract/InspectionResultBase.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -87,18 +87,18 @@ public virtual int CompareTo(IInspectionResult other)
8787
return Inspection.CompareTo(other.Inspection);
8888
}
8989

90-
public override string ToString()
91-
{
92-
var module = QualifiedSelection.QualifiedName;
93-
return string.Format(
94-
InspectionsUI.QualifiedSelectionInspection,
95-
Inspection.Severity,
96-
Description,
97-
"(" + module.ProjectDisplayName + ")",
98-
module.ProjectName,
99-
module.ComponentName,
100-
QualifiedSelection.Selection.StartLine);
101-
}
90+
//public override string ToString()
91+
//{
92+
// var module = QualifiedSelection.QualifiedName;
93+
// return string.Format(
94+
// InspectionsUI.QualifiedSelectionInspection,
95+
// Inspection.Severity,
96+
// Description,
97+
// "(" + module.ProjectDisplayName + ")",
98+
// module.ProjectName,
99+
// module.ComponentName,
100+
// QualifiedSelection.Selection.StartLine);
101+
//}
102102

103103
public virtual NavigateCodeEventArgs GetNavigationArgs()
104104
{

RetailCoder.VBE/UnitTesting/TestEngine.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
using System.Diagnostics;
44
using System.Linq;
55
using Rubberduck.Parsing.Annotations;
6+
using Rubberduck.Parsing.Symbols;
67
using Rubberduck.Parsing.VBA;
78
using Rubberduck.UI.UnitTesting;
8-
using Rubberduck.VBEditor;
99
using Rubberduck.VBEditor.Application;
10-
using Rubberduck.VBEditor.Extensions;
1110
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1211

1312
namespace Rubberduck.UnitTesting
@@ -99,7 +98,7 @@ public void Run(IEnumerable<TestMethod> tests)
9998
}
10099
}
101100

102-
private void Run(IEnumerable<QualifiedMemberName> members)
101+
private void Run(IEnumerable<Declaration> members)
103102
{
104103
if (_hostApplication == null)
105104
{

RetailCoder.VBE/UnitTesting/TestMethod.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void Run()
4444
try
4545
{
4646
AssertHandler.OnAssertCompleted += HandleAssertCompleted;
47-
_hostApp.Run(Declaration.QualifiedName);
47+
_hostApp.Run(Declaration);
4848
AssertHandler.OnAssertCompleted -= HandleAssertCompleted;
4949

5050
result = EvaluateResults();

RetailCoder.VBE/UnitTesting/UnitTestUtils.cs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,40 +38,36 @@ public static bool IsTestMethod(RubberduckParserState state, Declaration item)
3838
item.Annotations.Any(a => a.AnnotationType == AnnotationType.TestMethod);
3939
}
4040

41-
public static IEnumerable<QualifiedMemberName> FindModuleInitializeMethods(this QualifiedModuleName module, RubberduckParserState state)
41+
public static IEnumerable<Declaration> FindModuleInitializeMethods(this QualifiedModuleName module, RubberduckParserState state)
4242
{
4343
return GetTestModuleProcedures(state)
4444
.Where(m =>
4545
m.QualifiedName.QualifiedModuleName == module &&
46-
m.Annotations.Any(a => a.AnnotationType == AnnotationType.ModuleInitialize))
47-
.Select(s => s.QualifiedName);
46+
m.Annotations.Any(a => a.AnnotationType == AnnotationType.ModuleInitialize));
4847
}
4948

50-
public static IEnumerable<QualifiedMemberName> FindModuleCleanupMethods(this QualifiedModuleName module, RubberduckParserState state)
49+
public static IEnumerable<Declaration> FindModuleCleanupMethods(this QualifiedModuleName module, RubberduckParserState state)
5150
{
5251
return GetTestModuleProcedures(state)
5352
.Where(m =>
5453
m.QualifiedName.QualifiedModuleName == module &&
55-
m.Annotations.Any(a => a.AnnotationType == AnnotationType.ModuleCleanup))
56-
.Select(s => s.QualifiedName);
54+
m.Annotations.Any(a => a.AnnotationType == AnnotationType.ModuleCleanup));
5755
}
5856

59-
public static IEnumerable<QualifiedMemberName> FindTestInitializeMethods(this QualifiedModuleName module, RubberduckParserState state)
57+
public static IEnumerable<Declaration> FindTestInitializeMethods(this QualifiedModuleName module, RubberduckParserState state)
6058
{
6159
return GetTestModuleProcedures(state)
6260
.Where(m =>
6361
m.QualifiedName.QualifiedModuleName == module &&
64-
m.Annotations.Any(a => a.AnnotationType == AnnotationType.TestInitialize))
65-
.Select(s => s.QualifiedName);
62+
m.Annotations.Any(a => a.AnnotationType == AnnotationType.TestInitialize));
6663
}
6764

68-
public static IEnumerable<QualifiedMemberName> FindTestCleanupMethods(this QualifiedModuleName module, RubberduckParserState state)
65+
public static IEnumerable<Declaration> FindTestCleanupMethods(this QualifiedModuleName module, RubberduckParserState state)
6966
{
7067
return GetTestModuleProcedures(state)
7168
.Where(m =>
7269
m.QualifiedName.QualifiedModuleName == module &&
73-
m.Annotations.Any(a => a.AnnotationType == AnnotationType.TestCleanup))
74-
.Select(s => s.QualifiedName);
70+
m.Annotations.Any(a => a.AnnotationType == AnnotationType.TestCleanup));
7571
}
7672

7773
private static IEnumerable<Declaration> GetTestModuleProcedures(RubberduckParserState state)

Rubberduck.Parsing/Symbols/Declaration.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,12 @@ public string ProjectName
424424
get { return _projectName; }
425425
}
426426

427+
/// <summary>
428+
/// WARNING: This property has side effects. It changes the ActiveVBProject, which causes a flicker in the VBE.
429+
/// This should only be called if it is *absolutely* necessary.
430+
/// </summary>
431+
public virtual string ProjectDisplayName { get { return _parentDeclaration.ProjectDisplayName; } }
432+
427433
public object[] ToArray()
428434
{
429435
return new object[] { ProjectName, CustomFolder, ComponentName, DeclarationType.ToString(), Scope, IdentifierName, AsTypeName };

Rubberduck.Parsing/Symbols/ProjectDeclaration.cs

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Rubberduck.Parsing.ComReflection;
1+
using System.Text.RegularExpressions;
2+
using Rubberduck.Parsing.ComReflection;
23
using Rubberduck.VBEditor;
34
using System.Collections.Generic;
45
using System.Linq;
@@ -70,5 +71,57 @@ public void AddProjectReference(string referencedProjectId, int priority)
7071
}
7172
_projectReferences.Add(new ProjectReference(referencedProjectId, priority));
7273
}
74+
75+
private static readonly Regex CaptionProjectRegex = new Regex(@"^(?:[^-]+)(?:\s-\s)(?<project>.+)(?:\s-\s.*)?$");
76+
private static readonly Regex OpenModuleRegex = new Regex(@"^(?<project>.+)(?<module>\s-\s\[.*\((Code|UserForm)\)\])$");
77+
78+
private string _displayName;
79+
/// <summary>
80+
/// WARNING: This property has side effects. It changes the ActiveVBProject, which causes a flicker in the VBE.
81+
/// This should only be called if it is *absolutely* necessary.
82+
/// </summary>
83+
public override string ProjectDisplayName
84+
{
85+
get
86+
{
87+
if (_displayName != null)
88+
{
89+
return _displayName;
90+
}
91+
92+
if (_project == null)
93+
{
94+
_displayName = string.Empty;
95+
return _displayName;
96+
}
97+
98+
var vbe = _project.VBE;
99+
var activeProject = vbe.ActiveVBProject;
100+
var mainWindow = vbe.MainWindow;
101+
{
102+
try
103+
{
104+
if (_project.HelpFile != activeProject.HelpFile)
105+
{
106+
vbe.ActiveVBProject = _project;
107+
}
108+
109+
var caption = mainWindow.Caption;
110+
if (CaptionProjectRegex.IsMatch(caption))
111+
{
112+
caption = CaptionProjectRegex.Matches(caption)[0].Groups["project"].Value;
113+
_displayName = OpenModuleRegex.IsMatch(caption)
114+
? OpenModuleRegex.Matches(caption)[0].Groups["project"].Value
115+
: caption;
116+
}
117+
}
118+
catch
119+
{
120+
_displayName = string.Empty;
121+
}
122+
return _displayName;
123+
}
124+
}
125+
}
73126
}
74127
}

Rubberduck.VBEEditor/Application/AccessApp.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ public class AccessApp : HostApplicationBase<Microsoft.Office.Interop.Access.App
1111
{
1212
public AccessApp() : base("Access") { }
1313

14-
public override void Run(QualifiedMemberName qualifiedMemberName)
14+
public override void Run(dynamic declaration)
1515
{
16+
var qualifiedMemberName = declaration.QualifiedName;
1617
var call = GenerateMethodCall(qualifiedMemberName);
1718
Application.Run(call);
1819
}

Rubberduck.VBEEditor/Application/AutoCADApp.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ public class AutoCADApp : HostApplicationBase<Autodesk.AutoCAD.Interop.AcadAppli
44
{
55
public AutoCADApp() : base("AutoCAD") { }
66

7-
public override void Run(QualifiedMemberName qualifiedMemberName)
7+
public override void Run(dynamic declaration)
88
{
9-
Application.RunMacro(qualifiedMemberName.ToString());
9+
Application.RunMacro(declaration.QualifiedName.ToString());
1010
}
1111
}
1212
}

Rubberduck.VBEEditor/Application/CorelDRAWApp.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ public CorelDRAWApp(IVBE vbe) : base(vbe, "CorelDRAW") { }
1212

1313
//TODO:RunMacro can only execute methods in stand-alone projects (not document hosted projects)
1414
//TODO:Can only get a CorelDraw application if at least one document is open in CorelDraw.
15-
16-
public override void Run(QualifiedMemberName qualifiedMemberName)
15+
16+
public override void Run(dynamic declaration)
1717
{
18+
var qualifiedMemberName = declaration.QualifiedName;
1819
var projectName = qualifiedMemberName.QualifiedModuleName.ProjectName;
1920
var memberName = qualifiedMemberName.QualifiedModuleName.ComponentName + "." + qualifiedMemberName.MemberName;
2021

Rubberduck.VBEEditor/Application/ExcelApp.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,19 @@ public class ExcelApp : HostApplicationBase<Microsoft.Office.Interop.Excel.Appli
88
public ExcelApp() : base("Excel") { }
99
public ExcelApp(IVBE vbe) : base(vbe, "Excel") { }
1010

11-
public override void Run(QualifiedMemberName qualifiedMemberName)
11+
public override void Run(dynamic declaration)
1212
{
13-
var call = GenerateMethodCall(qualifiedMemberName);
13+
var call = GenerateMethodCall(declaration);
1414
Application.Run(call);
1515
}
1616

17-
protected virtual string GenerateMethodCall(QualifiedMemberName qualifiedMemberName)
17+
protected virtual string GenerateMethodCall(dynamic declaration)
1818
{
19+
var qualifiedMemberName = declaration.QualifiedName;
1920
var module = qualifiedMemberName.QualifiedModuleName;
2021

2122
var documentName = string.IsNullOrEmpty(module.ProjectPath)
22-
? module.ProjectDisplayName
23+
? declaration.ProjectDisplayName
2324
: Path.GetFileName(module.ProjectPath);
2425

2526
return string.IsNullOrEmpty(documentName)

0 commit comments

Comments
 (0)