Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 486c192

Browse files
committed
C#: Refactoring expression and statement population.
1 parent e41e8d6 commit 486c192

110 files changed

Lines changed: 601 additions & 436 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

csharp/extractor/Semmle.Extraction.CIL/Id.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Collections.Generic;
2-
using System.IO;
32
using System.Reflection.Metadata;
43

54
namespace Semmle.Extraction.CIL

csharp/extractor/Semmle.Extraction.CSharp.Driver/Semmle.Extraction.CSharp.Driver.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ IPropertySymbol PropertySymbol
3030

3131
public new Accessor OriginalDefinition => Create(Context, symbol.OriginalDefinition);
3232

33-
public override void Populate()
33+
public override void Populate(System.IO.TextWriter trapFile)
3434
{
35-
PopulateMethod();
35+
PopulateMethod(trapFile);
3636
ExtractModifiers();
3737
ContainingType.ExtractGenerics();
3838

@@ -62,16 +62,16 @@ public override void Populate()
6262
return;
6363
}
6464

65-
Context.Emit(Tuples.accessors(this, kind, symbol.Name, parent, unboundAccessor));
65+
trapFile.Emit(Tuples.accessors(this, kind, symbol.Name, parent, unboundAccessor));
6666

6767
foreach (var l in Locations)
68-
Context.Emit(Tuples.accessor_location(this, l));
68+
trapFile.Emit(Tuples.accessor_location(this, l));
6969

70-
Overrides();
70+
Overrides(trapFile);
7171

7272
if (symbol.FromSource() && Block == null)
7373
{
74-
Context.Emit(Tuples.compiler_generated(this));
74+
trapFile.Emit(Tuples.compiler_generated(this));
7575
}
7676
}
7777

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

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Semmle.Extraction.CSharp.Populators;
44
using Semmle.Extraction.Entities;
55
using System.Collections.Generic;
6+
using System.IO;
67
using System.Linq;
78

89
namespace Semmle.Extraction.CSharp.Entities
@@ -11,36 +12,46 @@ class Attribute : FreshEntity, IExpressionParentEntity
1112
{
1213
bool IExpressionParentEntity.IsTopLevelParent => true;
1314

15+
private readonly AttributeData AttributeData;
16+
private readonly IEntity Entity;
17+
1418
public Attribute(Context cx, AttributeData attribute, IEntity entity)
1519
: base(cx)
1620
{
17-
if (attribute.ApplicationSyntaxReference != null)
21+
AttributeData = attribute;
22+
Entity = entity;
23+
TryPopulate();
24+
}
25+
26+
protected override void Populate(TextWriter trapFile)
27+
{
28+
if (AttributeData.ApplicationSyntaxReference != null)
1829
{
1930
// !! Extract attributes from assemblies.
2031
// This is harder because the "expression" entities presume the
2132
// existence of a syntax tree. This is not the case for compiled
2233
// attributes.
23-
var syntax = attribute.ApplicationSyntaxReference.GetSyntax() as AttributeSyntax;
24-
ExtractAttribute(syntax, attribute.AttributeClass, entity);
34+
var syntax = AttributeData.ApplicationSyntaxReference.GetSyntax() as AttributeSyntax;
35+
ExtractAttribute(cx.TrapWriter.Writer, syntax, AttributeData.AttributeClass, Entity);
2536
}
2637
}
2738

2839
public Attribute(Context cx, AttributeSyntax attribute, IEntity entity)
2940
: base(cx)
3041
{
3142
var info = cx.GetSymbolInfo(attribute);
32-
ExtractAttribute(attribute, info.Symbol.ContainingType, entity);
43+
ExtractAttribute(cx.TrapWriter.Writer, attribute, info.Symbol.ContainingType, entity);
3344
}
3445

35-
void ExtractAttribute(AttributeSyntax syntax, ITypeSymbol attributeClass, IEntity entity)
46+
void ExtractAttribute(System.IO.TextWriter trapFile, AttributeSyntax syntax, ITypeSymbol attributeClass, IEntity entity)
3647
{
3748
var type = Type.Create(cx, attributeClass);
38-
cx.Emit(Tuples.attributes(this, type.TypeRef, entity));
49+
trapFile.Emit(Tuples.attributes(this, type.TypeRef, entity));
3950

40-
cx.Emit(Tuples.attribute_location(this, cx.Create(syntax.Name.GetLocation())));
51+
trapFile.Emit(Tuples.attribute_location(this, cx.Create(syntax.Name.GetLocation())));
4152

4253
if (cx.Extractor.OutputPath != null)
43-
cx.Emit(Tuples.attribute_location(this, Assembly.CreateOutputAssembly(cx)));
54+
trapFile.Emit(Tuples.attribute_location(this, Assembly.CreateOutputAssembly(cx)));
4455

4556
TypeMention.Create(cx, syntax.Name, this, type);
4657

@@ -54,7 +65,7 @@ void ExtractAttribute(AttributeSyntax syntax, ITypeSymbol attributeClass, IEntit
5465
var expr = Expression.Create(cx, arg.Expression, this, child++);
5566
if (!(arg.NameEquals is null))
5667
{
57-
cx.Emit(Tuples.expr_argument_name(expr, arg.NameEquals.Name.Identifier.Text));
68+
trapFile.Emit(Tuples.expr_argument_name(expr, arg.NameEquals.Name.Identifier.Text));
5869
}
5970
}
6071
});

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ class CommentBlock : CachedEntity<ICommentBlock>
99
CommentBlock(Context cx, ICommentBlock init)
1010
: base(cx, init) { }
1111

