From 6b6c67a77c5bd8947ae619349f007d5556e3f3d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20M=C3=BCller?= <muellerdavid4@gmail.com>
Date: Fri, 28 May 2021 10:36:14 +0200
Subject: [PATCH 1/3] fix + new sampleproject for tests with targetframework
 net472

---
 coverlet.sln                                  |  7 ++++
 .../Symbols/CecilSymbolHelper.cs              |  1 +
 .../Symbols/CecilSymbolHelperTests.cs         | 33 ++++++++++++++++---
 .../coverlet.core.tests.csproj                |  2 ++
 .../AsyncAwaitStateMachineNetFramework.cs     | 12 +++++++
 ...et.tests.projectsample.netframework.csproj | 12 +++++++
 6 files changed, 62 insertions(+), 5 deletions(-)
 create mode 100644 test/coverlet.tests.projectsample.netframework/AsyncAwaitStateMachineNetFramework.cs
 create mode 100644 test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj

diff --git a/coverlet.sln b/coverlet.sln
index 17d712674..025de5cd1 100644
--- a/coverlet.sln
+++ b/coverlet.sln
@@ -53,6 +53,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{9A8B19D4
 		test\Directory.Build.targets = test\Directory.Build.targets
 	EndProjectSection
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "coverlet.tests.projectsample.netframework", "test\coverlet.tests.projectsample.netframework\coverlet.tests.projectsample.netframework.csproj", "{E69D68C9-78ED-4076-A14B-D07295A4B2A5}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -115,6 +117,10 @@ Global
 		{F8199E19-FA9A-4559-9101-CAD7028121B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{F8199E19-FA9A-4559-9101-CAD7028121B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F8199E19-FA9A-4559-9101-CAD7028121B4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E69D68C9-78ED-4076-A14B-D07295A4B2A5}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -135,6 +141,7 @@ Global
 		{5FF404AD-7C0B-465A-A1E9-558CDC642B0C} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
 		{F8199E19-FA9A-4559-9101-CAD7028121B4} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
 		{9A8B19D4-4A24-4217-AEFE-159B68F029A1} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
+		{E69D68C9-78ED-4076-A14B-D07295A4B2A5} = {2FEBDE1B-83E3-445B-B9F8-5644B0E0E134}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {9CA57C02-97B0-4C38-A027-EA61E8741F10}
diff --git a/src/coverlet.core/Symbols/CecilSymbolHelper.cs b/src/coverlet.core/Symbols/CecilSymbolHelper.cs
index 44942fab1..25909720c 100644
--- a/src/coverlet.core/Symbols/CecilSymbolHelper.cs
+++ b/src/coverlet.core/Symbols/CecilSymbolHelper.cs
@@ -197,6 +197,7 @@ instruction.Previous.Operand is MethodReference operand &&
                     (
                         operand.DeclaringType.Scope.Name == "System.Runtime" ||
                         operand.DeclaringType.Scope.Name == "netstandard" ||
+                        operand.DeclaringType.Scope.Name == "mscorlib" ||
                         operand.DeclaringType.Scope.Name == "System.Threading.Tasks.Extensions"
                     )
                )
diff --git a/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs b/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs
index 3107db0a3..bfd659a61 100644
--- a/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs
+++ b/test/coverlet.core.tests/Symbols/CecilSymbolHelperTests.cs
@@ -4,6 +4,7 @@
 
 using Xunit;
 using Coverlet.Core.Samples.Tests;
+using coverlet.tests.projectsample.netframework;
 using Mono.Cecil;
 using Mono.Cecil.Cil;
 
@@ -11,16 +12,18 @@ namespace Coverlet.Core.Symbols.Tests
 {
     public class CecilSymbolHelperTests
     {
-        private readonly ModuleDefinition _module;
+        private ModuleDefinition _module;
         private readonly CecilSymbolHelper _cecilSymbolHelper;
+        private readonly DefaultAssemblyResolver _resolver;
+        private readonly ReaderParameters _parameters;
 
         public CecilSymbolHelperTests()
         {
             var location = GetType().Assembly.Location;
-            var resolver = new DefaultAssemblyResolver();
-            resolver.AddSearchDirectory(Path.GetDirectoryName(location));
-            var parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver };
-            _module = ModuleDefinition.ReadModule(location, parameters);
+            _resolver = new DefaultAssemblyResolver();
+            _resolver.AddSearchDirectory(Path.GetDirectoryName(location));
+            _parameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = _resolver };
+            _module = ModuleDefinition.ReadModule(location, _parameters);
             _cecilSymbolHelper = new CecilSymbolHelper();
         }
 
@@ -294,6 +297,26 @@ public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitStateMachine()
             Assert.Empty(points);
         }
 
