Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
53ceb13
WIP
dupdob Feb 9, 2026
4d8cbb3
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Feb 16, 2026
85a580c
fix: fix flaky test Dispose_ShouldDisposeAllRunnersInPool
dupdob Feb 17, 2026
051a7fb
chore: massive refactoring of InputFileResolver to migrate some respo…
dupdob Feb 24, 2026
1854661
chore: split inputsolver responsibilities in several classes for read…
dupdob Mar 31, 2026
85ef28f
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Mar 31, 2026
908e031
chore: address copilot requests
dupdob Mar 31, 2026
56821b2
dix: failing test on Windows
dupdob Mar 31, 2026
0a5b6ae
fox: slightly change sse test
dupdob Mar 31, 2026
de7d470
chore: address sonar errors
dupdob Mar 31, 2026
5eb56ec
chore: Copilot complaints
dupdob Mar 31, 2026
bd83103
fix: address copilot
dupdob Mar 31, 2026
4340ca6
misc: dump source code on fatal error during build
dupdob Apr 1, 2026
bf150b7
misc: Fix Sonar complaint
dupdob Apr 1, 2026
5fa8dd5
chore: Copilot
dupdob Apr 1, 2026
0ed49dc
chore: add missing mock entry
dupdob Apr 1, 2026
9cd9c8b
fix: fix issues with Microsot solution
dupdob Apr 1, 2026
ba7e21b
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Apr 1, 2026
1a0a0ac
misc: dump msbuild log when simulated build failed for debug purposes
dupdob Apr 1, 2026
00b9739
chore: sonar
dupdob Apr 2, 2026
0742f65
fix: incorrect configuration extration from solution info
dupdob Apr 2, 2026
963ff22
fix: failing unit tests
dupdob Apr 2, 2026
0983c8c
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Apr 2, 2026
345f608
Update src/Stryker.Core/Stryker.Core/Initialisation/TargetsForMutatio…
dupdob Apr 2, 2026
171da10
wip
dupdob Apr 2, 2026
56d1879
Merge remote-tracking branch 'origin/fix_3424' into fix_3424
dupdob Apr 2, 2026
109ef99
wip: improve build logging
dupdob Apr 2, 2026
ee4d9c8
chore: change retry logic
dupdob Apr 2, 2026
190377a
chore: refine error reporting for analysis
dupdob Apr 2, 2026
fc61c27
chore: renanming and minor redesign
dupdob Apr 7, 2026
f1a9ff6
fix: failing unit tests
dupdob Apr 7, 2026
422f630
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Apr 7, 2026
16a2376
fix: failing nuget test
dupdob Apr 7, 2026
4a5d47e
fix: misc issues (Sonar/Copilot)
dupdob Apr 7, 2026
69e1755
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Apr 8, 2026
d6d4b68
chore: signature changes
dupdob Apr 10, 2026
48155b3
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Apr 11, 2026
7967095
fix: Copilot/Sonar
dupdob Apr 11, 2026
73ad863
chore: Sonar
dupdob Apr 11, 2026
d0c9f03
chore: move test compilation to RelatedSourceProjectsInfo class
dupdob Apr 12, 2026
8d75016
Update src/Stryker.Core/Stryker.Core/Initialisation/InputFileResolver.cs
dupdob Apr 12, 2026
731a3d3
misc: improve log on analysis step
dupdob Apr 12, 2026
bdde34e
Merge remote-tracking branch 'origin/fix_3424' into fix_3424
dupdob Apr 12, 2026
fc2a34f
Merge remote-tracking branch 'origin/fix_3424' into fix_3424
dupdob Apr 12, 2026
cca7e65
Merge remote-tracking branch 'origin/fix_3424' into fix_3424
dupdob Apr 12, 2026
c8c5b60
misc: fix Sonar
dupdob Apr 13, 2026
557620b
fix: issues
dupdob Apr 13, 2026
71cd46e
chore: sonar & Copilot warnings
dupdob Apr 13, 2026
d92b31d
test: fix failing test
dupdob Apr 13, 2026
ef955e4
misc: pick netframwork first on windows os
dupdob Apr 13, 2026
2f6bd96
fix: change target framework seleciton logic
dupdob Apr 13, 2026
f1b82fc
chore: review nullable
dupdob Apr 13, 2026
ab0a032
Merge branch 'master' into fix_3424
dupdob May 17, 2026
fe2562d
fix: exception on dependency resolution
dupdob May 19, 2026
6b3f0bb
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob May 19, 2026
0ee93f6
feat: restore original framework selection behavor
dupdob May 20, 2026
5ef4461
chore: copilot comments (mainly english issues)
dupdob May 20, 2026
e6e88a0
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Jun 2, 2026
43766d4
misc: adjust IsTestProject property parsing
dupdob Jun 4, 2026
dca8aa8
misc: adjust IsTestProject property parsing
dupdob Jun 4, 2026
00f1251
misc: Copilot Comments
dupdob Jun 5, 2026
38e3ea8
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Jun 5, 2026
07d124d
misc: fix lockfiles
dupdob Jun 5, 2026
a7e2b53
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Jun 6, 2026
1bd4ff4
chore: copilot remarks
dupdob Jun 8, 2026
11c8684
fix: issue detecting test project not using MTP (branch regression)
dupdob Jun 8, 2026
0d18e58
chore: Copilot comments
dupdob Jun 8, 2026
49127f9
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Jun 16, 2026
b7a2a1b
misc: bump dependenvies
dupdob Jun 16, 2026
c704002
Merge remote-tracking branch 'origin/master' into fix_3424
dupdob Jun 17, 2026
97839a4
misc: address Copilot junk
dupdob Jun 17, 2026
3106bd8
test: adjust expected scoring
dupdob Jun 17, 2026
4454400
test: revert expected scoring for integration test.
dupdob Jun 17, 2026
efa566a
test: address copilot comment
dupdob Jun 17, 2026
2445944
chore: address Copilot comments
dupdob Jun 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 22 additions & 22 deletions src/.run/FullFrameworkApp.Test.run.xml
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="FullFrameworkApp.Test" type="DotNetProject" factoryName=".NET Project" nameIsGenerated="true">
<option name="EXE_PATH" value="$PROJECT_DIR$/Stryker.CLI/Stryker.CLI/bin/Debug/net8.0/Stryker.CLI" />
<option name="PROGRAM_PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/../integrationtest/TargetProjects/NetCore/FullFrameworkApp.Test" />
<option name="PASS_PARENT_ENVS" value="1" />
<option name="ENV_FILE_PATHS" value="" />
<option name="REDIRECT_INPUT_PATH" value="" />
<option name="MIXED_MODE_DEBUG" value="0" />
<option name="USE_MONO" value="0" />
<option name="RUNTIME_ARGUMENTS" value="" />
<option name="AUTO_ATTACH_CHILDREN" value="0" />
<option name="PROJECT_PATH" value="$PROJECT_DIR$/Stryker.CLI/Stryker.CLI/Stryker.CLI.csproj" />
<option name="PROJECT_EXE_PATH_TRACKING" value="1" />
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
<option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" />
<option name="PROJECT_KIND" value="DotNetCore" />
<option name="PROJECT_TFM" value="net8.0" />
<method v="2">
<option name="Build" />
</method>
</configuration>
</component>
<configuration default="false" name="FullFrameworkApp.Test" type="DotNetProject" factoryName=".NET Project" nameIsGenerated="true">
<option name="EXE_PATH" value="$PROJECT_DIR$/Stryker.CLI/Stryker.CLI/bin/Debug/net8.0/Stryker.CLI" />
<option name="PROGRAM_PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/../integrationtest/TargetProjects/NetFramework" />
<option name="PASS_PARENT_ENVS" value="1" />
<option name="ENV_FILE_PATHS" value="" />
<option name="REDIRECT_INPUT_PATH" value="" />
<option name="MIXED_MODE_DEBUG" value="0" />
<option name="USE_MONO" value="0" />
<option name="RUNTIME_ARGUMENTS" value="" />
<option name="AUTO_ATTACH_CHILDREN" value="0" />
<option name="PROJECT_PATH" value="$PROJECT_DIR$/Stryker.CLI/Stryker.CLI/Stryker.CLI.csproj" />
<option name="PROJECT_EXE_PATH_TRACKING" value="1" />
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
<option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="0" />
<option name="PROJECT_KIND" value="DotNetCore" />
<option name="PROJECT_TFM" value="net8.0" />
<method v="2">
<option name="Build" />
</method>
</configuration>
</component>
6 changes: 5 additions & 1 deletion src/Stryker.CLI/Stryker.CLI/Logging/LoggingInitializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@ public void SetupLogOptions(IStrykerInputs inputs, IFileSystem fileSystem = null
inputs.OutputPathInput.SuppliedInput = outputPath;

var diagnoseMode = inputs.DiagModeInput.Validate();
var logLevel = diagnoseMode ? LogEventLevel.Verbose : inputs.VerbosityInput.Validate();
var logLevel = inputs.VerbosityInput.Validate();
if (diagnoseMode && logLevel>LogEventLevel.Debug)
{
logLevel = LogEventLevel.Debug;
}
Comment thread
dupdob marked this conversation as resolved.
var logToFile = inputs.LogToFileInput.Validate(outputPath) || diagnoseMode;

ApplicationLogging.ConfigureLogger(logLevel, logToFile, diagnoseMode, outputPath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Linq;
using System.Reflection;
using Buildalyzer;
using Buildalyzer.Environment;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
Expand Down Expand Up @@ -1088,15 +1089,69 @@ public void ShouldSelectAvailableFramework_WhenDesiredNotFound(string targetFram
}

[TestMethod]
[DataRow("net3.0,net462", "net461,net2.0", null, "net3.0", "net2.0")]
[DataRow("net3.0,net2.0", "net2.0,net3.0", null, "net3.0", "net3.0")]
[DataRow("net3.0,net462", "net461,net2.0", "net2.0", "net3.0", "net2.0")]
[DataRow("net3.0,net462", "net461,net2.0", "net3.0", "net3.0", "net2.0")]
[DataRow("net3.0,net462", "net461,net2.0", "net461", "net3.0", "net2.0")]
[DataRow("net3.0,net462", "net461,net2.0", "net462", "net462", "net461")]
public void ShouldSelectFrameworkBasedOnTestProject(string testFrameworks, string projectFrameworks
[DataRow("netcoreapp3.0,net462", "netcoreapp2.0,net461", null, "netcoreapp3.0", "netcoreapp2.0")]
[DataRow("netcoreapp3.0,netcoreapp2.0", "netcoreapp3.0,netcoreapp2.0", null, "netcoreapp3.0", "netcoreapp3.0")]
[DataRow("netcoreapp3.0,net462", "netcoreapp2.0,net461", "netcoreapp2.0", "netcoreapp3.0", "netcoreapp2.0")]
[DataRow("netcoreapp3.0,net462", "netcoreapp2.0,net461", "netcoreapp3.0", "netcoreapp3.0", "netcoreapp2.0")]
[DataRow("netcoreapp3.0,net462", "netcoreapp2.0,net461", "net461", "net462", "net461")]
[DataRow("netcoreapp3.0,net462", "netcoreapp2.0,net461", "net462", "net462", "net461")]
public void ShouldSelectFrameworkBasedOnTestProject(string testFrameworks
, string projectFrameworks
, string targetFramework
, string expectedTestFramework,string expectedFramework)
, string expectedTestFramework,
string expectedFramework)
{
// Arrange
var basePath = Path.Combine(_sourcePath, "ExampleProject");
var testProjectPath = Path.Combine(_sourcePath, "TestProjectFolder", "TestProject.csproj");
var sourceProjectPath = Path.Combine(_sourcePath, "ExampleProject", "ExampleProject.csproj");
var sourceProjectNameFilter = "ExampleProject.csproj";

var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ sourceProjectPath, new MockFileData(_defaultTestProjectFileContents)},
{ testProjectPath, new MockFileData(_defaultTestProjectFileContents)},
{ Path.Combine(_sourcePath, "Recursive.cs"), new MockFileData("content")}
});

