Skip to content

Commit 831baa8

Browse files
committed
C#: Refactor and regenerate stubs
1 parent f07d02b commit 831baa8

File tree

64 files changed

+180
-163
lines changed

Some content is hidden

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

64 files changed

+180
-163
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System.Linq;
2+
3+
using Microsoft.CodeAnalysis;
4+
using Microsoft.CodeAnalysis.CSharp;
5+
6+
using Semmle.Util;
7+
8+
namespace Semmle.Extraction.CSharp.StubGenerator;
9+
10+
internal class RelevantSymbol
11+
{
12+
private readonly IAssemblySymbol assembly;
13+
private readonly MemoizedFunc<INamedTypeSymbol, bool> isRelevantNamedType;
14+
private readonly MemoizedFunc<INamespaceSymbol, bool> isRelevantNamespace;
15+
16+
public RelevantSymbol(IAssemblySymbol assembly)
17+
{
18+
this.assembly = assembly;
19+
20+
isRelevantNamedType = new(symbol =>
21+
StubVisitor.IsRelevantBaseType(symbol) &&
22+
SymbolEqualityComparer.Default.Equals(symbol.ContainingAssembly, assembly));
23+
24+
isRelevantNamespace = new(symbol =>
25+
symbol.GetTypeMembers().Any(IsRelevantNamedType) ||
26+
symbol.GetNamespaceMembers().Any(IsRelevantNamespace));
27+
}
28+
29+
public bool IsRelevantNamedType(INamedTypeSymbol symbol) => isRelevantNamedType.Invoke(symbol);
30+
31+
public bool IsRelevantNamespace(INamespaceSymbol symbol) => isRelevantNamespace.Invoke(symbol);
32+
}
33+

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

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
using System;
21
using System.Collections.Concurrent;
32
using System.Collections.Generic;
43
using System.IO;
54
using System.Linq;
65
using System.Text;
76
using System.Threading.Tasks;
7+
88
using Microsoft.CodeAnalysis;
99
using Microsoft.CodeAnalysis.CSharp;
10+
1011
using Semmle.Util;
1112
using Semmle.Util.Logging;
1213

@@ -56,20 +57,18 @@ private static void StubReference(ILogger logger, CSharpCompilation compilation,
5657
if (compilation.GetAssemblyOrModuleSymbol(reference) is not IAssemblySymbol assembly)
5758
return;
5859

59-
Func<StreamWriter> makeWriter = () =>
60-
{
61-
var fileStream = new FileStream(FileUtils.NestPaths(logger, outputPath, path.Replace(".dll", ".cs")), FileMode.Create, FileAccess.Write);
62-
var writer = new StreamWriter(fileStream, new UTF8Encoding(false));
63-
return writer;
64-
};
65-
66-
using var visitor = new StubVisitor(assembly, makeWriter);
60+
var relevantSymbol = new RelevantSymbol(assembly);
6761

68-
if (!assembly.Modules.Any(m => visitor.IsRelevantNamespace(m.GlobalNamespace)))
62+
if (!assembly.Modules.Any(m => relevantSymbol.IsRelevantNamespace(m.GlobalNamespace)))
6963
return;
7064

71-
visitor.StubWriter.WriteLine("// This file contains auto-generated code.");
72-
visitor.StubWriter.WriteLine($"// Generated from `{assembly.Identity}`.");
65+
using var fileStream = new FileStream(FileUtils.NestPaths(logger, outputPath, path.Replace(".dll", ".cs")), FileMode.Create, FileAccess.Write);
66+
using var writer = new StreamWriter(fileStream, new UTF8Encoding(false));
67+
68+
var visitor = new StubVisitor(writer, relevantSymbol);
69+
70+
writer.WriteLine("// This file contains auto-generated code.");
71+
writer.WriteLine($"// Generated from `{assembly.Identity}`.");
7372

7473
visitor.StubAttributes(assembly.GetAttributes(), "assembly: ");
7574

0 commit comments

Comments
 (0)