Skip to content

Commit 2d46dd2

Browse files
committed
C#: Add extractor support for the required modifier for fields and properties.
1 parent ff9e738 commit 2d46dd2

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ public static void HasModifier(Context cx, TextWriter trapFile, IEntity target,
6565
trapFile.has_modifiers(target, Modifier.Create(cx, modifier));
6666
}
6767

68+
private static void ExtractFieldModifiers(Context cx, TextWriter trapFile, IEntity key, IFieldSymbol symbol)
69+
{
70+
if (symbol.IsReadOnly)
71+
HasModifier(cx, trapFile, key, Modifiers.Readonly);
72+
73+
if (symbol.IsRequired)
74+
HasModifier(cx, trapFile, key, Modifiers.Required);
75+
}
76+
6877
private static void ExtractNamedTypeModifiers(Context cx, TextWriter trapFile, IEntity key, ISymbol symbol)
6978
{
7079
if (symbol.Kind != SymbolKind.NamedType)
@@ -106,8 +115,11 @@ public static void ExtractModifiers(Context cx, TextWriter trapFile, IEntity key
106115
if (symbol.IsVirtual)
107116
HasModifier(cx, trapFile, key, Modifiers.Virtual);
108117

109-
if (symbol.Kind == SymbolKind.Field && ((IFieldSymbol)symbol).IsReadOnly)
110-
HasModifier(cx, trapFile, key, Modifiers.Readonly);
118+
if (symbol is IFieldSymbol field)
119+
ExtractFieldModifiers(cx, trapFile, key, field);
120+
121+
if (symbol.Kind == SymbolKind.Property && ((IPropertySymbol)symbol).IsRequired)
122+
HasModifier(cx, trapFile, key, Modifiers.Required);
111123

112124
if (symbol.IsOverride)
113125
HasModifier(cx, trapFile, key, Modifiers.Override);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ internal static class Modifiers
1313
public const string Public = "public";
1414
public const string Readonly = "readonly";
1515
public const string Record = "record";
16+
public const string Required = "required";
1617
public const string Ref = "ref";
1718
public const string Sealed = "sealed";
1819
public const string Static = "static";

0 commit comments

Comments
 (0)