var options = new StrykerOptions()
{
ProjectPath = basePath,
SourceProjectName = sourceProjectNameFilter,
TestProjects = new List<string> { testProjectPath },
TargetFramework = targetFramework
};

var sourceProjectManagerMock = SourceProjectAnalyzerMock(sourceProjectPath,
fileSystem.AllFiles.Where(s => s.EndsWith(".cs")).ToArray(), null, projectFrameworks.Split(','));
var testProjectManagerMock = TestProjectAnalyzerMock(testProjectPath, sourceProjectPath, frameworks: testFrameworks.Split(','));

var analyzerResults = new Dictionary<string, IProjectAnalyzer>
{
{ "MyProject", sourceProjectManagerMock.Object },
{ "MyProject.UnitTests", testProjectManagerMock.Object }
};
BuildBuildAnalyzerMock(analyzerResults);

var target = BuildTestResolver(fileSystem);

// Act
var result = target.ResolveSourceProjectInfos(options).First();

// Assert
result.AnalyzerResult.TargetFramework.ShouldBe(expectedFramework);
result.TestProjectsInfo.AnalyzerResults.First().TargetFramework.ShouldBe(expectedTestFramework);
}

// Stryker will ignore NetFramework target when runnning on non windows platforms
Comment thread
dupdob marked this conversation as resolved.
Outdated
[TestMethodWithIgnoreIfSupport]
[IgnoreIf(nameof(Is.NotWindows))]
[DataRow("net462,netcoreapp3.0", "net461,netcoreapp2.0", null, "net462", "net461")]
public void ShouldSelectFrameworkBasedOnTestProjectOnWindows(string testFrameworks
, string projectFrameworks
, string targetFramework
, string expectedTestFramework,
string expectedFramework)
{
// Arrange
var basePath = Path.Combine(_sourcePath, "ExampleProject");
Expand Down Expand Up @@ -1320,7 +1375,7 @@ public void ShouldThrowOnMultipleProjectsWithoutFilter()

// Assert
var ex = result.ShouldThrow<InputException>();
ex.Message.ShouldContain("Test project contains more than one project reference. Please set the project option");
ex.Message.ShouldContain("Multiple projects identified as potential candidate for mutation testing. Please set the project option");
ex.Message.ShouldContain("Choose one of the following references:");
}

