Skip to content

Commit b374b51

Browse files
authored
Merge pull request #4274 from comintern/next
Misc bug fixes
2 parents 2e5f26c + 236789c commit b374b51

File tree

21 files changed

+853
-39
lines changed

21 files changed

+853
-39
lines changed

Rubberduck.CodeAnalysis/Inspections/Concrete/ProcedureCanBeWrittenAsFunctionInspection.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,19 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
3636
.Concat(builtinHandlers)
3737
.Concat(userDeclarations.Where(item => item.IsWithEvents)));
3838

39-
return Listener.Contexts.Where(context => context.Context.Parent is VBAParser.SubStmtContext)
40-
.Select(context => contextLookup[(VBAParser.SubStmtContext)context.Context.Parent])
41-
.Where(decl => !IsIgnoringInspectionResultFor(decl, AnnotationName) &&
42-
!ignored.Contains(decl) &&
43-
userDeclarations.Where(item => item.IsWithEvents)
44-
.All(withEvents => userDeclarations.FindEventProcedures(withEvents) == null) &&
45-
!builtinHandlers.Contains(decl))
46-
.Select(result => new DeclarationInspectionResult(this,
47-
string.Format(InspectionResults.ProcedureCanBeWrittenAsFunctionInspection, result.IdentifierName),
48-
result));
39+
return Listener.Contexts
40+
.Where(context => context.Context.Parent is VBAParser.SubStmtContext
41+
&& contextLookup[context.Context.GetChild<VBAParser.ArgContext>()].References
42+
.Any(reference => reference.IsAssignment))
43+
.Select(context => contextLookup[(VBAParser.SubStmtContext)context.Context.Parent])
44+
.Where(decl => !IsIgnoringInspectionResultFor(decl, AnnotationName) &&
45+
!ignored.Contains(decl) &&
46+
userDeclarations.Where(item => item.IsWithEvents)
47+
.All(withEvents => userDeclarations.FindEventProcedures(withEvents) == null) &&
48+
!builtinHandlers.Contains(decl))
49+
.Select(result => new DeclarationInspectionResult(this,
50+
string.Format(InspectionResults.ProcedureCanBeWrittenAsFunctionInspection, result.IdentifierName),
51+
result));
4952
}
5053

5154
public class SingleByRefParamArgListListener : VBAParserBaseListener, IInspectionListener

Rubberduck.Core/UI/Command/AddTestMethodCommand.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Collections.Generic;
12
using System.Linq;
23
using System.Runtime.InteropServices;
34
using NLog;
@@ -114,10 +115,16 @@ protected override void OnExecute(object parameter)
114115

115116
private string GetNextTestMethodName(IVBComponent component)
116117
{
117-
var names = component.GetTests(_vbe, _state).Select(test => test.Declaration.IdentifierName);
118-
var index = names.Count(n => n.StartsWith(TestMethodBaseName)) + 1;
118+
var names = new HashSet<string>(_state.DeclarationFinder.Members(component.QualifiedModuleName)
119+
.Select(test => test.IdentifierName).Where(decl => decl.StartsWith(TestMethodBaseName)));
119120

120-
return string.Concat(TestMethodBaseName, index);
121+
var index = 1;
122+
while (names.Contains($"{TestMethodBaseName}{index}"))
123+
{
124+
index++;
125+
}
126+
127+
return $"{TestMethodBaseName}{index}";
121128
}
122129
}
123130
}

Rubberduck.Core/UI/Command/AddTestMethodExpectedErrorCommand.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Collections.Generic;
12
using System.Linq;
23
using System.Runtime.InteropServices;
34
using NLog;
@@ -117,10 +118,16 @@ protected override void OnExecute(object parameter)
117118

