Skip to content

Commit f5e88d1

Browse files
authored
Merge pull request #5150 from MDoerner/MoreFixesAroundFailedCoercionReferences
Fix as type names for array types resolved from COM
2 parents 91c57a8 + 756763b commit f5e88d1

File tree

7 files changed

+133
-10
lines changed

7 files changed

+133
-10
lines changed

Rubberduck.Parsing/ComReflection/ComField.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class ComField
3636

3737
[DataMember(IsRequired = true)]
3838
private string _valueType = Tokens.Object;
39-
public string ValueType => IsArray ? $"{_valueType}()" : _valueType;
39+
public string ValueType => _valueType;
4040

4141
[DataMember(IsRequired = true)]
4242
private Guid _enumGuid = Guid.Empty;

Rubberduck.Parsing/ComReflection/ComParameter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public string DefaultAsEnum
7373

7474
[DataMember(IsRequired = true)]
7575
private ComTypeName _typeName;
76-
public string TypeName => IsArray ? $"{_typeName.Name}()" : _typeName.Name;
76+
public string TypeName => _typeName.Name;
7777

7878
[DataMember(IsRequired = true)]
7979
ComMember Parent { get; set; }

Rubberduck.Parsing/Symbols/DocumentModuleDeclaration.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
using System;
2-
using System.Collections.Concurrent;
3-
using System.Collections.Generic;
4-
using System.Linq;
5-
using System.Text;
6-
using System.Threading.Tasks;
1+
using System.Collections.Generic;
72
using Rubberduck.Parsing.Annotations;
83
using Rubberduck.VBEditor;
94

Rubberduck.Parsing/Symbols/EventDeclaration.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using Rubberduck.Parsing.Annotations;
33
using Rubberduck.Parsing.ComReflection;
44
using Rubberduck.Parsing.Grammar;
5-
using Rubberduck.Parsing.VBA;
65
using Rubberduck.VBEditor;
76
using System.Collections.Generic;
87
using System.Linq;

Rubberduck.Parsing/Symbols/ProceduralModuleDeclaration.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ public ProceduralModuleDeclaration(
2525
attributes)
2626
{ }
2727

28-
public ProceduralModuleDeclaration(ComModule statics, Declaration parent, QualifiedModuleName module,
28+
public ProceduralModuleDeclaration(
29+
ComModule statics,
30+
Declaration parent,
31+
QualifiedModuleName module,
2932
Attributes attributes)
3033
: this(
3134
module.QualifyMemberName(statics.Name),

RubberduckTests/Grammar/ResolverTests.cs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6570,5 +6570,72 @@ End Function
65706570
Assert.IsFalse(failedAccesses.Any());
65716571
}
65726572
}
6573+
6574+
[Category("Grammar")]
6575+
[Category("Resolver")]
6576+
[Test]
6577+
public void ParamArray_NoFailedLetCoercionReference()
6578+
{
6579+
var classCode = @"
6580+
Public Function Foo(index As Variant) As Class1
6581+
End Function
6582+
";
6583+
6584+
var moduleCode = $@"
6585+
Private Function Foo(ParamArray args() As Variant) As Variant
6586+
End Function
6587+
6588+
Private Function Test() As Variant
6589+
Dim bar As Class1
6590+
Set bar = New Class1
6591+
Test = Foo(bar)
6592+
End Function
6593+
";
6594+
6595+
var vbe = MockVbeBuilder.BuildFromModules(
6596+
("Class1", classCode, ComponentType.ClassModule),
6597+
("Module1", moduleCode, ComponentType.StandardModule));
6598+
6599+
using (var state = Resolve(vbe.Object))
6600+
{
6601+
var failedAccesses = state.DeclarationFinder.FailedLetCoercions();
6602+
6603+
Assert.IsFalse(failedAccesses.Any());
6604+
}
6605+
}
6606+
6607+
[Category("Grammar")]
6608+
[Category("Resolver")]
6609+
[Test]
6610+
public void ParamArrayFromLibrary_NoFailedLetCoercionReference()
6611+
{
6612+
var classCode = @"
6613+
Public Function Foo(index As Variant) As Class1
6614+
End Function
6615+
";
6616+
6617+
var moduleCode = $@"
6618+
Private Function Test() As Variant
6619+
Dim bar As Class1
6620+
Set bar = New Class1
6621+
Test = Array(bar)
6622+
End Function
6623+
";
6624+
6625+
var vbe = new MockVbeBuilder()
6626+
.ProjectBuilder("TestProject", ProjectProtection.Unprotected)
6627+
.AddComponent("Class1", ComponentType.ClassModule, classCode)
6628+
.AddComponent("Module1", ComponentType.StandardModule, moduleCode)
6629+
.AddReference("VBA", MockVbeBuilder.LibraryPathVBA, 4, 2, true)
6630+
.AddProjectToVbeBuilder()
6631+
.Build();
6632+
6633+
using (var state = Resolve(vbe.Object))
6634+
{
6635+
var failedAccesses = state.DeclarationFinder.FailedLetCoercions();
6636+
6637+
Assert.IsFalse(failedAccesses.Any());
6638+
}
6639+
}
65736640
}
65746641
}

RubberduckTests/Inspections/ValueRequiredInspectionTests.cs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,65 @@ End Sub
342342
Assert.IsFalse(inspectionResults.Any());
343343
}
344344

345+
[Category("Grammar")]
346+
[Category("Resolver")]
347+
[Test]
348+
public void ParamArray_NoResult()
349+
{
350+
var classCode = @"
351+
Public Function Foo(index As Variant) As Class1
352+
End Function
353+
";
354+
355+
var moduleCode = $@"
356+
Private Function Foo(ParamArray args() As Variant) As Variant
357+
End Function
358+
359+
Private Function Test() As Variant
360+
Dim bar As Class1
361+
Set bar = New Class1
362+
Test = Foo(bar)
363+
End Function
364+
";
365+
366+
var vbe = MockVbeBuilder.BuildFromModules(
367+
("Class1", classCode, ComponentType.ClassModule),
368+
("Module1", moduleCode, ComponentType.StandardModule));
369+
370+
var inspectionResults = InspectionResults(vbe.Object);
371+
Assert.IsFalse(inspectionResults.Any());
372+
}
373+
374+
[Category("Grammar")]
375+
[Category("Resolver")]
376+
[Test]
377+
public void ParamArrayInLibrary_NoResult()
378+
{
379+
var classCode = @"
380+
Public Function Foo(index As Variant) As Class1
381+
End Function
382+
";
383+
384+
var moduleCode = $@"
385+
Private Function Test() As Variant
386+
Dim bar As Class1
387+
Set bar = New Class1
388+
Test = Array(bar)
389+
End Function
390+
";
391+
392+
var vbe = new MockVbeBuilder()
393+
.ProjectBuilder("TestProject", ProjectProtection.Unprotected)
394+
.AddComponent("Class1", ComponentType.ClassModule, classCode)
395+
.AddComponent("Module1", ComponentType.StandardModule, moduleCode)
396+
.AddReference("VBA", MockVbeBuilder.LibraryPathVBA, 4, 2, true)
397+
.AddProjectToVbeBuilder()
398+
.Build();
399+
400+
var inspectionResults = InspectionResults(vbe.Object);
401+
Assert.IsFalse(inspectionResults.Any());
402+
}
403+
345404
protected override IInspection InspectionUnderTest(RubberduckParserState state)
346405
{
347406
return new ValueRequiredInspection(state);

0 commit comments

Comments
 (0)