Expand Down Expand Up @@ -1481,7 +1536,7 @@ public void ShouldThrowWhenTheNameMatchesMore(string shouldMatchMoreThanOne)

var options = new StrykerOptions { SourceProjectName = shouldMatchMoreThanOne, ProjectPath = _testPath };
var result = () => target.ResolveSourceProjectInfos(options);
result.ShouldThrow<InputException>().Message.ShouldContain("more than one project");
result.ShouldThrow<InputException>().Message.ShouldContain("Multiple projects identified");
}

[TestMethod]
Expand Down Expand Up @@ -1567,7 +1622,7 @@ public void ShouldPassPlatformToBuildalyzerWhenSpecified()
target.ResolveSourceProjectInfos(options);

// Assert
managerMock.Verify(x => x.SetGlobalProperty("Platform", "x64"), Times.AtLeastOnce);
sourceProjectManagerMock.Verify(x => x.Build(It.Is<EnvironmentOptions>( env => env.GlobalProperties["Platform"] == "x64")), Times.AtLeastOnce);
}

[TestMethod]
Expand Down Expand Up @@ -1642,7 +1697,7 @@ public void ShouldPassPlatformFromSolutionToBuildalyzer()
target.ResolveSourceProjectInfos(options);

// Assert
managerMock.Verify(x => x.SetGlobalProperty("Platform", "x64"), Times.AtLeastOnce);
sourceProjectManagerMock.Verify(x => x.Build(It.Is<EnvironmentOptions>( env => env.GlobalProperties["Platform"] == "x64")), Times.AtLeastOnce);
}

