mirror of
https://github.com/github/codeql.git
synced 2026-04-29 02:35:15 +02:00
C# Add missing Windows Forms implicit usings
This commit is contained in:
@@ -116,8 +116,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
bool.TryParse(webViewExtractionOption, out var shouldExtractWebViews) &&
|
||||
shouldExtractWebViews)
|
||||
{
|
||||
CompilationInfos.Add(("WebView extraction enabled", "1"));
|
||||
GenerateSourceFilesFromWebViews(allNonBinaryFiles);
|
||||
}
|
||||
else
|
||||
{
|
||||
CompilationInfos.Add(("WebView extraction enabled", "0"));
|
||||
}
|
||||
|
||||
CompilationInfos.Add(("UseWPF set", fileContent.UseWpf ? "1" : "0"));
|
||||
CompilationInfos.Add(("UseWindowsForms set", fileContent.UseWindowsForms ? "1" : "0"));
|
||||
|
||||
GenerateSourceFileFromImplicitUsings();
|
||||
|
||||
@@ -434,6 +442,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
"Microsoft.Extensions.DependencyInjection", "Microsoft.Extensions.Hosting", "Microsoft.Extensions.Logging" });
|
||||
}
|
||||
|
||||
if (fileContent.UseWindowsForms)
|
||||
{
|
||||
usings.UnionWith(new[] { "System.Drawing", "System.Windows.Forms" });
|
||||
}
|
||||
|
||||
usings.UnionWith(fileContent.CustomImplicitUsings);
|
||||
|
||||
logger.LogInfo($"Generating source file for implicit usings. Namespaces: {string.Join(", ", usings.OrderBy(u => u))}");
|
||||
|
||||
@@ -61,6 +61,28 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
}
|
||||
}
|
||||
|
||||
private bool useWpf = false;
|
||||
|
||||
public bool UseWpf
|
||||
{
|
||||
get
|
||||
{
|
||||
initialize.Run();
|
||||
return useWpf;
|
||||
}
|
||||
}
|
||||
|
||||
private bool useWindowsForms = false;
|
||||
|
||||
public bool UseWindowsForms
|
||||
{
|
||||
get
|
||||
{
|
||||
initialize.Run();
|
||||
return useWindowsForms;
|
||||
}
|
||||
}
|
||||
|
||||
private bool isLegacyProjectStructureUsed = false;
|
||||
|
||||
public bool IsLegacyProjectStructureUsed
|
||||
@@ -173,6 +195,14 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
|| line.Contains("<ImplicitUsings>enable</ImplicitUsings>".AsSpan(), StringComparison.Ordinal)
|
||||
|| line.Contains("<ImplicitUsings>true</ImplicitUsings>".AsSpan(), StringComparison.Ordinal);
|
||||
|
||||
// Determine if WPF is used.
|
||||
useWpf = useWpf
|
||||
|| line.Contains("<UseWPF>true</UseWPF>".AsSpan(), StringComparison.Ordinal);
|
||||
|
||||
// Determine if Windows Forms is used.
|
||||
useWindowsForms = useWindowsForms
|
||||
|| line.Contains("<UseWindowsForms>true</UseWindowsForms>".AsSpan(), StringComparison.Ordinal);
|
||||
|
||||
// Find all custom implicit usings.
|
||||
foreach (var valueMatch in CustomImplicitUsingDeclarations().EnumerateMatches(line))
|
||||
{
|
||||
|
||||
@@ -84,7 +84,7 @@ namespace Semmle.Extraction.Tests
|
||||
Assert.Contains("StyleCop.Analyzers".ToLowerInvariant(), allPackages);
|
||||
}
|
||||
|
||||
private static void ImplicitUsingsTest(string line, bool expected)
|
||||
private static void CsProjSettingsTest(string line, bool expected, Func<FileContent, bool> func)
|
||||
{
|
||||
// Setup
|
||||
var lines = new List<string>()
|
||||
@@ -94,28 +94,52 @@ namespace Semmle.Extraction.Tests
|
||||
var fileContent = new TestFileContent(lines);
|
||||
|
||||
// Execute
|
||||
var useImplicitUsings = fileContent.UseImplicitUsings;
|
||||
var actual = func(fileContent);
|
||||
|
||||
// Verify
|
||||
Assert.Equal(expected, useImplicitUsings);
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestFileContent_ImplicitUsings0()
|
||||
{
|
||||
ImplicitUsingsTest("<ImplicitUsings>false</ImplicitUsings>", false);
|
||||
CsProjSettingsTest("<ImplicitUsings>false</ImplicitUsings>", false, fc => fc.UseImplicitUsings);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestFileContent_ImplicitUsings1()
|
||||
{
|
||||
ImplicitUsingsTest("<ImplicitUsings>true</ImplicitUsings>", true);
|
||||
CsProjSettingsTest("<ImplicitUsings>true</ImplicitUsings>", true, fc => fc.UseImplicitUsings);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestFileContent_ImplicitUsings2()
|
||||
{
|
||||
ImplicitUsingsTest("<ImplicitUsings>enable</ImplicitUsings>", true);
|
||||
CsProjSettingsTest("<ImplicitUsings>enable</ImplicitUsings>", true, fc => fc.UseImplicitUsings);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestFileContent_UseWpf0()
|
||||
{
|
||||
CsProjSettingsTest("<UseWPF>false</UseWPF>", false, fc => fc.UseWpf);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestFileContent_UseWpf1()
|
||||
{
|
||||
CsProjSettingsTest("<UseWPF>true</UseWPF>", true, fc => fc.UseWpf);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestFileContent_UseWindowsForms0()
|
||||
{
|
||||
CsProjSettingsTest("<UseWindowsForms>false</UseWindowsForms>", false, fc => fc.UseWindowsForms);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestFileContent_UseWindowsForms1()
|
||||
{
|
||||
CsProjSettingsTest("<UseWindowsForms>true</UseWindowsForms>", true, fc => fc.UseWindowsForms);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
Reference in New Issue
Block a user