public override IEnumerable Resolve()

in plugin-dotnet-agent/src/main/csharp/TeamCity.Dotnet.TestSuppressor/TeamCity.Dotnet.TestSuppressor/Domain/Targeting/Strategies/DirectoryTargetResolvingStrategy.cs [23:80]


    public override IEnumerable<(IFileSystemInfo, TargetType)> Resolve(string target)
    {
        _logger.LogInformation("Resolving target directory: {Target}", target);
        
        var directoryInfoResult = FileSystem.TryGetDirectoryInfo(target);
        if (directoryInfoResult.IsError)
        {
            _logger.LogError(directoryInfoResult.ErrorValue, "Failed to resolve target directory: {Target}", target);
            yield break;
        }

        var directoryInfo = directoryInfoResult.Value;
        
        var slnFiles = GetFileSearchPattern(TargetType.Solution)
            .SelectMany(sp => directoryInfo.GetFiles(sp, SearchOption.TopDirectoryOnly)).ToList();
        var csprojFiles = GetFileSearchPattern(TargetType.Project)
            .SelectMany(sp => directoryInfo.GetFiles(sp, SearchOption.TopDirectoryOnly)).ToList();
        
        foreach (var msBuildBinlogFile in TryFindMsBuildBinlogFiles(directoryInfo))
        {
            _logger.LogInformation("Resolved MSBuild .binlog file in the target directory: {MsBuildBinlog}", msBuildBinlogFile.FullName);
            yield return (msBuildBinlogFile, TargetType.MsBuildBinlog);
        }

        // not sure how to handle this
        // TODO need to test how `dotnet test` handles this:
        // 1. if there are multiple solutions in the directory
        // 2. if there are multiple projects in the directory
        // 3. if there are both solutions and projects in the directory
        // 4. if there are no solutions or projects in the directory
        if (slnFiles.Count != 0)
        {
            foreach (var slnFile in slnFiles)
            {
                _logger.LogInformation("Resolved solution in target directory: {Solution}", slnFile.FullName);
                yield return (slnFile, TargetType.Solution);
            }
        }
        else if (csprojFiles.Count != 0)
        {
            foreach (var csprojFile in csprojFiles)
            {
                _logger.LogInformation("Resolved project in target directory: {Project}", csprojFile.FullName);
                yield return (csprojFile, TargetType.Project);
            }
        }
        else
        {
            foreach (var fileSearchPattern in GetFileSearchPattern(TargetType.Assembly))
            {
                foreach (var assemblyFile in directoryInfo.GetFiles(fileSearchPattern, SearchOption.AllDirectories))
                {
                    _logger.LogInformation("Resolved assembly in target directory: {Assembly}", assemblyFile.FullName);
                    yield return (assemblyFile, TargetType.Assembly);
                }
            }
        }
    }