[TestMethod]
Expand Down Expand Up @@ -1716,7 +1771,7 @@ public void ShouldUseNormalizedSolutionConfigurationWhenGetMatchingFallsBack()
target.ResolveSourceProjectInfos(options);

// Assert: Buildalyzer receives the solution-normalized platform "x86", not the requested "x64"
analyzerManagerMock.Verify(x => x.SetGlobalProperty("Platform", "x86"), Times.AtLeastOnce);
analyzerManagerMock.Verify(x => x.SetGlobalProperty("Platform", "x64"), Times.Never);
sourceProjectManagerMock.Verify(x => x.Build(It.Is<EnvironmentOptions>( env => env.GlobalProperties["Platform"] == "x86")), Times.AtLeastOnce);
sourceProjectManagerMock.Verify(x => x.Build(It.Is<EnvironmentOptions>( env => env.GlobalProperties["Platform"] == "x64")), Times.Never);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Linq;
using System.Threading.Tasks;
using Buildalyzer;
using Buildalyzer.Environment;
using Microsoft.CodeAnalysis;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
Expand Down Expand Up @@ -154,21 +155,21 @@ public async Task ShouldUseDesiredConfigurationWhenDefined()
};

var csPathName = FileSystem.Path.Combine(ProjectPath, "someFile.cs");
var sourceProjectAnalyzerMock = SourceProjectAnalyzerMock(csprojPathName, [csPathName]).Object;
var testProjectAnalyzerMock = TestProjectAnalyzerMock(testCsprojPathName, csprojPathName).Object;
var sourceProjectAnalyzerMock = SourceProjectAnalyzerMock(csprojPathName, [csPathName]);
var testProjectAnalyzerMock = TestProjectAnalyzerMock(testCsprojPathName, csprojPathName);
// The analyzer finds two projects
var analyzerResults = new Dictionary<string, IProjectAnalyzer>
{
{ "MyProject", sourceProjectAnalyzerMock },
{ "MyProject.UnitTests", testProjectAnalyzerMock }
{ "MyProject", sourceProjectAnalyzerMock.Object },
{ "MyProject.UnitTests", testProjectAnalyzerMock.Object }
};
var target = BuildProjectOrchestrator(analyzerResults, out var mockRunner, out var buildalyzerAnalyzerManagerMock);

