Skip to content

Commit b8dbb8c

Browse files
committed
C# Add missing Windows Forms implicit usings
1 parent 54c9135 commit b8dbb8c

File tree

3 files changed

+73
-6
lines changed

3 files changed

+73
-6
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,16 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
116116
bool.TryParse(webViewExtractionOption, out var shouldExtractWebViews) &&
117117
shouldExtractWebViews)
118118
{
119+
CompilationInfos.Add(("WebView extraction enabled", "1"));
119120
GenerateSourceFilesFromWebViews(allNonBinaryFiles);
120121
}
122+
else
123+
{
124+
CompilationInfos.Add(("WebView extraction enabled", "0"));
125+
}
126+
127+
CompilationInfos.Add(("UseWPF set", fileContent.UseWpf ? "1" : "0"));
128+
CompilationInfos.Add(("UseWindowsForms set", fileContent.UseWindowsForms ? "1" : "0"));
121129

122130
GenerateSourceFileFromImplicitUsings();
123131

@@ -434,6 +442,11 @@ private void GenerateSourceFileFromImplicitUsings()
434442
"Microsoft.Extensions.DependencyInjection", "Microsoft.Extensions.Hosting", "Microsoft.Extensions.Logging" });
435443
}
436444

445+
if (fileContent.UseWindowsForms)
446+
{
447+
usings.UnionWith(new[] { "System.Drawing", "System.Windows.Forms" });
448+
}
449+
437450
usings.UnionWith(fileContent.CustomImplicitUsings);
438451

439452
logger.LogInfo($"Generating source file for implicit usings. Namespaces: {string.Join(", ", usings.OrderBy(u => u))}");

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,28 @@ public bool UseImplicitUsings
6161
}
6262
}
6363

64+
private bool useWpf = false;
65+
66+
public bool UseWpf
67+
{
68+
get
69+
{
70+
initialize.Run();
71+
return useWpf;
72+
}
73+
}
74+
75+
private bool useWindowsForms = false;
76+
77+
public bool UseWindowsForms
78+
{
79+
get
80+
{
81+
initialize.Run();
82+
return useWindowsForms;
83+
}
84+
}
85+
6486
private bool isLegacyProjectStructureUsed = false;
6587

6688
public bool IsLegacyProjectStructureUsed
@@ -173,6 +195,14 @@ private void DoInitialize()
173195
|| line.Contains("<ImplicitUsings>enable</ImplicitUsings>".AsSpan(), StringComparison.Ordinal)
174196
|| line.Contains("<ImplicitUsings>true</ImplicitUsings>".AsSpan(), StringComparison.Ordinal);
175197

198+
// Determine if WPF is used.
199+
useWpf = useWpf
200+
|| line.Contains("<UseWPF>true</UseWPF>".AsSpan(), StringComparison.Ordinal);
201+
202+
// Determine if Windows Forms is used.
203+
useWindowsForms = useWindowsForms
204+
|| line.Contains("<UseWindowsForms>true</UseWindowsForms>".AsSpan(), StringComparison.Ordinal);
205+
176206
// Find all custom implicit usings.
177207
foreach (var valueMatch in CustomImplicitUsingDeclarations().EnumerateMatches(line))
178208
{

csharp/extractor/Semmle.Extraction.Tests/FileContent.cs

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void TestFileContent2()
8484
Assert.Contains("StyleCop.Analyzers".ToLowerInvariant(), allPackages);
8585
}
8686

87-
private static void ImplicitUsingsTest(string line, bool expected)
87+
private static void CsProjSettingsTest(string line, bool expected, Func<FileContent, bool> func)
8888
{
8989
// Setup
9090
var lines = new List<string>()
@@ -94,28 +94,52 @@ private static void ImplicitUsingsTest(string line, bool expected)
9494
var fileContent = new TestFileContent(lines);
9595

9696
// Execute
97-
var useImplicitUsings = fileContent.UseImplicitUsings;
97+
var actual = func(fileContent);
9898

9999
// Verify
100-
Assert.Equal(expected, useImplicitUsings);
100+
Assert.Equal(expected, actual);
101101
}
102102

103103
[Fact]
104104
public void TestFileContent_ImplicitUsings0()
105105
{
106-
ImplicitUsingsTest("<ImplicitUsings>false</ImplicitUsings>", false);
106+
CsProjSettingsTest("<ImplicitUsings>false</ImplicitUsings>", false, fc => fc.UseImplicitUsings);
107107
}
108108

109109
[Fact]
110110
public void TestFileContent_ImplicitUsings1()
111111
{
112-
ImplicitUsingsTest("<ImplicitUsings>true</ImplicitUsings>", true);
112+
CsProjSettingsTest("<ImplicitUsings>true</ImplicitUsings>", true, fc => fc.UseImplicitUsings);
113113
}
114114

115115
[Fact]
116116
public void TestFileContent_ImplicitUsings2()
117117
{
118-
ImplicitUsingsTest("<ImplicitUsings>enable</ImplicitUsings>", true);
118+
CsProjSettingsTest("<ImplicitUsings>enable</ImplicitUsings>", true, fc => fc.UseImplicitUsings);
119+
}
120+
121+
[Fact]
122+
public void TestFileContent_UseWpf0()
123+
{
124+
CsProjSettingsTest("<UseWPF>false</UseWPF>", false, fc => fc.UseWpf);
125+
}
126+
127+
[Fact]
128+
public void TestFileContent_UseWpf1()
129+
{
130+
CsProjSettingsTest("<UseWPF>true</UseWPF>", true, fc => fc.UseWpf);
131+
}
132+
133+
[Fact]
134+
public void TestFileContent_UseWindowsForms0()
135+
{
136+
CsProjSettingsTest("<UseWindowsForms>false</UseWindowsForms>", false, fc => fc.UseWindowsForms);
137+
}
138+
139+
[Fact]
140+
public void TestFileContent_UseWindowsForms1()
141+
{
142+
CsProjSettingsTest("<UseWindowsForms>true</UseWindowsForms>", true, fc => fc.UseWindowsForms);
119143
}
120144

121145
[Fact]

0 commit comments

Comments
 (0)