118119
private string GetNextTestMethodName(IVBComponent component)
119120
{
120-
var names = component.GetTests(_vbe, _state).Select(test => test.Declaration.IdentifierName);
121-
var index = names.Count(n => n.StartsWith(TestMethodBaseName)) + 1;
121+
var names = new HashSet<string>(_state.DeclarationFinder.Members(component.QualifiedModuleName)
122+
.Select(test => test.IdentifierName).Where(decl => decl.StartsWith(TestMethodBaseName)));
122123

123-
return string.Concat(TestMethodBaseName, index);
124+
var index = 1;
125+
while (names.Contains($"{TestMethodBaseName}{index}"))
126+
{
127+
index++;
128+
}
129+
130+
return $"{TestMethodBaseName}{index}";
124131
}
125132
}
126133
}

Rubberduck.Core/UI/Command/AddTestModuleCommand.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,15 @@ protected override void OnExecute(object parameter)
246246

247247
private string GetNextTestModuleName(IVBProject project)
248248
{
249-
var names = project.ComponentNames();
250-
var index = names.Count(n => n.StartsWith(TestModuleBaseName)) + 1;
249+
var names = new HashSet<string>(project.ComponentNames().Where(module => module.StartsWith(TestModuleBaseName)));
251250

252-
return string.Concat(TestModuleBaseName, index);
251+
var index = 1;
252+
while (names.Contains($"{TestModuleBaseName}{index}"))
253+
{
254+
index++;
255+
}
256+
257+
return $"{TestModuleBaseName}{index}";
253258
}
254259

255260
private IEnumerable<Declaration> GetDeclarationsToStub(Declaration parentDeclaration)