12-
public override void Populate()
12+
public override void Populate(TextWriter trapFile)
1313
{
14-
Context.Emit(Tuples.commentblock(this));
14+
trapFile.Emit(Tuples.commentblock(this));
1515
int child = 0;
16-
Context.Emit(Tuples.commentblock_location(this, Context.Create(symbol.Location)));
16+
trapFile.Emit(Tuples.commentblock_location(this, Context.Create(symbol.Location)));
1717
foreach (var l in symbol.CommentLines)
1818
{
19-
Context.Emit(Tuples.commentblock_child(this, (CommentLine)l, child++));
19+
trapFile.Emit(Tuples.commentblock_child(this, (CommentLine)l, child++));
2020
}
2121
}
2222

@@ -32,7 +32,7 @@ public override void WriteId(TextWriter tw)
3232

3333
public void BindTo(Label entity, CommentBinding binding)
3434
{
35-
Context.Emit(Tuples.commentblock_binding(this, entity, binding));
35+
Context.TrapWriter.Writer.Emit(Tuples.commentblock_binding(this, entity, binding));
3636
}
3737

3838
public static CommentBlock Create(Context cx, ICommentBlock block) => CommentBlockFactory.Instance.CreateEntity(cx, block);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,11 @@ So we split it into separate lines
112112

113113
Extraction.Entities.Location location;
114114

115-
public override void Populate()
115+
public override void Populate(TextWriter trapFile)
116116
{
117117
location = Context.Create(Location);
118-
Context.Emit(Tuples.commentline(this, Type == CommentLineType.MultilineContinuation ? CommentLineType.Multiline : Type, Text, RawText));
119-
Context.Emit(Tuples.commentline_location(this, location));
118+
trapFile.Emit(Tuples.commentline(this, Type == CommentLineType.MultilineContinuation ? CommentLineType.Multiline : Type, Text, RawText));
119+
trapFile.Emit(Tuples.commentline_location(this, location));
120120
}
121121

122122
public override Microsoft.CodeAnalysis.Location ReportingLocation => location.symbol;

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

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,67 @@
11
using Microsoft.CodeAnalysis;
22
using System;
33
using System.Collections.Generic;
4-
using System.Diagnostics;
4+
using System.IO;
55
using System.Linq;
6-
using System.Text;
76

