Skip to content

Commit d55420f

Browse files
authored
Merge pull request #5168 from retailcoder/fix4921
Fixes "parameter can be byval" false negative with enums
2 parents 599a89b + 823772f commit d55420f

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

Rubberduck.CodeAnalysis/Inspections/Concrete/ParameterCanBeByValInspection.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ private bool CanBeChangedToBePassedByValIndividually(ParameterDeclaration parame
9696
&& !IsParameterOfDeclaredLibraryFunction(parameter)
9797
&& (parameter.AsTypeDeclaration == null
9898
|| (!parameter.AsTypeDeclaration.DeclarationType.HasFlag(DeclarationType.ClassModule)
99-
&& parameter.AsTypeDeclaration.DeclarationType != DeclarationType.UserDefinedType
100-
&& parameter.AsTypeDeclaration.DeclarationType != DeclarationType.Enumeration))
99+
&& parameter.AsTypeDeclaration.DeclarationType != DeclarationType.UserDefinedType))
101100
&& !parameter.References.Any(reference => reference.IsAssignment)
102101
&& !IsPotentiallyUsedAsByRefParameter(parameter);
103102
return canPossiblyBeChangedToBePassedByVal;

RubberduckTests/Inspections/ParameterCanBeByValInspectionTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,6 +1575,30 @@ Private Sub abc_Foo(ByRef arg1 As Integer, ByRef arg2 As Integer)
15751575
}
15761576
}
15771577

1578+
[Test]
1579+
[Category("Inspections")]
1580+
public void ParameterCanBeByVal_EnumMemberParameterCanBeByVal()
1581+
{
1582+
//Input
1583+
const string inputCode = @"Option Explicit
1584+
Public Enum TestEnum
1585+
Foo
1586+
Bar
1587+
End Enum
1588+
1589+
Private Sub DoSomething(e As TestEnum)
1590+
Debug.Print e
1591+
End Sub";
1592+
1593+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _);
1594+
using (var state = MockParser.CreateAndParse(vbe.Object))
1595+
{
1596+
var inspection = new ParameterCanBeByValInspection(state);
1597+
var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);
1598+
1599+
Assert.AreEqual("e", inspectionResults.Single().Target.IdentifierName);
1600+
}
1601+
}
15781602
[Test]
15791603
[Category("Inspections")]
15801604
public void InspectionName()

0 commit comments

Comments
 (0)