Skip to content

Commit c2f91c5

Browse files
committed
C#: Add types for pattern expressions.
1 parent 57f0a87 commit c2f91c5

7 files changed

Lines changed: 22 additions & 10 deletions

File tree

‎csharp/extractor/Semmle.Extraction.CSharp/CodeAnalysisExtensions/SymbolExtensions.cs‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,18 @@ public static AnnotatedTypeSymbol GetType(this Context cx, Microsoft.CodeAnalysi
785785
return new AnnotatedTypeSymbol(info.Type.DisambiguateType(), info.Nullability.Annotation);
786786
}
787787

788+
/// <summary>
789+
/// Gets the converted type of a syntax node, or default if it could not be determined.
790+
/// </summary>
791+
/// <param name="cx">Extractor context.</param>
792+
/// <param name="node">The syntax node to determine the converted type for.</param>
793+
/// <returns>The converted type symbol of the node, or default.</returns>
794+
public static AnnotatedTypeSymbol GetConvertedType(this Context cx, Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode node)
795+
{
796+
var info = GetTypeInfo(cx, node);
797+
return new AnnotatedTypeSymbol(info.ConvertedType.DisambiguateType(), info.Nullability.Annotation);
798+
}
799+
788800
/// <summary>
789801
/// Gets the annotated type arguments of an INamedTypeSymbol.
790802
/// This has not yet been exposed on the public API.

‎csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/BinaryPattern.cs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
88
internal class BinaryPattern : Expression
99
{
1010
public BinaryPattern(Context cx, BinaryPatternSyntax syntax, IExpressionParentEntity parent, int child) :
11-
base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken, syntax), parent, child, isCompilerGenerated: false, null))
11+
base(new ExpressionInfo(cx, cx.GetConvertedType(syntax), cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken, syntax), parent, child, isCompilerGenerated: false, null))
1212
{
1313
Pattern.Create(cx, syntax.Left, this, 0);
1414
Pattern.Create(cx, syntax.Right, this, 1);
@@ -24,4 +24,4 @@ private static ExprKind GetKind(SyntaxToken operatorToken, BinaryPatternSyntax s
2424
};
2525
}
2626
}
27-
}
27+
}

‎csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/ListPattern.cs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
77
internal class ListPattern : Expression
88
{
99
internal ListPattern(Context cx, ListPatternSyntax syntax, IExpressionParentEntity parent, int child) :
10-
base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.LIST_PATTERN, parent, child, isCompilerGenerated: false, null))
10+
base(new ExpressionInfo(cx, cx.GetConvertedType(syntax), cx.CreateLocation(syntax.GetLocation()), ExprKind.LIST_PATTERN, parent, child, isCompilerGenerated: false, null))
1111
{
1212
syntax.Patterns.ForEach((p, i) => Pattern.Create(cx, p, this, i));
1313
}
1414
}
15-
}
15+
}

‎csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RecursivePattern.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ internal class RecursivePattern : Expression
1515
/// <param name="parent">The parent pattern/expression.</param>
1616
/// <param name="child">The child index of this pattern.</param>
1717
public RecursivePattern(Context cx, RecursivePatternSyntax syntax, IExpressionParentEntity parent, int child) :
18-
base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.RECURSIVE_PATTERN, parent, child, isCompilerGenerated: false, null))
18+
base(new ExpressionInfo(cx, cx.GetConvertedType(syntax), cx.CreateLocation(syntax.GetLocation()), ExprKind.RECURSIVE_PATTERN, parent, child, isCompilerGenerated: false, null))
1919
{
2020
// Extract the type access
2121
if (syntax.Type is TypeSyntax t)

‎csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/RelationalPattern.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
88
internal class RelationalPattern : Expression
99
{
1010
public RelationalPattern(Context cx, RelationalPatternSyntax syntax, IExpressionParentEntity parent, int child) :
11-
base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken), parent, child, isCompilerGenerated: false, null))
11+
base(new ExpressionInfo(cx, cx.GetConvertedType(syntax), cx.CreateLocation(syntax.GetLocation()), GetKind(syntax.OperatorToken), parent, child, isCompilerGenerated: false, null))
1212
{
1313
Expression.Create(cx, syntax.Expression, this, 0);
1414
}

‎csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/SlicePattern.cs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
66
internal class SlicePattern : Expression
77
{
88
public SlicePattern(Context cx, SlicePatternSyntax syntax, IExpressionParentEntity parent, int child) :
9-
base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.SLICE_PATTERN, parent, child, isCompilerGenerated: false, null))
9+
base(new ExpressionInfo(cx, cx.GetConvertedType(syntax), cx.CreateLocation(syntax.GetLocation()), ExprKind.SLICE_PATTERN, parent, child, isCompilerGenerated: false, null))
1010
{
1111
if (syntax.Pattern is not null)
1212
{
1313
Pattern.Create(cx, syntax.Pattern, this, 0);
1414
}
1515
}
1616
}
17-
}
17+
}

‎csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/UnaryPattern.cs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
66
internal class UnaryPattern : Expression
77
{
88
public UnaryPattern(Context cx, UnaryPatternSyntax syntax, IExpressionParentEntity parent, int child) :
9-
base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.NOT_PATTERN, parent, child, isCompilerGenerated: false, null))
9+
base(new ExpressionInfo(cx, cx.GetConvertedType(syntax), cx.CreateLocation(syntax.GetLocation()), ExprKind.NOT_PATTERN, parent, child, isCompilerGenerated: false, null))
1010
{
1111
Pattern.Create(cx, syntax.Pattern, this, 0);
1212
}
1313
}
14-
}
14+
}

0 commit comments

Comments
 (0)