|
1 | 1 | # Improvements to C# analysis |
2 | 2 |
|
| 3 | +## General improvements |
| 4 | + |
| 5 | +C# analysis now supports the extraction and analysis of many C# 8 features. For details see [Changes to code extraction](#changes-to-code-extraction) and [Changes to QL libraries](#changes-to-ql-libraries) below. |
| 6 | + |
3 | 7 | ## Changes to existing queries |
4 | 8 |
|
5 | 9 | | **Query** | **Expected impact** | **Change** | |
6 | 10 | |------------------------------|------------------------|-----------------------------------| |
7 | | -| Class defines a field that uses an ICryptoTransform class in a way that would be unsafe for concurrent threads (`cs/thread-unsafe-icryptotransform-field-in-class`) | Fewer false positive results | The criteria for a result has changed to include nested properties, nested fields and collections. The format of the alert message has changed to highlight the static field. | |
8 | | -| Constant condition (`cs/constant-condition`) | Fewer false positive results | Results have been removed where the `null` value is in a conditional expression on the left hand side of a null-coalescing expression. For example, in `(a ? b : null) ?? c`, `null` is not considered to be a constant condition. | |
9 | | -| Useless upcast (`cs/useless-upcast`) | Fewer false positive results | Results have been removed where the upcast is used to disambiguate the target of a constructor call. | |
| 11 | +| Class defines a field that uses an ICryptoTransform class in a way that would be unsafe for concurrent threads (`cs/thread-unsafe-icryptotransform-field-in-class`) | Fewer false positive results | The criteria for a result has changed to include nested properties, nested fields, and collections. The format of the alert message has changed to highlight the static field. | |
| 12 | +| Constant condition (`cs/constant-condition`) | Fewer false positive results | The query now ignores code where the `null` value is in a conditional expression on the left hand side of a null-coalescing expression. For example, in `(a ? b : null) ?? c`, `null` is not considered to be a constant condition. | |
| 13 | +| Useless upcast (`cs/useless-upcast`) | Fewer false positive results | The query now ignores code where the upcast is used to disambiguate the target of a constructor call. | |
10 | 14 |
|
11 | 15 | ## Changes to code extraction |
12 | 16 |
|
|
17 | 21 | - `static` modifiers on local functions |
18 | 22 | - Null-coalescing assignment expressions |
19 | 23 |
|
20 | | -* The `unmanaged` type parameter constraint is now extracted. |
| 24 | +* The `unmanaged` type parameter constraint is also now extracted. |
21 | 25 |
|
22 | 26 | ## Changes to QL libraries |
23 | 27 |
|
24 | | -* The class `Attribute` has two new predicates: `getConstructorArgument()` and `getNamedArgument()`. The first predicate returns arguments to the underlying constructor call and the latter returns named arguments for initializing fields and properties. |
25 | | -* The class `TypeParameterConstraints` has a new predicate `hasUnmanagedTypeConstraint()`, indicating that the type parameter has the `unmanaged` constraint. |
| 28 | +* The class `Attribute` has two new predicates: `getConstructorArgument()` and `getNamedArgument()`. The first predicate returns arguments to the underlying constructor call and the second returns named arguments for initializing fields and properties. |
| 29 | +* The class `TypeParameterConstraints` has a new predicate `hasUnmanagedTypeConstraint()`. This shows whether the type parameter has the `unmanaged` constraint. |
26 | 30 | * The following QL classes have been added to model C# 8 features: |
27 | 31 | - Class `AssignCoalesceExpr` models null-coalescing assignment, for example `x ??= y` |
28 | 32 | - Class `IndexExpr` models from-end index expressions, for example `^1` |
|
37 | 41 | - Class `Switch` models both `SwitchExpr` and `SwitchStmt` |
38 | 42 | - Class `Case` models both `CaseStmt` and `SwitchCaseExpr` |
39 | 43 | - Class `UsingStmt` models both `UsingBlockStmt` and `UsingDeclStmt` |
40 | | - |
41 | | -## Changes to autobuilder |
|
0 commit comments