Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions csharp/extractor/Semmle.Extraction.CIL/Factories.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public T Populate<T>(T e) where T : IExtractedEntity
else
{
e.Label = cx.GetNewLabel();
cx.DefineLabel(e, cx.TrapWriter.Writer);
cx.DefineLabel(e, cx.TrapWriter.Writer, cx.Extractor);
ids.Add(e, e.Label);
cx.PopulateLater(() =>
{
Expand Down Expand Up @@ -76,7 +76,7 @@ public PrimitiveType Create(PrimitiveTypeCode code)
{
e = new PrimitiveType(this, code);
e.Label = cx.GetNewLabel();
cx.DefineLabel(e, cx.TrapWriter.Writer);
cx.DefineLabel(e, cx.TrapWriter.Writer, cx.Extractor);
primitiveTypes[(int)code] = e;
}

Expand Down
10 changes: 5 additions & 5 deletions csharp/extractor/Semmle.Extraction/Context.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,19 +57,19 @@ public Entity CreateEntity<Type, Entity>(ICachedEntityFactory<Type, Entity> fact
// A recursion guard against writing to the trap file whilst writing an id to the trap file.
bool WritingLabel = false;

public void DefineLabel(IEntity entity, TextWriter trapFile)
public void DefineLabel(IEntity entity, TextWriter trapFile, IExtractor extractor)
{
if (WritingLabel)
{
// Don't define a label whilst writing a label.
PopulateLater(() => DefineLabel(entity, trapFile));
PopulateLater(() => DefineLabel(entity, trapFile, extractor));
}
else
{
try
{
WritingLabel = true;
entity.DefineLabel(trapFile);
entity.DefineLabel(trapFile, extractor);
}
finally
{
Expand Down Expand Up @@ -102,7 +102,7 @@ public Entity CreateEntity2<Type, Entity>(ICachedEntityFactory<Type, Entity> fac
entity.Label = label;
entityLabelCache[entity] = label;

DefineLabel(entity, TrapWriter.Writer);
DefineLabel(entity, TrapWriter.Writer, Extractor);

if (entity.NeedsPopulation)
Populate(init as ISymbol, entity);
Expand Down Expand Up @@ -148,7 +148,7 @@ private Entity CreateNonNullEntity<Type, Entity>(ICachedEntityFactory<Type, Enti

objectEntityCache[init] = entity;

DefineLabel(entity, TrapWriter.Writer);
DefineLabel(entity, TrapWriter.Writer, Extractor);
if (entity.NeedsPopulation)
Populate(init as ISymbol, entity);

Expand Down
13 changes: 11 additions & 2 deletions csharp/extractor/Semmle.Extraction/Entity.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Microsoft.CodeAnalysis;
using System;
using System.IO;

namespace Semmle.Extraction
Expand Down Expand Up @@ -141,11 +142,19 @@ public static Entity CreateEntity<Type, Entity>(this ICachedEntityFactory<Type,
public static Entity CreateEntity2<Type, Entity>(this ICachedEntityFactory<Type, Entity> factory, Context cx, Type init)
where Entity : ICachedEntity => cx.CreateEntity2(factory, init);

public static void DefineLabel(this IEntity entity, TextWriter trapFile)
public static void DefineLabel(this IEntity entity, TextWriter trapFile, IExtractor extractor)
{
trapFile.WriteLabel(entity);
trapFile.Write("=");
entity.WriteQuotedId(trapFile);
try
{
entity.WriteQuotedId(trapFile);
}
catch(Exception ex) // lgtm[cs/catch-of-all-exceptions]
{
trapFile.WriteLine("\"");
extractor.Message(new Message("Unhandled exception generating id", entity.ToString(), null, ex.StackTrace.ToString()));
}
trapFile.WriteLine();
}

Expand Down
6 changes: 6 additions & 0 deletions csharp/extractor/Semmle.Extraction/TrapExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ public static void WriteLabel(this TextWriter trapFile, IEntity entity)

public static void WriteSubId(this TextWriter trapFile, IEntity entity)
{
if (entity is null)
{
trapFile.Write("<null>");
return;
}

trapFile.Write('{');
trapFile.WriteLabel(entity);
trapFile.Write('}');
Expand Down