Skip to content

Commit e391356

Browse files
authored
Merge pull request #4630 from tamasvajk/feature/csharp9-init-prop
C#: Add support for init only accessors
2 parents ceaaac2 + 74c88e6 commit e391356

File tree

12 files changed

+6641
-2679
lines changed

12 files changed

+6641
-2679
lines changed

csharp/extractor/Semmle.Extraction.CSharp/Entities/Accessor.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ public override void Populate(TextWriter trapFile)
7676
{
7777
trapFile.compiler_generated(this);
7878
}
79+
80+
if (symbol.IsInitOnly)
81+
{
82+
trapFile.init_only_accessors(this);
83+
}
7984
}
8085

8186
public static new Accessor Create(Context cx, IMethodSymbol symbol) =>

csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ internal static void accessors(this TextWriter trapFile, Accessor accessorKey, i
2626
trapFile.WriteTuple("accessors", accessorKey, kind, name, propKey, unboundAccessor);
2727
}
2828

29+
internal static void init_only_accessors(this TextWriter trapFile, Accessor accessorKey)
30+
{
31+
trapFile.WriteTuple("init_only_accessors", accessorKey);
32+
}
33+
2934
internal static void array_element_type(this TextWriter trapFile, ArrayType array, int dimension, int rank, Type elementType)
3035
{
3136
trapFile.WriteTuple("array_element_type", array, dimension, rank, elementType);

csharp/ql/src/semmle/code/csharp/Property.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,9 @@ class Setter extends Accessor, @setter {
472472
result = Accessor.super.getDeclaration()
473473
}
474474

475+
/** Holds if this setter is an `init`-only accessor. */
476+
predicate isInitOnly() { init_only_accessors(this) }
477+
475478
override string getAPrimaryQlClass() { result = "Setter" }
476479
}
477480

csharp/ql/src/semmlecode.csharp.dbscheme

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,9 @@ case @accessor.kind of
604604
| 2 = @setter
605605
;
606606

607+
init_only_accessors(
608+
unique int id: @accessor ref);
609+
607610
accessor_location(
608611
int id: @accessor ref,
609612
int loc: @location ref);

0 commit comments

Comments
 (0)