+        [Fact]
+        public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitStateMachineNetFramework()
+        {
+            // arrange
+            string location = Directory.GetFiles(Directory.GetCurrentDirectory(), "coverlet.tests.projectsample.netframework.dll").First();
+            _resolver.AddSearchDirectory(Path.GetDirectoryName(location));
+            _module = ModuleDefinition.ReadModule(location, _parameters);
+
+            var nestedName = typeof(AsyncAwaitStateMachineNetFramework).GetNestedTypes(BindingFlags.NonPublic).First().Name;
+            var type = _module.Types.FirstOrDefault(x => x.FullName == typeof(AsyncAwaitStateMachineNetFramework).FullName);
+            var nestedType = type.NestedTypes.FirstOrDefault(x => x.FullName.EndsWith(nestedName));
+            var method = nestedType.Methods.First(x => x.FullName.EndsWith("::MoveNext()"));
+
+            // act
+            var points = _cecilSymbolHelper.GetBranchPoints(method);
+
+            // assert
+            Assert.Empty(points);
+        }
+
         [Fact]
         public void GetBranchPoints_IgnoresBranchesIn_AsyncAwaitValueTaskStateMachine()
         {
diff --git a/test/coverlet.core.tests/coverlet.core.tests.csproj b/test/coverlet.core.tests/coverlet.core.tests.csproj
index 2a7adf9aa..2185564da 100644
--- a/test/coverlet.core.tests/coverlet.core.tests.csproj
+++ b/test/coverlet.core.tests/coverlet.core.tests.csproj
@@ -5,6 +5,7 @@
     <TargetFramework>net5.0</TargetFramework>
     <IsPackable>false</IsPackable>
     <NoWarn>$(NoWarn);CS8002</NoWarn>
+    <MSBuildWarningsAsMessages>NU1702</MSBuildWarningsAsMessages>
     <!--For test TestInstrument_NetstandardAwareAssemblyResolver_PreserveCompilationContext-->
     <PreserveCompilationContext>true</PreserveCompilationContext>
   </PropertyGroup>
@@ -26,6 +27,7 @@
     <ProjectReference Include="$(RepoRoot)test\coverlet.tests.projectsample.excludedbyattribute\coverlet.tests.projectsample.excludedbyattribute.csproj" />
     <ProjectReference Include="$(RepoRoot)test\coverlet.core.tests.samples.netstandard\coverlet.core.tests.samples.netstandard.csproj" />
     <ProjectReference Include="$(RepoRoot)test\coverlet.tests.xunit.extensions\coverlet.tests.xunit.extensions.csproj" />
+    <ProjectReference Include="$(RepoRoot)test\coverlet.tests.projectsample.netframework\coverlet.tests.projectsample.netframework.csproj" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/test/coverlet.tests.projectsample.netframework/AsyncAwaitStateMachineNetFramework.cs b/test/coverlet.tests.projectsample.netframework/AsyncAwaitStateMachineNetFramework.cs
new file mode 100644
index 000000000..ac07e5a7f
--- /dev/null
+++ b/test/coverlet.tests.projectsample.netframework/AsyncAwaitStateMachineNetFramework.cs
@@ -0,0 +1,12 @@
+using System.Threading.Tasks;
+
+namespace coverlet.tests.projectsample.netframework
+{
+    public class AsyncAwaitStateMachineNetFramework
+    {
+        public async Task AsyncAwait()
+        {
+            await Task.CompletedTask;
+        }
+    }
+}
diff --git a/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj b/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj
new file mode 100644
index 000000000..4077b4e94
--- /dev/null
+++ b/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj
@@ -0,0 +1,12 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net472</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.2">
+      <PrivateAssets>all</PrivateAssets>
+    </PackageReference>
+  </ItemGroup>
+</Project>
\ No newline at end of file

From 4e9e2c4e692dc3ceba7b03e934b6a701f046b541 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20M=C3=BCller?= <muellerdavid4@gmail.com>
Date: Fri, 28 May 2021 10:55:37 +0200
Subject: [PATCH 2/3] update changelog

---
 Documentation/Changelog.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/Changelog.md b/Documentation/Changelog.md
index 490162318..1abb237a1 100644
--- a/Documentation/Changelog.md
+++ b/Documentation/Changelog.md
@@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ## Unreleased
 
 ### Fixed  
-
+-Fix branch coverage for targetframework net472 [#1167](https://github.com/coverlet-coverage/coverlet/issues/1167)
 -Fix partially covered throw statement [#1144](https://github.com/coverlet-coverage/coverlet/pull/1144)
 -Fix coverage threshold not failing when no coverage [#1115](https://github.com/coverlet-coverage/coverlet/pull/1115)  
 -Fix partially covered `await foreach` statement [#1107](https://github.com/coverlet-coverage/coverlet/pull/1107) by https://github.com/alexthornton1  

From 77dd042a9db69355eeb08e828f148536f91b9a37 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20M=C3=BCller?= <muellerdavid4@gmail.com>
Date: Sat, 29 May 2021 01:06:50 +0200
Subject: [PATCH 3/3] nit

---
 .../coverlet.tests.projectsample.netframework.csproj            | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj b/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj
index 4077b4e94..822b965de 100644
--- a/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj
+++ b/test/coverlet.tests.projectsample.netframework/coverlet.tests.projectsample.netframework.csproj
@@ -2,6 +2,8 @@
 
   <PropertyGroup>
     <TargetFramework>net472</TargetFramework>
+    <IsPackable>false</IsPackable>
+    <IsTestProject>false</IsTestProject>
   </PropertyGroup>
 
   <ItemGroup>