private ImmutableDictionary<string, FileAndType> GetAllSourceFiles(IEnumerable<FileAndType> allSourceFiles)
{
var dict = new Dictionary<string, FileAndType>(TypeForwardedToFilePathComparer.OSPlatformSensitiveStringComparer);
foreach (var item in allSourceFiles)
{
var path = (string)((TypeForwardedToRelativePath)item.File).GetPathFromWorkingFolder();
FileAndType ft;
if (dict.TryGetValue(path, out ft))
{
if (TypeForwardedToFilePathComparer.OSPlatformSensitiveStringComparer.Equals(ft.BaseDir, item.BaseDir) &&
TypeForwardedToFilePathComparer.OSPlatformSensitiveStringComparer.Equals(ft.File, item.File))
{
if (ft.Type >= item.Type)
{
Logger.LogWarning($"Ignored duplicate file {Path.Combine(item.BaseDir, item.File)}.");
continue;
}
else
{
Logger.LogWarning($"Ignored duplicate file {Path.Combine(ft.BaseDir, ft.File)}.");
}
}
else
{
if (ft.Type >= item.Type)
{
Logger.LogWarning($"Ignored conflict file {Path.Combine(item.BaseDir, item.File)} for {path} by {Path.Combine(ft.BaseDir, ft.File)}.");
continue;
}
else
{
Logger.LogWarning($"Ignored conflict file {Path.Combine(ft.BaseDir, ft.File)} for {path} by {Path.Combine(item.BaseDir, item.File)}.");
}
}
}
dict[path] = item;
}
return dict.ToImmutableDictionary(TypeForwardedToFilePathComparer.OSPlatformSensitiveStringComparer);
}