Skip to content

Commit 94583cd

Browse files
authored
Merge pull request #2245 from calumgrant/cs/nullability-refactor
C#: Store nullability on the side
2 parents 67963a5 + 38f82d8 commit 94583cd

35 files changed

+15280
-11158
lines changed

csharp/extractor/Semmle.Extraction.CIL/Entities/Type.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -920,7 +920,8 @@ public override void WriteId(TextWriter trapFile, bool inContext)
920920
{
921921
elementType.GetId(trapFile, inContext);
922922
trapFile.Write('[');
923-
trapFile.Write(rank);
923+
for (int i = 1; i < rank; ++i)
924+
trapFile.Write(',');
924925
trapFile.Write(']');
925926
}
926927

@@ -1206,7 +1207,10 @@ struct Array : ITypeSignature
12061207
public void WriteId(TextWriter trapFile, GenericContext gc)
12071208
{
12081209
elementType.WriteId(trapFile, gc);
1209-
trapFile.Write("[]");
1210+
trapFile.Write('[');
1211+
for (int i=1; i<shape.Rank; ++i)
1212+
trapFile.Write(',');
1213+
trapFile.Write(']');
12101214
}
12111215
}
12121216

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public override void WriteId(TextWriter trapFile)
2121

2222
public override void Populate(TextWriter trapFile)
2323
{
24-
PopulateNullability(trapFile, symbol.NullableAnnotation);
24+
PopulateNullability(trapFile, symbol.GetAnnotatedType());
2525

2626
var type = Type.Create(Context, symbol.Type);
2727
trapFile.events(this, symbol.GetName(), ContainingType, type.TypeRef, Create(Context, symbol.OriginalDefinition));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public override void Populate(TextWriter trapFile)
3030
PopulateMetadataHandle(trapFile);
3131
PopulateAttributes();
3232
ContainingType.PopulateGenerics();
33-
PopulateNullability(trapFile, symbol.NullableAnnotation);
33+
PopulateNullability(trapFile, symbol.GetAnnotatedType());
3434

3535
Field unboundFieldKey = Field.Create(Context, symbol.OriginalDefinition);
3636
trapFile.fields(this, (symbol.IsConst ? 2 : 1), symbol.Name, ContainingType, Type.Type.TypeRef, unboundFieldKey);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ protected Indexer(Context cx, IPropertySymbol init)
1414

1515
public override void Populate(TextWriter trapFile)
1616
{
17-
PopulateNullability(trapFile, symbol.NullableAnnotation);
17+
PopulateNullability(trapFile, symbol.GetAnnotatedType());
1818

1919
var type = Type.Create(Context, symbol.Type);
2020
trapFile.indexers(this, symbol.GetName(useMetadataName: true), ContainingType, type.TypeRef, OriginalDefinition);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public override void Populate(TextWriter trapFile)
3131
{
3232
if (symbol is ILocalSymbol local)
3333
{
34-
PopulateNullability(trapFile, local.NullableAnnotation);
34+
PopulateNullability(trapFile, local.GetAnnotatedType());
3535
if (local.IsRef)
3636
trapFile.type_annotation(this, Kinds.TypeAnnotation.Ref);
3737
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ public static Method Create(Context cx, IMethodSymbol methodDecl)
264264

265265
var methodKind = methodDecl.MethodKind;
266266

267-
if(methodKind == MethodKind.ExplicitInterfaceImplementation)
267+
if (methodKind == MethodKind.ExplicitInterfaceImplementation)
268268
{
269269
// Retrieve the original method kind
270270
methodKind = methodDecl.ExplicitInterfaceImplementations.Select(m => m.MethodKind).FirstOrDefault();
@@ -345,11 +345,12 @@ protected void PopulateGenerics(TextWriter trapFile)
345345
foreach (var tp in symbol.GetAnnotatedTypeArguments())
346346
{
347347
trapFile.type_arguments(Type.Create(Context, tp.Symbol), child, this);
348-
var ta = tp.Nullability.GetTypeAnnotation();
349-
if (ta != Kinds.TypeAnnotation.None)
350-
trapFile.type_argument_annotation(this, child, ta);
351348
child++;
352349
}
350+
351+
var nullability = new Nullability(symbol);
352+
if (!nullability.IsOblivious)
353+
trapFile.type_nullability(this, NullabilityEntity.Create(Context, nullability));
353354
}
354355
else
355356
{
@@ -380,7 +381,7 @@ protected void PopulateMethod(TextWriter trapFile)
380381
PopulateMethodBody(trapFile);
381382
PopulateGenerics(trapFile);
382383
PopulateMetadataHandle(trapFile);
383-
PopulateNullability(trapFile, symbol.ReturnNullableAnnotation);
384+
PopulateNullability(trapFile, symbol.GetAnnotatedReturnType());
384385
}
385386

386387
public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.PushesLabel;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ string Name
103103
public override void Populate(TextWriter trapFile)
104104
{
105105
PopulateAttributes();
106-
PopulateNullability(trapFile, symbol.NullableAnnotation);
106+
PopulateNullability(trapFile, symbol.GetAnnotatedType());
107107
PopulateRefKind(trapFile, symbol.RefKind);
108108

109109
if (symbol.Name != Original.symbol.Name)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public override void Populate(TextWriter trapFile)
2828
PopulateAttributes();
2929
PopulateModifiers(trapFile);
3030
BindComments();
31-
PopulateNullability(trapFile, symbol.NullableAnnotation);
31+
PopulateNullability(trapFile, symbol.GetAnnotatedType());
3232
PopulateRefKind(trapFile, symbol.RefKind);
3333

3434
var type = Type.Create(Context, symbol.Type);

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@ protected void PopulateAttributes()
2828
Attribute.ExtractAttributes(Context, symbol, this);
2929
}
3030

31-
protected void PopulateNullability(TextWriter trapFile, NullableAnnotation annotation)
31+
protected void PopulateNullability(TextWriter trapFile, AnnotatedTypeSymbol type)
3232
{
33-
var ta = annotation.GetTypeAnnotation();
34-
if (ta != Kinds.TypeAnnotation.None)
35-
trapFile.type_annotation(this, ta);
33+
var n = NullabilityEntity.Create(Context, Nullability.Create(type));
34+
if (!type.HasObliviousNullability())
35+
{
36+
trapFile.type_nullability(this, n);
37+
}
3638
}
3739

3840
protected void PopulateRefKind(TextWriter trapFile, RefKind kind)

csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/ArrayType.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,11 @@ public override void Populate(TextWriter trapFile)
2727
{
2828
trapFile.array_element_type(this, Dimension, Rank, element.Type.TypeRef);
2929
PopulateType(trapFile);
30-
PopulateNullability(trapFile, symbol.ElementNullableAnnotation);
3130
}
3231

3332
public override void WriteId(TextWriter trapFile)
3433
{
3534
trapFile.WriteSubId(element.Type);
36-
trapFile.Write((int)symbol.ElementNullableAnnotation);
3735
symbol.BuildArraySuffix(trapFile);
3836
trapFile.Write(";type");
3937
}

0 commit comments

Comments
 (0)