Skip to content

Commit dee1690

Browse files
committed
C#: Remove duplicated pattern extraction logic
1 parent 3f150bb commit dee1690

File tree

2 files changed

+3
-45
lines changed
  • csharp/extractor/Semmle.Extraction.CSharp/Entities

2 files changed

+3
-45
lines changed

csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/Pattern.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ internal static Expression Create(Context cx, PatternSyntax syntax, IExpressionP
5050
}
5151

5252
throw new InternalError(varPattern, "Unable to get the declared symbol of the var pattern designation.");
53+
case DiscardDesignationSyntax discard:
54+
return new Expressions.Discard(cx, discard, parent, child);
5355
default:
5456
throw new InternalError("var pattern designation is unhandled");
5557
}

csharp/extractor/Semmle.Extraction.CSharp/Entities/Statements/Case.cs

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -68,53 +68,9 @@ internal class CasePattern : Case<CasePatternSwitchLabelSyntax>
6868
private CasePattern(Context cx, CasePatternSwitchLabelSyntax node, Switch parent, int child)
6969
: base(cx, node, parent, child) { }
7070

71-
private void PopulatePattern(PatternSyntax pattern, TypeSyntax optionalType, VariableDesignationSyntax designation)
72-
{
73-
var isVar = optionalType is null;
74-
switch (designation)
75-
{
76-
case SingleVariableDesignationSyntax _:
77-
if (cx.GetModel(pattern).GetDeclaredSymbol(designation) is ILocalSymbol symbol)
78-
{
79-
var type = Type.Create(cx, symbol.GetAnnotatedType());
80-
Expressions.VariableDeclaration.Create(cx, symbol, type, optionalType, cx.Create(pattern.GetLocation()), isVar, this, 0);
81-
}
82-
break;
83-
case DiscardDesignationSyntax discard:
84-
if (isVar)
85-
new Expressions.Discard(cx, discard, this, 0);
86-
else
87-
Expressions.TypeAccess.Create(cx, optionalType, this, 0);
88-
break;
89-
case null:
90-
break;
91-
case ParenthesizedVariableDesignationSyntax paren:
92-
Expressions.VariableDeclaration.CreateParenthesized(cx, (VarPatternSyntax)pattern, paren, this, 0);
93-
break;
94-
default:
95-
throw new InternalError(pattern, "Unhandled designation in case statement");
96-
}
97-
}
98-
9971
protected override void PopulateStatement(TextWriter trapFile)
10072
{
101-
switch (Stmt.Pattern)
102-
{
103-
case VarPatternSyntax varPattern:
104-
PopulatePattern(varPattern, null, varPattern.Designation);
105-
break;
106-
case DeclarationPatternSyntax declarationPattern:
107-
PopulatePattern(declarationPattern, declarationPattern.Type, declarationPattern.Designation);
108-
break;
109-
case ConstantPatternSyntax pattern:
110-
Expression.Create(cx, pattern.Expression, this, 0);
111-
break;
112-
case RecursivePatternSyntax recPattern:
113-
new Expressions.RecursivePattern(cx, recPattern, this, 0);
114-
break;
115-
default:
116-
throw new InternalError(Stmt, "Case pattern not handled");
117-
}
73+
Expressions.Pattern.Create(cx, Stmt.Pattern, this, 0);
11874

11975
if (Stmt.WhenClause != null)
12076
{

0 commit comments

Comments
 (0)