// act
await target.MutateProjectsAsync(options, _reporterMock.Object, mockRunner.Object);

// assert
buildalyzerAnalyzerManagerMock.Verify(x => x.SetGlobalProperty("Configuration", "Release"), Times.AtLeastOnce);
sourceProjectAnalyzerMock.Verify(x => x.Build(It.Is<EnvironmentOptions>(env => env.GlobalProperties["Configuration"]=="Release")), Times.AtLeastOnce);
}

[TestMethodWithIgnoreIfSupport]
Expand Down Expand Up @@ -302,7 +303,7 @@ public async Task ShouldFilterInSolutionMode()

// act
var result = async() => (await target.MutateProjectsAsync(options, _reporterMock.Object, mockRunner.Object)).ToList();

// assert
result.ShouldThrow<InputException>();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void ShouldAddValueToEmptyCollectionExpression(string expression)
var expressionSyntax = SyntaxFactory.ParseExpression(expression) as CollectionExpressionSyntax;
var target = new CollectionExpressionMutator();
var result = target.ApplyMutations(expressionSyntax, null);

var mutation = result.ShouldHaveSingleItem();
mutation.DisplayName.ShouldBe("Collection expression mutation");
var replacement = mutation.ReplacementNode.ShouldBeOfType<CollectionExpressionSyntax>();
Expand Down Expand Up @@ -151,7 +151,7 @@ namespace ExampleProject;

