C#: Simplify and streamline the implementation of Prefix and Postfix unary expressions.

This commit is contained in:
Michael Nebel
2026-05-13 10:03:07 +02:00
parent a72cef6fda
commit 30a5769e20
3 changed files with 8 additions and 15 deletions

View File

@@ -58,10 +58,10 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
return Invocation.Create(info);
case SyntaxKind.PostIncrementExpression:
return PostfixUnary.Create(info.SetKind(ExprKind.POST_INCR), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
return PostfixUnary.Create(info.SetKind(ExprKind.POST_INCR));
case SyntaxKind.PostDecrementExpression:
return PostfixUnary.Create(info.SetKind(ExprKind.POST_DECR), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
return PostfixUnary.Create(info.SetKind(ExprKind.POST_DECR));
case SyntaxKind.AwaitExpression:
return Await.Create(info);
@@ -254,7 +254,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
return Switch.Create(info);
case SyntaxKind.SuppressNullableWarningExpression:
return PostfixUnary.Create(info.SetKind(ExprKind.SUPPRESS_NULLABLE_WARNING), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
return PostfixUnary.Create(info.SetKind(ExprKind.SUPPRESS_NULLABLE_WARNING));
case SyntaxKind.WithExpression:
return WithExpression.Create(info);

View File

@@ -4,23 +4,21 @@ using Semmle.Extraction.Kinds;
namespace Semmle.Extraction.CSharp.Entities.Expressions
{
internal class PostfixUnary : Expression<ExpressionSyntax>
internal class PostfixUnary : Expression<PostfixUnaryExpressionSyntax>
{
private PostfixUnary(ExpressionNodeInfo info, ExprKind kind, ExpressionSyntax operand)
private PostfixUnary(ExpressionNodeInfo info, ExprKind kind)
: base(info.SetKind(UnaryOperatorKind(info.Context, kind, info.Node)))
{
this.operand = operand;
operatorKind = kind;
}
private readonly ExpressionSyntax operand;
private readonly ExprKind operatorKind;
public static Expression Create(ExpressionNodeInfo info, ExpressionSyntax operand) => new PostfixUnary(info, info.Kind, operand).TryPopulate();
public static Expression Create(ExpressionNodeInfo info) => new PostfixUnary(info, info.Kind).TryPopulate();
protected override void PopulateExpression(TextWriter trapFile)
{
Create(Context, operand, this, 0);
Create(Context, Syntax.Operand, this, 0);
if (Kind == ExprKind.OPERATOR_INVOCATION)
{

View File

@@ -14,12 +14,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
private readonly ExprKind operatorKind;
public static PrefixUnary Create(ExpressionNodeInfo info)
{
var ret = new PrefixUnary(info, info.Kind);
ret.TryPopulate();
return ret;
}
public static Expression Create(ExpressionNodeInfo info) => new PrefixUnary(info, info.Kind).TryPopulate();
protected override void PopulateExpression(TextWriter trapFile)
{