Skip to content

Commit

Permalink
Merge pull request #73574 from RenderMichael/switch-or
Browse files Browse the repository at this point in the history
  • Loading branch information
CyrusNajmabadi authored May 25, 2024
2 parents 122dc90 + af4d9b2 commit 7cf44d1
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -1638,4 +1638,124 @@ void Method(int i)
}
""");
}

[Fact, WorkItem("https://github.com/dotnet/roslyn/issues/73245")]
public async Task NotAllMembersExist_NotDefault_OrPattern()
{
await TestInRegularAndScriptAsync(
"""
namespace ConsoleApplication1
{
enum MyEnum
{
Fizz,
Buzz,
FizzBuzz,
FizzBuzzFizz
}
class MyClass
{
void Method()
{
var e = MyEnum.Fizz;
[||]switch (e)
{
case MyEnum.Fizz or MyEnum.Buzz or MyEnum.FizzBuzz:
break;
}
}
}
}
""",
"""
namespace ConsoleApplication1
{
enum MyEnum
{
Fizz,
Buzz,
FizzBuzz,
FizzBuzzFizz
}
class MyClass
{
void Method()
{
var e = MyEnum.Fizz;
switch (e)
{
case MyEnum.Fizz or MyEnum.Buzz or MyEnum.FizzBuzz:
break;
case MyEnum.FizzBuzzFizz:
break;
default:
break;
}
}
}
}
""", index: 2);
}

[Fact, WorkItem("https://github.com/dotnet/roslyn/issues/73245")]
public async Task NotAllMembersExist_WithDefault_OrPattern()
{
await TestInRegularAndScriptAsync(
"""
namespace ConsoleApplication1
{
enum MyEnum
{
Fizz,
Buzz,
FizzBuzz
}
class MyClass
{
void Method()
{
var e = MyEnum.Fizz;
[||]switch (e)
{
case MyEnum.Fizz or MyEnum.Buzz:
break;
default:
break;
}
}
}
}
""",
"""
namespace ConsoleApplication1
{
enum MyEnum
{
Fizz,
Buzz,
FizzBuzz
}
class MyClass
{
void Method()
{
var e = MyEnum.Fizz;
switch (e)
{
case MyEnum.Fizz or MyEnum.Buzz:
break;
case MyEnum.FizzBuzz:
break;
default:
break;
}
}
}
}
""");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ private static void RemoveExistingEnumMembers(
}
}

private static void HandleBinaryPattern(IBinaryPatternOperation? binaryPattern, Dictionary<long, ISymbol> enumMembers)
internal static void HandleBinaryPattern(IBinaryPatternOperation? binaryPattern, Dictionary<long, ISymbol> enumMembers)
{
if (binaryPattern?.OperatorKind == BinaryOperatorKind.Or)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,14 @@ private static bool TryRemoveExistingEnumMembers(ISwitchOperation switchStatemen
var caseValue = IntegerUtilities.ToInt64(value.ConstantValue.Value);
enumValues.Remove(caseValue);

break;

case CaseKind.Pattern:
if (((IPatternCaseClauseOperation)clause).Pattern is IBinaryPatternOperation pattern)
{
PopulateSwitchExpressionHelpers.HandleBinaryPattern(pattern, enumValues);
}

break;
}
}
Expand Down

0 comments on commit 7cf44d1

Please sign in to comment.