class ClassName {
public IEnumerable<int> M() => Iter([ 1 ]);

public IEnumerable<T> Iter<T>(IList<T> list) {
foreach (var l in list) {
yield return l;
Expand All @@ -168,25 +168,25 @@ namespace ExampleProject;

class ClassName {
public IEnumerable<int> M() => Iter([ 1 ]);

public IEnumerable<T> Iter<T>(IList<T> list) {
foreach (var l in list) {
yield return l;
}
}

public IEnumerable<T> Iter<T>(IReadOnlyCollection<T> list) {
foreach (var l in list) {
yield return l;
}
}

public IEnumerable<T> Iter<T>(T[] list) {
foreach (var l in list) {
yield return l;
}
}

public IEnumerable<T> Iter<T>(ReadOnlyMemory<T> list) {
for (var i = 0; i < list.Length; i++) {
yield return list.Span[i];
Expand Down Expand Up @@ -317,7 +317,7 @@ static ReadOnlySpan<int> AsSpanConstants()
{
return [1, 2, 3]; // ok: span refers to assembly data section
}

static ReadOnlySpan<T> AsSpan3<T>(T x, T y, T z)
{
return (T[])[x, y, z]; // ok: span refers to T[] on heap
Expand All @@ -340,7 +340,7 @@ class ClassName {
public static void Method() {
var a = AsArray([1, 2, 3]); // AsArray<int>(int[])
var b = AsListOfArray([[4, 5], []]); // AsListOfArray<int>(List<int[]>)

static T[] AsArray<T>(T[] arg) => arg;
static List<T[]> AsListOfArray<T>(List<T[]> arg) => arg;
}
Expand All @@ -360,19 +360,19 @@ namespace ExampleProject;
class ClassName {
static void Generic<T>(Span<T> value) { }
static void Generic<T>(T[] value) { }

static void SpanDerived(Span<string> value) { }
static void SpanDerived(object[] value) { }

static void ArrayDerived(Span<object> value) { }
static void ArrayDerived(string[] value) { }

// https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions#overload-resolution
public static void Method() {
// Array initializers
Generic(new[] { "" }); // string[]
ArrayDerived(new[] { "" }); // string[]

// Collection expressions
Generic([""]); // Span<string>
SpanDerived([""]); // Span<string>
Expand All @@ -393,13 +393,13 @@ namespace ExampleProject;
class ClassName {
static void Generic<T>(Span<T> value) { }
static void Generic<T>(T[] value) { }

static void SpanDerived(Span<string> value) { }
static void SpanDerived(object[] value) { }

static void ArrayDerived(Span<object> value) { }
static void ArrayDerived(string[] value) { }

// https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions#syntax-ambiguities
public static void Method() {
Range range1 = default;
Expand All @@ -423,13 +423,13 @@ namespace ExampleProject;
class ClassName {
static void Generic<T>(Span<T> value) { }
static void Generic<T>(T[] value) { }

static void SpanDerived(Span<string> value) { }
static void SpanDerived(object[] value) { }

static void ArrayDerived(Span<object> value) { }
static void ArrayDerived(string[] value) { }

// https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-12.0/collection-expressions#resolved-questions
public static void Method() {
void DoWork(IEnumerable<long> values) { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public IReadOnlyCollection<SourceProjectInfo> GetMutableProjectsInfo(IStrykerOpt
/// <inheritdoc/>
public void BuildProjects(IStrykerOptions options, IEnumerable<SourceProjectInfo> projects)
{
var solutionInfo = projects.First().SolutionInfo;
var solutionInfo = projects.First().TargetsForMutation;
// pick configuration and platform from solution if available
var configuration = solutionInfo?.Configuration ?? options.Configuration;
var platform = solutionInfo?.Platform ?? options.Platform;
Expand Down
Loading
Loading