Skip to content

Commit f0fe91e

Browse files
committed
Add some RAR-related file copy explainers
1 parent 42749df commit f0fe91e

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

src/StructuredLogger/Analyzers/BuildAnalyzer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public BuildAnalyzer(Build build)
3636
resolveAssemblyReferenceAnalyzer = new ResolveAssemblyReferenceAnalyzer();
3737
cppAnalyzer = new CppAnalyzer();
3838
fileCopyMap = new FileCopyMap();
39+
fileCopyMap.Build = build;
3940
projectReferenceGraph = new ProjectReferenceGraph(build);
4041
build.FileCopyMap = fileCopyMap;
4142
build.ProjectReferenceGraph = projectReferenceGraph;

src/StructuredLogger/Analyzers/FileCopyMap.cs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ public class FileCopyMap : ISearchExtension
6565
private Dictionary<string, DirectoryData> directories = new Dictionary<string, DirectoryData>(StringComparer.OrdinalIgnoreCase);
6666
public bool AugmentOtherResults => false;
6767

68+
public Build Build { get; set; }
69+
6870
public event Action<FileData, IList<SearchResult>> FoundSingleFileCopy;
6971

7072
public void AnalyzeTask(Task task)
@@ -252,6 +254,7 @@ public bool TryGetResults(NodeQueryMatcher matcher, IList<SearchResult> resultSe
252254
private void TryExplainSingleFileCopy(Project project, string filePath, IList<SearchResult> resultSet)
253255
{
254256
var fileName = Path.GetFileName(filePath);
257+
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(filePath);
255258

256259
var target = project.FindTarget("_GetCopyToOutputDirectoryItemsFromTransitiveProjectReferences");
257260
if (target != null)
@@ -296,6 +299,24 @@ private void TryExplainSingleFileCopy(Project project, string filePath, IList<Se
296299
}
297300
}
298301

302+
target = project.FindTarget("ResolveProjectReferences");
303+
if (target != null)
304+
{
305+
var outputs = target.FindChild<Folder>(Strings.TargetOutputs);
306+
if (outputs != null)
307+
{
308+
var outputItem = outputs.FindChild<Item>(i => Path.GetFileName(i.Text).Equals(fileName, StringComparison.OrdinalIgnoreCase));
309+
if (outputItem != null)
310+
{
311+
var metadata = outputItem.FindChild<Metadata>(static m => m.Name == "MSBuildSourceProjectFile");
312+
if (metadata != null)
313+
{
314+
resultSet.Add(new SearchResult(metadata));
315+
}
316+
}
317+
}
318+
}
319+
299320
target = project.FindTarget("ResolveAssemblyReferences");
300321
if (target != null)
301322
{
@@ -320,6 +341,22 @@ private void TryExplainSingleFileCopy(Project project, string filePath, IList<Se
320341
}
321342
}
322343
}
344+
345+
var results = task.FindChild<Folder>(Strings.Results);
346+
if (results != null)
347+
{
348+
foreach (var dependency in results.Children.OfType<Parameter>())
349+
{
350+
if (dependency.Title.ContainsIgnoreCase(fileNameWithoutExtension))
351+
{
352+
var resolvedFilePath = dependency.FindChild<Item>(i => i.Title.ContainsIgnoreCase(filePath));
353+
if (resolvedFilePath != null)
354+
{
355+
resultSet.Add(new SearchResult(resolvedFilePath));
356+
}
357+
}
358+
}
359+
}
323360
}
324361
}
325362

@@ -452,6 +489,43 @@ private void TryGetFiles(string text, IList<SearchResult> resultSet, NodeQueryMa
452489
}
453490
}
454491

492+
if (results.Count == 0 && !string.IsNullOrWhiteSpace(text))
493+
{
494+
var rars = Build.FindChildrenRecursive<ResolveAssemblyReferenceTask>();
495+
foreach (var rar in rars)
496+
{
497+
var project = rar.GetNearestParent<Project>();
498+
if (project != null && matcher.ProjectMatchers.All(p => p.IsMatch(project.Name, project.SourceFilePath) != null))
499+
{
500+
var resultsFolder = rar.FindChild<Folder>(Strings.Results);
501+
if (resultsFolder != null)
502+
{
503+
foreach (var dependency in resultsFolder.Children.OfType<Parameter>())
504+
{
505+
bool found = false;
506+
foreach (var item in dependency.Children.OfType<Item>())
507+
{
508+
if (item.Title.ContainsIgnoreCase(text))
509+
{
510+
resultSet.Add(new SearchResult(item));
511+
found = true;
512+
}
513+
}
514+
515+
if (found)
516+
{
517+
var copyLocal = dependency.FindChild<Item>(i => i.Title.ContainsIgnoreCase("CopyLocal"));
518+
if (copyLocal != null)
519+
{
520+
resultSet.Add(new SearchResult(copyLocal));
521+
}
522+
}
523+
}
524+
}
525+
}
526+
}
527+
}
528+
455529
results.Sort((l, r) => l.Node.Title.CompareTo(r.Node.Title));
456530

457531
foreach (var result in results)

0 commit comments

Comments
 (0)