Skip to content

Commit 05f3c64

Browse files
committed
Fix code review findings
1 parent 7b5f2c7 commit 05f3c64

File tree

4 files changed

+18
-46
lines changed

4 files changed

+18
-46
lines changed

csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Sdk.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public Sdk(IDotNet dotNet, ILogger logger)
2323
this.dotNet = dotNet;
2424
this.logger = logger;
2525

26-
newestSdkVersion = new Lazy<DotNetVersion?>(GetNewestSdk);
26+
newestSdkVersion = new Lazy<DotNetVersion?>(GetNewestSdkVersion);
2727
cscPath = new Lazy<string?>(GetCscPath);
2828
}
2929

@@ -46,7 +46,7 @@ private static HashSet<DotNetVersion> ParseSdks(IList<string> listed)
4646
return sdks;
4747
}
4848

49-
private DotNetVersion? GetNewestSdk()
49+
private DotNetVersion? GetNewestSdkVersion()
5050
{
5151
var listed = dotNet.GetListedSdks();
5252
var sdks = ParseSdks(listed);
@@ -55,14 +55,14 @@ private static HashSet<DotNetVersion> ParseSdks(IList<string> listed)
5555

5656
private string? GetCscPath()
5757
{
58-
var sdk = GetNewestSdk();
59-
if (sdk is null)
58+
var newestSdkVersion = GetNewestSdkVersion();
59+
if (newestSdkVersion is null)
6060
{
6161
logger.LogWarning("No dotnet SDK found.");
6262
return null;
6363
}
6464

65-
var path = Path.Combine(sdk.FullPath, "Roslyn", "bincore", "csc.dll");
65+
var path = Path.Combine(newestSdkVersion.FullPath, "Roslyn", "bincore", "csc.dll");
6666
logger.LogDebug($"Source generator CSC: '{path}'");
6767
if (!File.Exists(path))
6868
{

csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorBase.cs

+1-7
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,7 @@ protected override IEnumerable<string> Run()
7373
continue;
7474
}
7575

76-
if (!groupedFiles.TryGetValue(project.File, out var files))
77-
{
78-
files = [];
79-
groupedFiles[project.File] = files;
80-
}
81-
82-
files.Add(additionalFile);
76+
groupedFiles.AddAnother(project.File, additionalFile);
8377
}
8478

8579
try

csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs

+10-32
Original file line numberDiff line numberDiff line change
@@ -35,23 +35,22 @@ public DotnetSourceGeneratorWrapper(
3535

3636
public IEnumerable<string> RunSourceGenerator(IEnumerable<string> additionalFiles, string csprojFile, IEnumerable<string> references, string targetDir)
3737
{
38-
var name = Guid.NewGuid().ToString("N").ToUpper();
39-
var tempPath = FileUtils.GetTemporaryWorkingDirectory(out var shouldCleanUp);
40-
var analyzerConfig = Path.Combine(tempPath, $"{name}.txt");
41-
var dllPath = Path.Combine(tempPath, $"{name}.dll");
42-
var cscArgsPath = Path.Combine(tempPath, $"{name}.rsp");
43-
var outputFolder = Path.Combine(targetDir, name);
44-
Directory.CreateDirectory(outputFolder);
45-
4638
try
4739
{
40+
var name = Guid.NewGuid().ToString("N").ToUpper();
41+
using var tempDir = new TemporaryDirectory(Path.Join(FileUtils.GetTemporaryWorkingDirectory(out _), "source-generator"), "source generator temporary", logger);
42+
var analyzerConfigPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.txt");
43+
var dllPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.dll");
44+
var cscArgsPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.rsp");
45+
var outputFolder = Path.Combine(targetDir, name);
46+
Directory.CreateDirectory(outputFolder);
4847
logger.LogInfo("Producing analyzer config content.");
49-
GenerateAnalyzerConfig(additionalFiles, csprojFile, analyzerConfig);
48+
GenerateAnalyzerConfig(additionalFiles, csprojFile, analyzerConfigPath);
5049

51-
logger.LogDebug($"Analyzer config content: {File.ReadAllText(analyzerConfig)}");
50+
logger.LogDebug($"Analyzer config content: {File.ReadAllText(analyzerConfigPath)}");
5251

5352
var args = new StringBuilder();
54-
args.Append($"/target:exe /generatedfilesout:\"{outputFolder}\" /out:\"{dllPath}\" /analyzerconfig:\"{analyzerConfig}\" ");
53+
args.Append($"/target:exe /generatedfilesout:\"{outputFolder}\" /out:\"{dllPath}\" /analyzerconfig:\"{analyzerConfigPath}\" ");
5554

5655
foreach (var f in Directory.GetFiles(SourceGeneratorFolder, "*.dll", new EnumerationOptions { RecurseSubdirectories = false, MatchCasing = MatchCasing.CaseInsensitive }))
5756
{
@@ -91,27 +90,6 @@ public IEnumerable<string> RunSourceGenerator(IEnumerable<string> additionalFile
9190
logger.LogInfo($"Failed to generate source files from {FileType} files: {ex.Message}");
9291
return [];
9392
}
94-
finally
95-
{
96-
if (shouldCleanUp)
97-
{
98-
DeleteFile(analyzerConfig);
99-
DeleteFile(dllPath);
100-
DeleteFile(cscArgsPath);
101-
}
102-
}
103-
}
104-
105-
private void DeleteFile(string path)
106-
{
107-
try
108-
{
109-
File.Delete(path);
110-
}
111-
catch (Exception exc)
112-
{
113-
logger.LogWarning($"Failed to delete file {path}: {exc}");
114-
}
11593
}
11694
}
11795
}

csharp/extractor/Semmle.Util/TemporaryDirectory.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ public sealed class TemporaryDirectory : IDisposable
1515

1616
public DirectoryInfo DirInfo { get; }
1717

18-
public TemporaryDirectory(string name, string userReportedDirectoryPurpose, ILogger logger)
18+
public TemporaryDirectory(string path, string userReportedDirectoryPurpose, ILogger logger)
1919
{
20-
DirInfo = new DirectoryInfo(name);
20+
DirInfo = new DirectoryInfo(path);
2121
DirInfo.Create();
2222
this.userReportedDirectoryPurpose = userReportedDirectoryPurpose;
2323
this.logger = logger;

0 commit comments

Comments
 (0)