Skip to content

Commit b7d295c

Browse files
committed
Make ExpandDefaultMemberAccessQuickFix fix implicit default member inspection results
1 parent b615cd6 commit b7d295c

File tree

2 files changed

+186
-2
lines changed

2 files changed

+186
-2
lines changed

Rubberduck.CodeAnalysis/QuickFixes/ExpandDefaultMemberQuickFix.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ public class ExpandDefaultMemberQuickFix : QuickFixBase
1515
private readonly IDeclarationFinderProvider _declarationFinderProvider;
1616

1717
public ExpandDefaultMemberQuickFix(IDeclarationFinderProvider declarationFinderProvider)
18-
: base(typeof(ObjectWhereProcedureIsRequiredInspection), typeof(IndexedDefaultMemberAccessInspection), typeof(IndexedRecursiveDefaultMemberAccessInspection))
18+
: base(
19+
typeof(ObjectWhereProcedureIsRequiredInspection),
20+
typeof(IndexedDefaultMemberAccessInspection),
21+
typeof(IndexedRecursiveDefaultMemberAccessInspection),
22+
typeof(ImplicitDefaultMemberAccessInspection),
23+
typeof(ImplicitRecursiveDefaultMemberAccessInspection))
1924
{
2025
_declarationFinderProvider = declarationFinderProvider;
2126
}

RubberduckTests/QuickFixes/ExpandDefaultMemberQuickFixTests.cs

Lines changed: 180 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ End Function
375375
}
376376

377377
[Test]
378-
[Category("Inspections")]
378+
[Category("QuickFixes")]
379379
public void RecursiveIndexedDefaultMemberAccessOnDefaultMemberArrayAccess_QuickFixWorks()
380380
{
381381
var class1Code = @"
@@ -420,6 +420,185 @@ End Function
420420
Assert.AreEqual(expectedModuleCode, actualModuleCode);
421421
}
422422