87
namespace Semmle.Extraction.CSharp.Entities
98
{
109
class Compilation : FreshEntity
1110
{
11+
string cwd;
12+
string[] args;
13+
1214
public Compilation(Context cx, string cwd, string[] args) : base(cx)
15+
{
16+
this.cwd = cwd;
17+
this.args = args;
18+
TryPopulate();
19+
}
20+
21+
protected override void Populate(TextWriter trapFile)
1322
{
1423
Extraction.Entities.Assembly.CreateOutputAssembly(cx);
1524

16-
cx.Emit(Tuples.compilations(this, Extraction.Entities.File.PathAsDatabaseString(cwd)));
25+
trapFile.Emit(Tuples.compilations(this, Extraction.Entities.File.PathAsDatabaseString(cwd)));
1726

1827
// Arguments
1928
int index = 0;
2029
foreach(var arg in args)
2130
{
22-
cx.Emit(Tuples.compilation_args(this, index++, arg));
31+
trapFile.Emit(Tuples.compilation_args(this, index++, arg));
2332
}
2433

2534
// Files
2635
index = 0;
2736
foreach(var file in cx.Compilation.SyntaxTrees.Select(tree => Extraction.Entities.File.Create(cx, tree.FilePath)))
2837
{
29-
cx.Emit(Tuples.compilation_compiling_files(this, index++, file));
38+
trapFile.Emit(Tuples.compilation_compiling_files(this, index++, file));
3039
}
3140

3241
// References
3342
index = 0;
3443
foreach(var file in cx.Compilation.References.OfType<PortableExecutableReference>().Select(r => Extraction.Entities.File.Create(cx, r.FilePath)))
3544
{
36-
cx.Emit(Tuples.compilation_referencing_files(this, index++, file));
45+
trapFile.Emit(Tuples.compilation_referencing_files(this, index++, file));
3746
}
3847

3948
// Diagnostics
4049
index = 0;
4150
foreach(var diag in cx.Compilation.GetDiagnostics().Select(d => new Diagnostic(cx, d)))
4251
{
43-
cx.Emit(Tuples.diagnostic_for(diag, this, 0, index++));
52+
trapFile.Emit(Tuples.diagnostic_for(diag, this, 0, index++));
4453
}
4554
}
4655

4756
public void PopulatePerformance(PerformanceMetrics p)
4857
{
58+
var trapFile = cx.TrapWriter.Writer;
4959
int index = 0;
5060
foreach(float metric in p.Metrics)
5161
{
52-
cx.Emit(Tuples.compilation_time(this, -1, index++, metric));
62+
trapFile.Emit(Tuples.compilation_time(this, -1, index++, metric));
5363
}
54-
cx.Emit(Tuples.compilation_finished(this, (float)p.Total.Cpu.TotalSeconds, (float)p.Total.Elapsed.TotalSeconds));
64+
trapFile.Emit(Tuples.compilation_finished(this, (float)p.Total.Cpu.TotalSeconds, (float)p.Total.Elapsed.TotalSeconds));
5565
}
5666

5767
public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel;
@@ -61,10 +71,18 @@ class Diagnostic : FreshEntity
6171
{
6272
public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel;
6373

74+
readonly Microsoft.CodeAnalysis.Diagnostic diagnostic;
75+
6476
public Diagnostic(Context cx, Microsoft.CodeAnalysis.Diagnostic diag) : base(cx)
6577
{
66-
cx.Emit(Tuples.diagnostics(this, (int)diag.Severity, diag.Id, diag.Descriptor.Title.ToString(),
67-
diag.GetMessage(), Extraction.Entities.Location.Create(cx, diag.Location)));
78+
diagnostic = diag;
79+
TryPopulate();
80+
}
81+
82+
protected override void Populate(TextWriter trapFile)
83+
{
84+
trapFile.Emit(Tuples.diagnostics(this, (int)diagnostic.Severity, diagnostic.Id, diagnostic.Descriptor.Title.ToString(),
85+
diagnostic.GetMessage(), Extraction.Entities.Location.Create(cx, diagnostic.Location)));
6886
}
6987
}
7088

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,24 @@ public class Constructor : Method
1414
Constructor(Context cx, IMethodSymbol init)
1515
: base(cx, init) { }
1616

17-
public override void Populate()
17+
public override void Populate(TextWriter trapFile)
1818
{
19-
PopulateMethod();
19+
PopulateMethod(trapFile);
2020
ExtractModifiers();
2121
ContainingType.ExtractGenerics();
2222

23-
Context.Emit(Tuples.constructors(this, symbol.ContainingType.Name, ContainingType, (Constructor)OriginalDefinition));
24-
Context.Emit(Tuples.constructor_location(this, Location));
23+
trapFile.Emit(Tuples.constructors(this, symbol.ContainingType.Name, ContainingType, (Constructor)OriginalDefinition));
24+
trapFile.Emit(Tuples.constructor_location(this, Location));
2525

2626
if (symbol.IsImplicitlyDeclared)
2727
{
2828
var lineCounts = new LineCounts() { Total = 2, Code = 1, Comment = 0 };
29-
Context.Emit(Tuples.numlines(this, lineCounts));
29+
trapFile.Emit(Tuples.numlines(this, lineCounts));
3030
}
31-
ExtractCompilerGenerated();
31+
ExtractCompilerGenerated(trapFile);
3232
}
3333

34-
protected override void ExtractInitializers()
34+
protected override void ExtractInitializers(TextWriter trapFile)
3535
{
3636
// Do not extract initializers for constructed types.
3737
if (!IsSourceDeclaration) return;
@@ -76,7 +76,7 @@ protected override void ExtractInitializers()
7676
return;
7777
}
7878

79-
Context.Emit(Tuples.expr_call(init, target));
79+
trapFile.Emit(Tuples.expr_call(init, target));
8080

8181
int child = 0;
8282
foreach (var arg in initializer.ArgumentList.Arguments)

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Microsoft.CodeAnalysis;
2+
using System.IO;
23

34
namespace Semmle.Extraction.CSharp.Entities
45
{
@@ -7,14 +8,14 @@ class Destructor : Method
78
Destructor(Context cx, IMethodSymbol init)
89
: base(cx, init) { }
910

10-
public override void Populate()
11+
public override void Populate(TextWriter trapFile)
1112
{
12-
PopulateMethod();
13+
PopulateMethod(trapFile);
1314
ExtractModifiers();
1415
ContainingType.ExtractGenerics();
1516

16-
Context.Emit(Tuples.destructors(this, string.Format("~{0}", symbol.ContainingType.Name), ContainingType, OriginalDefinition(Context, this, symbol)));
17-
Context.Emit(Tuples.destructor_location(this, Location));
17+
trapFile.Emit(Tuples.destructors(this, string.Format("~{0}", symbol.ContainingType.Name), ContainingType, OriginalDefinition(Context, this, symbol)));
18+
trapFile.Emit(Tuples.destructor_location(this, Location));
1819
}
1920

2021
static new Destructor OriginalDefinition(Context cx, Destructor original, IMethodSymbol symbol)

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public override void WriteId(TextWriter trapFile)
1919
trapFile.Write(";event");
2020
}
2121

22-
public override void Populate()
22+
public override void Populate(TextWriter trapFile)
2323
{
24-
ExtractNullability(symbol.NullableAnnotation);
24+
ExtractNullability(trapFile, symbol.NullableAnnotation);
2525

2626
var type = Type.Create(Context, symbol.Type);
2727
Context.Emit(Tuples.events(this, symbol.GetName(), ContainingType, type.TypeRef, Create(Context, symbol.OriginalDefinition)));
@@ -44,14 +44,14 @@ public override void Populate()
4444

4545
foreach (var explicitInterface in symbol.ExplicitInterfaceImplementations.Select(impl => Type.Create(Context, impl.ContainingType)))
4646
{
47-
Context.Emit(Tuples.explicitly_implements(this, explicitInterface.TypeRef));
47+
trapFile.Emit(Tuples.explicitly_implements(this, explicitInterface.TypeRef));
4848

4949
foreach (var syntax in declSyntaxReferences.OfType<EventDeclarationSyntax>())
5050
TypeMention.Create(Context, syntax.ExplicitInterfaceSpecifier.Name, this, explicitInterface);
5151
}
5252

5353
foreach (var l in Locations)
54-
Context.Emit(Tuples.event_location(this, l));
54+
trapFile.Emit(Tuples.event_location(this, l));
5555

5656
foreach (var syntaxType in declSyntaxReferences.OfType<VariableDeclaratorSyntax>().
5757
Select(d => d.Parent).

0 commit comments

Comments
 (0)