C#: Extract 'with' expressions

This commit is contained in:
Tamas Vajk
2020-11-19 15:25:54 +01:00
parent 77af7edaa4
commit b2b4c9ecd6
18 changed files with 351 additions and 80 deletions

View File

@@ -250,6 +250,9 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
case SyntaxKind.SuppressNullableWarningExpression:
return PostfixUnary.Create(info.SetKind(ExprKind.SUPPRESS_NULLABLE_WARNING), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
case SyntaxKind.WithExpression:
return WithExpression.Create(info);
default:
info.Context.ModelError(info.Node, $"Unhandled expression '{info.Node}' of kind '{info.Node.Kind()}'");
return new Unknown(info);

View File

@@ -12,7 +12,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
protected Initializer(ExpressionNodeInfo info) : base(info) { }
}
internal class ArrayInitializer : Expression<InitializerExpressionSyntax>
internal class ArrayInitializer : Initializer
{
private ArrayInitializer(ExpressionNodeInfo info) : base(info.SetType(null).SetKind(ExprKind.ARRAY_INIT)) { }

View File

@@ -0,0 +1,20 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Semmle.Extraction.Kinds;
using System.IO;
namespace Semmle.Extraction.CSharp.Entities.Expressions
{
internal class WithExpression : Expression<WithExpressionSyntax>
{
private WithExpression(ExpressionNodeInfo info) : base(info.SetKind(ExprKind.WITH)) { }
public static Expression Create(ExpressionNodeInfo info) => new WithExpression(info).TryPopulate();
protected override void PopulateExpression(TextWriter trapFile)
{
Create(cx, Syntax.Expression, this, 0);
ObjectInitializer.Create(new ExpressionNodeInfo(cx, Syntax.Initializer, this, 1).SetType(Type));
}
}
}

View File

@@ -124,7 +124,7 @@ namespace Semmle.Extraction.Kinds
AND_PATTERN = 127,
OR_PATTERN = 128,
FUNCTION_POINTER_INVOCATION = 129,
WITH = 130,
DEFINE_SYMBOL = 999
}
}