423+
[Test]
424+
[Category("QuickFixes")]
425+
[TestCase("Foo = cls", "Foo = cls.Foo")]
426+
[TestCase("cls = bar", "cls.Foo = bar")]
427+
public void OrdinaryImplicitDefaultMemberAccessExpression_QuickFixWorks(string statement, string resultStatement)
428+
{
429+
var class1Code = @"
430+
Public Function Foo() As Long
431+
Attribute Foo.VB_UserMemId = 0
432+
End Function
433+
";
434+
435+
var moduleCode = $@"
436+
Private Function Foo() As Long
437+
Dim cls As New Class1
438+
Dim bar As Long
439+
{statement}
440+
End Function
441+
";
442+
443+
var expectedModuleCode = $@"
444+
Private Function Foo() As Long
445+
Dim cls As New Class1
446+
Dim bar As Long
447+
{resultStatement}
448+
End Function
449+
";
450+
451+
var vbe = MockVbeBuilder.BuildFromModules(
452+
("Class1", class1Code, ComponentType.ClassModule),
453+
("Module1", moduleCode, ComponentType.StandardModule));
454+
455+
var actualModuleCode = ApplyQuickFixToAllInspectionResults(vbe.Object, "Module1", state => new ImplicitDefaultMemberAccessInspection(state), CodeKind.AttributesCode);
456+
Assert.AreEqual(expectedModuleCode, actualModuleCode);
457+
}
458+
459+
[Test]
460+
[Category("QuickFixes")]
461+
[TestCase("Foo = cls", "Foo = cls.Foo().Baz")]
462+
[TestCase("cls = bar", "cls.Foo().Baz = bar")]
463+
public void RecursiveImplicitDefaultMemberAccessExpression_QuickFixWorks(string statement, string resultStatement)
464+
{
465+
var class1Code = @"
466+
Public Function Foo() As Class2
467+
Attribute Foo.VB_UserMemId = 0
468+
End Function
469+
";
470+
471+
var class2Code = @"
472+
Public Function Baz() As Long
473+
Attribute Baz.VB_UserMemId = 0
474+
End Function
475+
";
476+
477+
var moduleCode = $@"
478+
Private Function Foo() As Long
479+
Dim cls As New Class1
480+
Dim bar As Long
481+
{statement}
482+
End Function
483+
";
484+
485+
var expectedModuleCode = $@"
486+
Private Function Foo() As Long
487+
Dim cls As New Class1
488+
Dim bar As Long
489+
{resultStatement}
490+
End Function
491+
";
492+
493+
var vbe = MockVbeBuilder.BuildFromModules(
494+
("Class1", class1Code, ComponentType.ClassModule),
495+
("Class2", class2Code, ComponentType.ClassModule),
496+
("Module1", moduleCode, ComponentType.StandardModule));
497+
498+
var actualModuleCode = ApplyQuickFixToAllInspectionResults(vbe.Object, "Module1", state => new ImplicitRecursiveDefaultMemberAccessInspection(state), CodeKind.AttributesCode);
499+
Assert.AreEqual(expectedModuleCode, actualModuleCode);
500+
}
501+
502+
[Test]
503+
[Category("QuickFixes")]
504+
[TestCase("Foo = cls(0)", "Foo = cls.Foo(0).Baz")]
505+
[TestCase("cls(0) = bar", "cls.Foo(0).Baz = bar")]
506+
public void OrdinaryImplicitDefaultMemberAccessOnDefaultMemberArrayAccess_QuickFixWorks(string statement, string resultStatement)
507+
{
508+
var class1Code = @"
509+
Public Function Foo() As Class2()
510+
Attribute Foo.VB_UserMemId = 0
511+
End Function
512+
";
513+
514+
var class2Code = @"
515+
Public Function Baz() As Long
516+
Attribute Baz.VB_UserMemId = 0
517+
End Function
518+
";
519+
520+
var moduleCode = $@"
521+
Private Function Foo() As Long
522+
Dim cls As New Class1
523+
Dim bar As Long
524+
{statement}
525+
End Function
526+
";
527+
528+
var expectedModuleCode = $@"
529+
Private Function Foo() As Long
530+
Dim cls As New Class1
531+
Dim bar As Long
532+
{resultStatement}
533+
End Function
534+
";
535+
536+
var vbe = MockVbeBuilder.BuildFromModules(
537+
("Class1", class1Code, ComponentType.ClassModule),
538+
("Class2", class2Code, ComponentType.ClassModule),
539+
("Module1", moduleCode, ComponentType.StandardModule));
540+
541+
var actualModuleCode = ApplyQuickFixToAllInspectionResults(vbe.Object, "Module1", state => new ImplicitDefaultMemberAccessInspection(state), CodeKind.AttributesCode);
542+
Assert.AreEqual(expectedModuleCode, actualModuleCode);
543+
}
544+
545+
[Test]
546+
[Category("QuickFixes")]
547+
[TestCase("Foo = cls(0)", "Foo = cls.Barz().Foo(0).Bar().Baz")]
548+
[TestCase("cls(0) = bar", "cls.Barz().Foo(0).Bar().Baz = bar")]
549+
public void RecursiveImplicitDefaultMemberAccessOnRecursiveDefaultMemberArrayAccess_QuickFixWorks(string statement, string resultStatement)
550+
{
551+
var class1Code = @"
552+
Public Function Foo() As Class4()
553+
Attribute Foo.VB_UserMemId = 0
554+
End Function
555+
";
556+
557+
var class2Code = @"
558+
Public Function Baz() As Long
559+
Attribute Baz.VB_UserMemId = 0
560+
End Function
561+
";
562+
563+
var class3Code = @"
564+
Public Function Barz() As Class1
565+
Attribute Barz.VB_UserMemId = 0
566+
End Function
567+
";
568+
569+
var class4Code = @"
570+
Public Function Bar() As Class2
571+
Attribute Bar.VB_UserMemId = 0
572+
End Function
573+
";
574+
575+
var moduleCode = $@"
576+
Private Function Foo() As Long
577+
Dim cls As New Class3
578+
Dim bar As Long
579+
{statement}
580+
End Function
581+
";
582+
583+
var expectedModuleCode = $@"
584+
Private Function Foo() As Long
585+
Dim cls As New Class3
586+
Dim bar As Long
587+
{resultStatement}
588+
End Function
589+
";
590+
591+
var vbe = MockVbeBuilder.BuildFromModules(
592+
("Class1", class1Code, ComponentType.ClassModule),
593+
("Class2", class2Code, ComponentType.ClassModule),
594+
("Class3", class3Code, ComponentType.ClassModule),
595+
("Class4", class4Code, ComponentType.ClassModule),
596+
("Module1", moduleCode, ComponentType.StandardModule));
597+
598+
var actualModuleCode = ApplyQuickFixToAllInspectionResults(vbe.Object, "Module1", state => new ImplicitRecursiveDefaultMemberAccessInspection(state), CodeKind.AttributesCode);
599+
Assert.AreEqual(expectedModuleCode, actualModuleCode);
600+
}
601+
423602
protected override IQuickFix QuickFix(RubberduckParserState state)
424603
{
425604
return new ExpandDefaultMemberQuickFix(state);

0 commit comments

Comments
 (0)