Rubberduck.Core/UI/Command/FindAllImplementationsCommand.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ private IEnumerable<Declaration> FindAllImplementationsOfClass(Declaration targe
213213
var identifiers = declarations as IList<Declaration> ?? declarations.ToList();
214214

215215
var result = target.References
216-
.Where(reference => reference.Context.Parent is VBAParser.ImplementsStmtContext)
216+
.Where(reference => reference.Context.Parent.Parent is VBAParser.ImplementsStmtContext)
217217
.SelectMany(reference => identifiers.Where(identifier => identifier.IdentifierName == reference.QualifiedModuleName.ComponentName))
218218
.ToList();
219219

@@ -239,7 +239,8 @@ private IEnumerable<Declaration> FindAllImplementationsOfMember(Declaration targ
239239
{
240240
name = target.ComponentName + "." + target.IdentifierName;
241241
return items.FindInterfaceImplementationMembers(target.IdentifierName)
242-
.Where(item => item.IdentifierName == target.ComponentName + "_" + target.IdentifierName);
242+
.Where(item => item.DeclarationType == target.DeclarationType
243+
&& item.IdentifierName == target.ComponentName + "_" + target.IdentifierName);
243244
}
244245

245246
var member = items.FindInterfaceMember(target);
@@ -250,7 +251,8 @@ private IEnumerable<Declaration> FindAllImplementationsOfMember(Declaration targ
250251
}
251252
name = member.ComponentName + "." + member.IdentifierName;
252253
return items.FindInterfaceImplementationMembers(member.IdentifierName)
253-
.Where(item => item.IdentifierName == member.ComponentName + "_" + member.IdentifierName);
254+
.Where(item => item.DeclarationType == target.DeclarationType
255+
&& item.IdentifierName == member.ComponentName + "_" + member.IdentifierName);
254256
}
255257

256258
public void Dispose()

Rubberduck.Parsing/ComReflection/ComField.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Diagnostics;
4-
using System.Linq;
54
using System.Runtime.InteropServices;
65
using System.Runtime.InteropServices.ComTypes;
76
using Rubberduck.Parsing.Grammar;
@@ -63,12 +62,6 @@ public ComField(IComBase parent, ITypeInfo info, string name, VARDESC varDesc, i
6362
else
6463
{
6564
GetFieldType(varDesc.elemdescVar.tdesc, info);
66-
if (!IsEnumMember || !ComProject.KnownEnumerations.TryGetValue(_enumGuid, out ComEnumeration enumType))
67-
{
68-
return;
69-
}
70-
var member = enumType.Members.FirstOrDefault(m => m.Value == (int)DefaultValue);
71-
_valueType = member != null ? member.Name : _valueType;
7265
}
7366
}
7467

Rubberduck.Refactorings/Common/DeclarationExtensions.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,9 @@ public static IEnumerable<Declaration> FindInterfaceImplementationMembers(this I
424424
public static Declaration FindInterfaceMember(this IEnumerable<Declaration> declarations, Declaration implementation)
425425
{
426426
var members = FindInterfaceMembers(declarations);
427-
var matches = members.Where(m => m.IsUserDefined && implementation.IdentifierName == m.ComponentName + '_' + m.IdentifierName).ToList();
427+
var matches = members.Where(m => m.IsUserDefined
428+
&& m.DeclarationType == implementation.DeclarationType
429+
&& implementation.IdentifierName == m.ComponentName + '_' + m.IdentifierName).ToList();
428430

429431
return matches.Count > 1
430432
? matches.SingleOrDefault(m => m.ProjectId == implementation.ProjectId)

Rubberduck.Refactorings/ImplementInterface/ImplementInterfaceRefactoring.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,11 +238,13 @@ private IEnumerable<Declaration> GetImplementedMembers()
238238

239239
private List<Declaration> GetNonImplementedMembers(IEnumerable<Declaration> interfaceMembers, IEnumerable<Declaration> implementedMembers)
240240
{
241-
return interfaceMembers.Where(d => !implementedMembers.Select(s => s.IdentifierName)
242-
.Contains(_targetInterface.ComponentName + "_" + d.IdentifierName))
243-
.OrderBy(o => o.Selection.StartLine)
244-
.ThenBy(t => t.Selection.StartColumn)
245-
.ToList();
241+
return interfaceMembers.Where(d => !implementedMembers
242+
.Select(s => new Tuple<string, DeclarationType>(s.IdentifierName, s.DeclarationType))
243+
.Contains(new Tuple<string, DeclarationType>($"{_targetInterface.ComponentName}_{d.IdentifierName}",
244+
d.DeclarationType)))
245+
.OrderBy(o => o.Selection.StartLine)
246+
.ThenBy(t => t.Selection.StartColumn)
247+
.ToList();
246248
}
247249
}
248250
}

Rubberduck.Refactorings/Rename/RenameRefactoring.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,9 @@ private void RenameParameter()
360360
{
361361
var parameters = _state.DeclarationFinder.MatchName(_model.Target.IdentifierName).Where(param =>
362362
param.ParentDeclaration.DeclarationType.HasFlag(DeclarationType.Property)
363-
&& param.DeclarationType == DeclarationType.Parameter);
363+
&& param.DeclarationType == DeclarationType.Parameter
364+
&& param.ParentDeclaration.IdentifierName.Equals(_model.Target.ParentDeclaration.IdentifierName)
365+
&& param.ParentDeclaration.ParentScopeDeclaration.Equals(_model.Target.ParentDeclaration.ParentScopeDeclaration));
364366

365367
foreach (var param in parameters)
366368
{
@@ -513,8 +515,9 @@ private void RenameStandardElements(Declaration target, string newName)
513515
private void RenameReferences(Declaration target, string newName)
514516
{
515517
var modules = target.References
516-
.Where(reference => reference.Context.GetText() != "Me")
517-
.GroupBy(r => r.QualifiedModuleName);
518+
.Where(reference =>
519+
reference.Context.GetText() != "Me").GroupBy(r => r.QualifiedModuleName);
520+
518521
foreach (var grouping in modules)
519522
{
520523
_modulesToRewrite.Add(grouping.Key);

Rubberduck.SmartIndenter/AbsoluteCodeLine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ private void AlignDims(int postition)
297297
{
298298
return;
299299
}
300-
var gap = Math.Max(_settings.AlignDimColumn - postition - alignTokens[0].Length - 2, 0);
300+
var gap = Math.Max(_settings.AlignDimColumn - postition - alignTokens[0].Trim().Length - 2, 0);
301301
_segments[0] = string.Format("{0}{1} As {2}", alignTokens[0].Trim(), new string(' ', gap),
302302
string.Join(" As ", alignTokens.Skip(1)));
303303
}

0 commit comments

Comments
 (0)