Skip to content

Commit 5a219d1

Browse files
authored
Merge pull request #21845 from michaelnebel/csharp/unaryoperatorcleanup
C#: Unary expression cleanup in the extractor.
2 parents 871f307 + 30a5769 commit 5a219d1

4 files changed

Lines changed: 56 additions & 57 deletions

File tree

csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ internal static Expression Create(ExpressionNodeInfo info)
5858
return Invocation.Create(info);
5959

6060
case SyntaxKind.PostIncrementExpression:
61-
return PostfixUnary.Create(info.SetKind(ExprKind.POST_INCR), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
61+
return PostfixUnary.Create(info.SetKind(ExprKind.POST_INCR));
6262

6363
case SyntaxKind.PostDecrementExpression:
64-
return PostfixUnary.Create(info.SetKind(ExprKind.POST_DECR), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
64+
return PostfixUnary.Create(info.SetKind(ExprKind.POST_DECR));
6565

6666
case SyntaxKind.AwaitExpression:
6767
return Await.Create(info);
@@ -109,10 +109,10 @@ internal static Expression Create(ExpressionNodeInfo info)
109109
return MemberAccess.Create(info, (MemberAccessExpressionSyntax)info.Node);
110110

111111
case SyntaxKind.UnaryMinusExpression:
112-
return Unary.Create(info.SetKind(ExprKind.MINUS));
112+
return PrefixUnary.Create(info.SetKind(ExprKind.MINUS));
113113

114114
case SyntaxKind.UnaryPlusExpression:
115-
return Unary.Create(info.SetKind(ExprKind.PLUS));
115+
return PrefixUnary.Create(info.SetKind(ExprKind.PLUS));
116116

117117
case SyntaxKind.SimpleLambdaExpression:
118118
return Lambda.Create(info, (SimpleLambdaExpressionSyntax)info.Node);
@@ -146,16 +146,16 @@ internal static Expression Create(ExpressionNodeInfo info)
146146
return Name.Create(info);
147147

148148
case SyntaxKind.LogicalNotExpression:
149-
return Unary.Create(info.SetKind(ExprKind.LOG_NOT));
149+
return PrefixUnary.Create(info.SetKind(ExprKind.LOG_NOT));
150150

151151
case SyntaxKind.BitwiseNotExpression:
152-
return Unary.Create(info.SetKind(ExprKind.BIT_NOT));
152+
return PrefixUnary.Create(info.SetKind(ExprKind.BIT_NOT));
153153

154154
case SyntaxKind.PreIncrementExpression:
155-
return Unary.Create(info.SetKind(ExprKind.PRE_INCR));
155+
return PrefixUnary.Create(info.SetKind(ExprKind.PRE_INCR));
156156

157157
case SyntaxKind.PreDecrementExpression:
158-
return Unary.Create(info.SetKind(ExprKind.PRE_DECR));
158+
return PrefixUnary.Create(info.SetKind(ExprKind.PRE_DECR));
159159

160160
case SyntaxKind.ThisExpression:
161161
return This.CreateExplicit(info);
@@ -164,10 +164,10 @@ internal static Expression Create(ExpressionNodeInfo info)
164164
return PropertyFieldAccess.Create(info);
165165

166166
case SyntaxKind.AddressOfExpression:
167-
return Unary.Create(info.SetKind(ExprKind.ADDRESS_OF));
167+
return PrefixUnary.Create(info.SetKind(ExprKind.ADDRESS_OF));
168168

169169
case SyntaxKind.PointerIndirectionExpression:
170-
return Unary.Create(info.SetKind(ExprKind.POINTER_INDIRECTION));
170+
return PrefixUnary.Create(info.SetKind(ExprKind.POINTER_INDIRECTION));
171171

172172
case SyntaxKind.DefaultExpression:
173173
return Default.Create(info);
@@ -248,13 +248,13 @@ internal static Expression Create(ExpressionNodeInfo info)
248248
return RangeExpression.Create(info);
249249

250250
case SyntaxKind.IndexExpression:
251-
return Unary.Create(info.SetKind(ExprKind.INDEX));
251+
return PrefixUnary.Create(info.SetKind(ExprKind.INDEX));
252252

253253
case SyntaxKind.SwitchExpression:
254254
return Switch.Create(info);
255255

256256
case SyntaxKind.SuppressNullableWarningExpression:
257-
return PostfixUnary.Create(info.SetKind(ExprKind.SUPPRESS_NULLABLE_WARNING), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
257+
return PostfixUnary.Create(info.SetKind(ExprKind.SUPPRESS_NULLABLE_WARNING));
258258

259259
case SyntaxKind.WithExpression:
260260
return WithExpression.Create(info);

csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/PostfixUnary.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,30 @@
44

55
namespace Semmle.Extraction.CSharp.Entities.Expressions
66
{
7-
internal class PostfixUnary : Expression<ExpressionSyntax>
7+
internal class PostfixUnary : Expression<PostfixUnaryExpressionSyntax>
88
{
9-
private PostfixUnary(ExpressionNodeInfo info, ExprKind kind, ExpressionSyntax operand)
9+
private PostfixUnary(ExpressionNodeInfo info, ExprKind kind)
1010
: base(info.SetKind(UnaryOperatorKind(info.Context, kind, info.Node)))
1111
{
12-
this.operand = operand;
1312
operatorKind = kind;
1413
}
1514

16-
private readonly ExpressionSyntax operand;
1715
private readonly ExprKind operatorKind;
1816

19-
public static Expression Create(ExpressionNodeInfo info, ExpressionSyntax operand) => new PostfixUnary(info, info.Kind, operand).TryPopulate();
17+
public static Expression Create(ExpressionNodeInfo info) => new PostfixUnary(info, info.Kind).TryPopulate();
2018

2119
protected override void PopulateExpression(TextWriter trapFile)
2220
{
23-
Create(Context, operand, this, 0);
21+
Create(Context, Syntax.Operand, this, 0);
2422

25-
if ((operatorKind == ExprKind.POST_INCR || operatorKind == ExprKind.POST_DECR) &&
26-
Kind == ExprKind.OPERATOR_INVOCATION)
23+
if (Kind == ExprKind.OPERATOR_INVOCATION)
2724
{
2825
AddOperatorCall(trapFile, Syntax);
29-
trapFile.mutator_invocation_mode(this, 2);
26+
27+
if (operatorKind == ExprKind.POST_INCR || operatorKind == ExprKind.POST_DECR)
28+
{
29+
trapFile.mutator_invocation_mode(this, 2);
30+
}
3031
}
3132
}
3233
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System.IO;
2+
using Microsoft.CodeAnalysis.CSharp.Syntax;
3+
using Semmle.Extraction.Kinds;
4+
5+
namespace Semmle.Extraction.CSharp.Entities.Expressions
6+
{
7+
internal class PrefixUnary : Expression<PrefixUnaryExpressionSyntax>
8+
{
9+
private PrefixUnary(ExpressionNodeInfo info, ExprKind kind)
10+
: base(info.SetKind(UnaryOperatorKind(info.Context, info.Kind, info.Node)))
11+
{
12+
operatorKind = kind;
13+
}
14+
15+
private readonly ExprKind operatorKind;
16+
17+
public static Expression Create(ExpressionNodeInfo info) => new PrefixUnary(info, info.Kind).TryPopulate();
18+
19+
protected override void PopulateExpression(TextWriter trapFile)
20+
{
21+
Create(Context, Syntax.Operand, this, 0);
22+
23+
if (Kind == ExprKind.OPERATOR_INVOCATION)
24+
{
25+
AddOperatorCall(trapFile, Syntax);
26+
27+
if (operatorKind == ExprKind.PRE_INCR || operatorKind == ExprKind.PRE_DECR)
28+
{
29+
trapFile.mutator_invocation_mode(this, 1);
30+
}
31+
}
32+
}
33+
}
34+
}

csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Unary.cs

Lines changed: 0 additions & 36 deletions
This file was deleted.

0 commit comments

Comments
 (0)